为什么我不能通过这些方式定义工作簿? (我有一个范围位,只是为了快速测试。)我该如何修复它?
这会产生"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打了一个月,变得非常复杂,但这让我很难过。我错过了一些基本的东西 我只想定义一个工作簿,所以我不必全部输入!
答案 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分配对象变量的方式。由于Range
和Workbook
/ Worksheet
是对象,因此您必须使用Set
。