2016-05-30 5 views
1

Я хочу вызвать функцию, которая возвращает книгу или ссылку на эту книгу. Однако я не могу установить значение «wb» с помощью рабочей книги, возвращенной из функции.VBA - возврат ссылки на WorkBook

Public Sub TestScript() 

    Dim wb As Workbook  
    wb = GetWorkBook() 

End Sub 


    Function GetWorkBook() As Workbook 

    Dim db2 As Workbook 
    Dim xlApp As Excel.Application 
    Set xlApp = GetObject(, "Excel.Application") 

    Dim xlWB As Excel.Workbook 
    For Each xlWB In xlApp.Workbooks 
     If xlWB.Name = "Test.XLSX" Then 
      Set db2 = xlWB 
     End If 
    Next xlWB 

    Set xlApp = Nothing 
    Set xlWB = Nothing 

    GetWorkBook = db2 


    End Function 

Дает:

Runtime Error 91: Переменная объекта или с блока переменной не установлено

ответ

6

Вы забыли использовать set заявление два раза:

Public Sub TestScript() 

    Dim wb As Workbook 
    Set wb = GetWorkBook() 

End Sub 

Function GetWorkBook() As Workbook 

Dim db2 As Workbook 
Dim xlApp As Excel.Application 
Set xlApp = GetObject(, "Excel.Application") 

Dim xlWB As Excel.Workbook 
For Each xlWB In xlApp.Workbooks 
    If xlWB.Name = "Test.XLSX" Then 
     Set db2 = xlWB 
    End If 
Next xlWB 

Set xlApp = Nothing 
Set xlWB = Nothing 

Set GetWorkBook = db2 

End Function 

Всякий раз, когда вы назначаете объект av (ссылайтесь на него таким образом), тогда вы должны использовать оператор set (https://stackoverflow.com/a/349636/1153513).

Примеры:

  1. Set rngYourRangeVariable = Thisworkbook.Worksheets("Sheet1").Range("A1:C4")
  2. Set shtSomeSheet = Thisworkbook.Worksheet("Sheet1")
  3. Set conSomeADOconnection = New ADODB.Connection
Смежные вопросы