如何使用 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 方面的任何内容,只能选择一个 .
我正在尝试使用 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 方面的任何内容,只能选择一个 .