2017-08-03 8 views
2

2番目のワークブックのワークシートの変数を設定しようとしています(最後の行にオブジェクトエラーをスローする、stamWs)。私はすでに両方のワークブックの変数を持っています。私はアクティブなワークシート、運やワークシート/ワークブックの組み合わせに他の参照のホストを参照しようとしたvba設定wksheet変数

Option Explicit 

Sub Kopie() 

Application.ScreenUpdating = False 

Const StBestand = "Stambestand.xlsm" 
Const Competenties = "Competenties.xlsx" 

Dim stam, comp As String 
Dim PathOnly, ijk, FileOnly As String 
Dim ijkWs, stamWs As Worksheets 

ijk = ThisWorkbook.FullName 
FileOnly = ThisWorkbook.Name 
PathOnly = Left(ijk, Len(ijk) - Len(FileOnly)) 
stam = PathOnly & "\" & StBestand 
comp = PathOnly & "\" & Competenties 
Set ijkWs = ActiveSheet 

    Workbooks.Open stam 
Set stamWs = stam.Sheets("stambestand") 

次のように私のコードが見えます。あなたのご意見は大変ありがとうございます。

更新:入力男のためのタンク。変数シートを設定する前に、宣言部でシートをシートに変更してブックを開いた。

答えて

1

ブックを開いてワークシートオブジェクトを作成するときに、ワークブックオブジェクトを設定する必要があります。

Dim newWB as WorkBook 
Set newWB = Workbooks.Open(stam) 
Set stamWs = newWB.WorkSheets("stambestand") 
0

名前をつけてPathOnly変数を使用する代わりに、ThisWorkbook.Pathメソッドを使用します。はるかに速く、簡単に、また、エラーの可能性を排除します。 おそらくPathOnly変数の末尾にバックスラッシュがありますので、stam変数は "workbook_path \\ Stambestand.xlsm"のようになり、問題の原因になる可能性があります。

はあなたがいないWorksheetsWorksheetタイプを必要とする

stam = ThisWorkbook.Path & "\" & StBestand 
1

を試してみてください。

Dim ijkWs, stamWs As Worksheet 

しかし、ここでunintuitivelyのみstamWsタイプWorksheetの場合は、代わりに常に形式を使用します。

Dim ijkWs As Worksheet, stamWs As Worksheet. 

これは、すべてあなたのDim Sに適用します。

あなたがそうプロパティがありませんので、stam.Sheetsが正しくないstamがちょうど文字列で、シートを取得し、その後開かれたブックを保存する必要があります。

Dim wb As Workbook 
Set wb = Workbooks.Open(stam) 
Set stamWs = wb.Sheets("stambestand") 

私はまた、あなたが変更と思う:

stam = PathOnly & StBestand 
comp = PathOnly & Competenties 

現在の本はどこにも保存されていない場合は、二重\に無効なパスを取得します。

+0

ありがとうございました。アンカーは非常に便利です。しかし、私は受け入れ可能な答えとしてマークすることしかできません。 – MyName