2015-09-09 81 views
1

我是VB新手腳本,所以請耐心等待!我正在嘗試創建一個使用兩個不同Excel工作簿的工作表的腳本。它打開第一張工作表並遍歷指定的範圍。然後,我希望它獲取該範圍內每個單元格的值,並搜索第二個工作表(在不同的工作簿中)並搜索第一個工作表中找到的值,如果找到該值,則返回細胞它是在發現,例如:VBScript從另一個工作簿查找Excel工作簿的價值

Worksheet1 
╔══════╦═════╗ 
║ Name ║ Age ║ 
╠══════╬═════╣ 
║ Matt ║ 22 ║ 
║ Jeff ║ 13 ║ 
╚══════╩═════╝ 

Worksheet2 
╔═══════╦════════════╗ 
║ Name ║ DOB  ║ 
╠═══════╬════════════╣ 
║ Dave ║ 09/12/2001 ║ 
║ Frank ║ 01/25/1992 ║ 
║ Jeff ║ 10/10/2013 ║ 
╚═══════╩════════════╝ 

所以該腳本將輸出:A4 因爲它發現從在第二工作表中的第一個工作表的指定範圍(A2:A3)的值中的一個,並返回該單元的位置。

這裏是我的代碼:

Set objExcel = CreateObject("Excel.Application") 
objExcel.Visible = True 

Dim val 

Set objWorkbook = objExcel.Workbooks.Open("C:\Users\username\file.xlsx") 
Set objWorksheet = objWorkbook.Worksheets("Sheet1") 

Set objWorkbook2 = objExcel.Workbooks.Open("C:\Users\username\file2.xlsx") 
Set objWorksheet2 = objWorkbook2.Worksheets("Sheet1") 


For Each c In objworksheet.Range("A2:A3").Cells 
    val = c.value 
    Set objRange = objWorksheet2.UsedRange 
    Set found = objRange.Find(val) 
    Wscript.Echo found.AddressLocal(False,False) 
Next 

當我運行這段代碼,我得到以下錯誤:

Error: Object required: 'found'

我相信有一些明顯我是缺少在這裏,但我一直在旋轉我的車輪相當長的一段時間,並希望有人可以提供一些反饋。任何幫助是極大的讚賞!

+0

感謝您進行格式編輯@Bond! – user3736073

回答

0

如果成功,Find()函數將返回一個Range對象,如果不成功則返回對象或Nothing。因此,在嘗試訪問其屬性和方法之前,需要測試返回值以確保它是一個Range對象。

For Each c In objworksheet.Range("A2:A3").Cells 
    val = c.value 
    Set objRange = objWorksheet2.UsedRange 
    Set found = objRange.Find(val) 

    ' Test for success! 
    If Not found Is Nothing Then 
     Wscript.Echo found.AddressLocal(False,False) 
    End If 
Next 
+0

啊,這很有道理!謝謝! 當我這樣做,它不會找到第二個Excel表中的值,即使當我硬編碼值查找時,它發現它沒有問題。有任何想法嗎? – user3736073

+0

我會在你的Find()語句中設置一個斷點,並確保val是你期望的。 Find()的默認參數將搜索部分匹配('LookAt:= xlPart' vs'xlWhole'),並且不考慮大小寫('MatchCase:= False'),所以默認情況下它是「開放的」 。 Worksheet2中的名稱直接輸入,對嗎?他們不是公式驅動的? – Bond

+0

謝謝 - 最終在Worksheet 1中有一個exra空白區域,這就是爲什麼它無法在工作表2中找到它。再次感謝您的幫助! – user3736073

相關問題