16

これらの方法でワークブックを定義できないのはなぜですか? (簡単なテストのために範囲ビットを入れています。) どうすれば修正できますか?

これにより、"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 を叩いていて、かなり洗練されていましたが、これには困惑しています。私は何か基本的なものを欠いています。
ワークブックを定義したいだけなので、すべてを入力する必要はありません。

4

2 に答える 2

19

それは実際には賢明な質問です。Excel 2010 ヘルプからの回答は次のとおりです。

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

したがって、そのワークブックは開いていないため (少なくとも開いていないと思います)、ワークブック オブジェクトとして設定することはできません。開いている場合は、次のように設定します。

Set wbk = workbooks("Master Benchmark Data Sheet.xlsx")
于 2012-06-15T16:15:13.793 に答える
15

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

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 の回答に従ってください。この回答を可能な限り完全にするために、彼の回答に対する私のコメントを含めます。

なぜ「設定」する必要があるのですか?

SetVBA がオブジェクト変数を割り当てる方法です。aRangeと a Workbook/Worksheetobjectであるため、これらと一緒に使用する必要がありますSet

于 2012-06-15T16:20:09.850 に答える