VBA - 返回对WorkBook的引用

Use*_*job 1 excel vba

我想调用一个返回工作簿或对该工作簿的引用的函数.但是,我无法使用函数返回的工作簿设置值'wb'.

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
Run Code Online (Sandbox Code Playgroud)

得到:

运行时错误91:未设置对象变量或块变量

Ral*_*lph 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
Run Code Online (Sandbox Code Playgroud)

无论何时将对象分配给变量(从而引用它),您都必须使用该set语句(/sf/answers/24474551/).

例子:

  1. Set rngYourRangeVariable = Thisworkbook.Worksheets("Sheet1").Range("A1:C4")
  2. Set shtSomeSheet = Thisworkbook.Worksheet("Sheet1")
  3. Set conSomeADOconnection = New ADODB.Connection