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

我在这里想念什么?我已经在 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 的回答。为了使这个答案尽可能完整,我在他的回答中加入了我的评论:

为什么我必须“设置”它?

Set是 VBA 分配对象变量的方式。由于 aRange和 a Workbook/Worksheetobjects,因此您必须Set与这些一起使用。

于 2012-06-15T16:20:09.850 回答