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

时间:2012-06-15 16:11:28

标签: 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

这会创建一个"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打了一个月,变得非常复杂,但这让我很难过。我错过了一些基本的东西 我只想定义一个工作簿,所以我不必全部输入!

2 个答案:

答案 0 :(得分:20)

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

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

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

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

答案 1 :(得分: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