2013-03-27 41 views
1

我在下面的語法行中似乎有錯誤。我認爲問題在於工作簿book1的範圍參數。我無法弄清楚爲什麼。基本上,我打算跨2本工作簿進行瀏覽。vba跨作業簿的查找

代碼從工作簿 - book1中調用。就在這行代碼工作簿 - book2被激活之前。這兩本工作簿都是開放的。我通過用變量替換左側來捕獲錯誤代碼2015。

我感謝任何幫助,這個查找問題。謝謝。

Cells(j, c + 2).value = [VLookup(workbooks(book2).sheets(5).range(Cells(j, c + 1)), workbooks(book1).sheets(4).range(cells(row1+2,1),cells(row2,col1)), 3, false)] 
+0

是BOOK1和Book工作簿中的變量?如果是這樣,「範圍(...)」中的「單元格」也應該由2工作簿(book2)。表單(5)來限定「等。 – 2013-03-27 12:30:40

+0

確切的錯誤是什麼? – Sam 2013-03-27 12:45:15

+0

使用上面的片段代碼在單元格中顯示爲#VALUE !.當用變量變量(測試)替換單元格(j,c + 2.value)時,測試值爲錯誤2015. – user2000380 2013-03-28 06:42:51

回答

1

您只提供了一小段代碼,但首先要確保您已定義了所有變量。我還添加了一些以簡化並可能幫助捕獲錯誤。

Sub VlookMultipleWorkbooks() 
Dim lookFor as String 
Dim srchRange as Range 
Dim book1 as Workbook 
Dim book2 as Workbook 

'Set some Workbook variables: 
Set book1 = Workbooks("Book 1 Name") '<edit as needed 
Set book2 = Workbooks("Book 2 Name") '<edit as needed 

'Set a string variable that we will search for: 
lookFor = book2.sheets(5).range(Cells(j, c + 1)) 

'Define the range to be searched in Book1.Sheets(4): 
Set srchRange = book1.Sheets(4).Range(cells(row1+2,1).Address, cells(row2,col1).Address) 

'This assumes that the Book2 is Open and you are on the desired active worksheet: 
ActiveSheet.Cells(j, c + 2).value = _ 
     Application.WorksheetFunction.VLookup(lookFor, _ 
     book1.Sheets(4).Range(srchRange.Address), 3, False) 

End Sub 
+0

感謝你們,我測試了你的代碼,並進行了一些修改,我用字符串替換了聲明到範圍,並替換了Vlookup部分 - _「book1.Sheets(4).Range(srchRange .Address)「_ with srchRange。我已經將它們合併到我的代碼中,但是使用VBA vlookup的隱藏功能出現問題,請參閱我的代碼片段[Vlookup],它導致了問題。 。 – user2000380 2013-03-28 07:47:10

1

下面是一個簡單的例子。

Sub VlookMultipleWorkbooks() 

    Dim lookFor As Range 
    Dim srchRange As Range 

    Dim book1 As Workbook 
    Dim book2 As Workbook 

    Dim book2Name As String 
    book2Name = "test.xls" 'modify it as per your requirement 

    Dim book2NamePath As String 
    book2NamePath = ThisWorkbook.Path & "\" & book2Name 

    Set book1 = ThisWorkbook 

    If IsOpen(book2Name) = False Then Workbooks.Open (book2NamePath) 
    Set book2 = Workbooks(book2Name) 


    Set lookFor = book1.Sheets(1).Cells(2, 1) ' value to find 
    Set srchRange = book2.Sheets(1).Range("B:C") 'source 

    lookFor.Offset(0, 1).Value = Application.VLookup(lookFor, srchRange, 2, False) 

End Sub 

Function IsOpen(strWkbNm As String) As Boolean 

    On Error Resume Next 

    Dim wBook As Workbook 
    Set wBook = Workbooks(strWkbNm) 

    If wBook Is Nothing Then 'Not open 
     IsOpen = False 
     Set wBook = Nothing 
     On Error GoTo 0 
    Else 
     IsOpen = True 
     Set wBook = Nothing 
     On Error GoTo 0 
    End If 

End Function 

enter image description here

+0

謝謝你的優秀t演示,我已經成功地將您的代碼的某些功能實現到了我的。當我使用很多變量時,使用line - _「Set srchRange = book2.Sheets(1).Range(」B:C「)」_將不會有用。大衛的做法有所幫助。使用隱藏的Vlookup功能時,我也遇到了問題,請參閱我的代碼 - 導致出現_#NAME?_錯誤。我感謝所有提供的幫助。 – user2000380 2013-03-28 07:50:56