如何使用 vba 从 word 引用 excel 文件中的两个不同工作表?

How can I reference two different sheets in an excel file from word using vba?

我正在尝试使用 Vlookup 函数从 Excel 文件到使用 VBA 的 Word 文件中获取一些信息。我在 excel.

中有两张不同的表格

这是我的代码:

Private Sub CommandButton1_Click()
           
    Dim objExcel As New Excel.Application
    Dim WB As Excel.Workbook
    Dim SH1 As Excel.Worksheet
    Dim SH2 As Excel.Worksheet
    
    Set WB = objExcel.Workbooks.Open("C:\Users\WB.xlsx")
    WB.Worksheets(Array("Sheet1", "Sheet2")).Select
    
    Set SH1 = WB.Worksheets("Sheet1")
    Set SH2 = WB.Worksheets("Sheet2")
       
    Dim LookupValue1 As Variant
    Dim FirstColumn1 As Long
    Dim LastColumn1 As Long
    Dim ColumnIndex1 As Long
    Dim FirstRow1 As Long
    Dim LastRow1 As Long
    Dim Result1 As Variant
    Dim Array1 As Variant
          
    LookupValue1 = Me.ComboBox1
    FirstColumn1 = 1
    LastColumn1 = 2
    ColumnIndex1 = 2
    FirstRow1 = 1
    LastRow1 = WB.Application.Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row
           
    Set Array1 = Range(Cells(FirstRow1, FirstColumn1), Cells(LastRow1, LastColumn1))
        
    Result1 = SH1.Application.WorksheetFunction.VLookup(LookupValue1, Array1, ColumnIndex1, False)
            
    ThisDocument.TextBox2 = Result1
         
    Dim LookupValue2 As Variant
    Dim FirstColumn2 As Long
    Dim LastColumn2 As Long
    Dim ColumnIndex2 As Long
    Dim FirstRow2 As Long
    Dim LastRow2 As Long
    Dim Result2 As Variant
    Dim Array2 As Variant
    
    LookupValue2 = Me.ComboBox2
    FirstColumn2 = 1
    LastColumn2 = 4
    ColumnIndex2 = 2
    FirstRow2 = 1
    LastRow2 = WB.Application.Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row

    Set Array2 = Range(Cells(FirstRow2, FirstColumn2), Cells(LastRow2, LastColumn2))
        
    Result2 = SH2.Application.WorksheetFunction.VLookup(LookupValue2, Array2, ColumnIndex2, False)
                
    ThisDocument.TextBox10 = Result2
     
    WB.Close
    Set WB = Nothing
End Sub

当我 运行 两个查找函数单独工作时,但是当我 运行 整个代码时,我收到消息“运行-time error '1004': Unable to get WorksheetFunction class 的 VLookup 属性" 用于第一个或第二个函数。

Result1 = SH1.Application.WorksheetFunction.VLookup(LookupValue1, Array1, ColumnIndex1, False)

Result2 = SH2.Application.WorksheetFunction.VLookup(LookupValue2, Array2, ColumnIndex2, False)

我猜测问题可能出在 excel 中的活动工作表上,但我定义了查找信息的位置。有什么想法吗,请问如何解决?

Application.Worksheetfunction.VLookup 在找不到匹配项时抛出此错误,无论第 4 个参数是 True 还是 False 所以我认为你必须写一个 On Error ...陷阱。

您可以通过 Debug.Print 等进行一些测试来测试

所以我会推荐类似

的东西
  Result1 = CVErr(xlErrNA)



  On Error Resume Next
  Result1 = SH1.Application.WorksheetFunction.VLookup( _
  LookupValue1, Array1, ColumnIndex1, False)
  On Error GoTo 0

请尝试下一个简化代码:

Sub openExcelDirect()
 Dim objExcel As New Excel.Application
    Dim WB As Excel.Workbook, SH1 As Excel.Worksheet, SH2 As Excel.Worksheet
    Dim LastRow1 As Long, LastRow2 As Long, Array1 As Excel.Range, Array2 As Excel.Range
    Dim Result1, Result2, LookupValue1, LookupValue2
    
    Set WB = objExcel.Workbooks.Open("C:\Users\WB.xlsx")
    objExcel.Visible = True 'this allows you to see the newly created session window
                            'you may comment this line when everything runs smooth
    Set SH1 = WB.Worksheets("Sheet1")
    Set SH2 = WB.Worksheets("Sheet2")
    
    LastRow1 = SH1.Range("A" & SH1.Rows.Count).End(xlUp).Row
    LastRow2 = SH2.Range("A" & SH2.Rows.Count).End(xlUp).Row
    Set Array1 = SH1.Range(SH1.Cells(1, 1), SH1.Cells(LastRow1, 2)) 'well qualified range
    Set Array2 = SH2.Range(SH2.Cells(1, 1), SH2.Cells(LastRow1, 4)) 'well qualified range
    
    LookupValue1 = Me.ComboBox1
    LookupValue2 = Me.ComboBox2
    
    Result1 = SH1.Application.WorksheetFunction.VLookup(LookupValue1, Array1, 2, False)
    Result2 = SH2.Application.WorksheetFunction.VLookup(LookupValue2, Array2, 2, False)
    'Debug.Print Result1, Result2
    ThisDocument.TextBox2 = Result1
    ThisDocument.TextBox10 = Result2
     
    WB.Close
End Sub

您的主要代码问题是没有完全限定范围...

当您尝试同时选择两个 sheet 时,这并没有改变活动 sheet 方面的任何内容,只能选择一个 .