Подтвердить что ты не робот

Почему я не могу определить свою книгу как объект?

Почему я не могу определить книгу как из этих способов? (У меня есть бит бит там только для быстрого теста.) Как его исправить?

В результате получается "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, получился довольно изощренным, но это меня насторожило. Мне не хватает чего-то элементарного.
Я просто хочу определить книгу, поэтому мне не нужно вводить ее полностью!

4b9b3361

Ответ 1

Это действительно разумный вопрос. Вот ответ от Excel 2010:

"Объект Workbook является членом коллекции Workbooks. Коллекция Workbooks содержит все объекты рабочей книги, которые в настоящее время открываются в Microsoft Excel."

Итак, поскольку эта книга не открыта - по крайней мере, я предполагаю, что это не так - она ​​не может быть установлена ​​как объект рабочей книги. Если он был открыт, вы просто установите его так:

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

Ответ 2

Вам нужно будет открыть книгу, чтобы ссылаться на нее.

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 answer, если книга уже открыта. Чтобы сделать этот ответ максимально полным, я включаю свой комментарий к его ответу:

Почему я должен "установить" его?

Set заключается в том, как VBA назначает переменные объекта. Поскольку a Range и a Workbook/Worksheet являются объектами, вы должны использовать с ними Set.