2012-06-15 10 views
12

なぜこれらの方法でワークブックを定義できないのですか? (ちょっとしたテストのためにそこにビットが入っています)どうすれば修正できますか?なぜワークブックをオブジェクトとして定義できないのですか?

これは"Compile Error: Type Mismatch"

Sub Setwbk() 

    Dim wbk As Workbook 

    Set wbk = "F:\Quarterly Reports\2012 Reports\New Reports\ _ 
      Master Benchmark Data Sheet.xlsx" 

    Range("A2") = wbk.Name 

End Sub 

を生成し、これが作成されます"Runtime Error '91': Object variable or with block variable not set"

Sub Setwbk() 

    Dim wbk As Workbook 

    wbk = "F:\Quarterly Reports\2012 Reports\New Reports\ _ 
      Master Benchmark Data Sheet.xlsx" 

    Range("A2") = wbk.Name 

End Sub 

私はここで何をしないのですか?私は1ヶ月間VBAで叩き掛けてきましたが、かなり洗練されていましたが、これは私に困っています。私は要素的なものが欠けている。
ブックを定義して、すべて入力する必要はありません。

答えて

18

実際には賢明な質問です。

"WorkbookオブジェクトはWorkbooksコレクションのメンバであり、Workbooksコレクションには現在Microsoft Excelで開いているすべてのブックオブジェクトが含まれています。"

したがって、そのブックは開いていないため、少なくともブックではないと想定しています。ブックブックとして設定することはできません。開いていた場合は、次のように設定してください:

Set wbk = workbooks("Master Benchmark Data Sheet.xlsx") 
+1

と@Gaffiには、答えの残りの、そして最も密接な部分があります。 –

+2

私は参照してください。私はそれを開かなければならない。私は「ワークブック」のビットを省いた。私もそれを "設定"する必要があります。なぜ私はそれを "設定"する必要がありますか? (なぜ私は範囲を「設定」しなければならないのか聞かなくてはならないと思うのですか?)私は言語を理解しようとしています。それはオブジェクトのプロパティとは対照的にオブジェクトなのですか?どうもありがとうございました! –

+1

@ user1408660 'Set'は、VBAが*オブジェクト*変数をどのように割り当てるかです。 'Range'と' Workbook'/'Worksheet'は* objects *なので、これらで' Set'を使う必要があります。言い換えれば、あなたの前提は正しいです! – Gaffi

13

これを参照するには、ブックを開く必要があります。

Sub Setwbk() 

    Dim wbk As Workbook 

    Set wbk = Workbooks.Open("F:\Quarterly Reports\2012 Reports\New Reports\ _ 
     Master Benchmark Data Sheet.xlsx") 

End Sub 

ワークブックがすでに開いている場合* Doug's answerに従ってください。できるだけ完全として、この答えを作るために、私は彼の答えに私のコメントを含めています:

なぜ私はそれを「設定」する必要がありますか?

SetはVBAがオブジェクト変数を割り当てる方法です。 RangeWorkbook/Worksheetオブジェクトであるため、これらにはSetを使用する必要があります。

+0

私は上記のdoug glancyに別のqを投稿しました。あなたの素早い答えに多くの感謝! –

+0

+1でもコメントをフォローしてください! –

関連する問題