为什么我不能将我的工作簿定义为对象?

Tom*_*y Z 15 excel vba excel-vba

为什么我不能通过这些方式定义工作簿?(我有一个范围位,只是为了快速测试.)我该如何解决?

这会产生一个 "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
Run Code Online (Sandbox Code Playgroud)

这创造了一个 "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
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我已经在VBA打了一个月,变得非常复杂,但这让我很难过.我错过了一些基本的东西.
我只想定义一个工作簿,所以我不必全部输入!

Dou*_*ncy 19

这实际上是一个明智的问题.以下是Excel 2010帮助的答案:

"Workbook对象是Workbooks集合的成员.Workbook集合包含当前在Microsoft Excel中打开的所有Workbook对象."

因此,由于该工作簿未打开 - 至少我认为它不是 - 它不能被设置为工作簿对象.如果它打开你只需设置如下:

Set wbk = workbooks("Master Benchmark Data Sheet.xlsx")
Run Code Online (Sandbox Code Playgroud)

  • 我知道了.我必须打开它.我遗漏了"工作簿".我还需要"设置"它.为什么我要"设置"它?(我想我应该问为什么我还必须"设置"范围?)我只是想了解语言.是因为它们是对象而不是对象的属性?非常感谢你! (2认同)

Gaf*_*ffi 14

您需要打开工作簿才能引用它.

Sub Setwbk()

    Dim wbk As Workbook

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

End Sub
Run Code Online (Sandbox Code Playgroud)

*如果工作簿已经打开,请按照Doug的回答.为了使这个答案尽可能完整,我将对他的回答进行评论:

为什么我要"设置"它?

Set是VBA如何分配对象变量.由于a RangeWorkbook/ Worksheet对象,因此必须使用Set这些对象.