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

为什么我不能以这些方式定义工作簿? (我有范围在那里只是一个快速testing。)我该如何解决?

这会产生一个"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 

这会创build一个"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上打了一个月,变得相当复杂,但这让我难住了。 我错过了一些元素。
我只想定义一个工作簿,所以我不必input全部!

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

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

所以,由于该工作簿没有打开 – 至less我认为它不是 – 它不能被设置为工作簿对象。 如果它是开放的,你可以像这样设置它:

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

你需要打开工作簿来引用它。

 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如何分配对象variables。 由于RangeWorkbook / Worksheet对象 ,因此您必须使用Set这些对象。