2016-05-04 40 views
1

我有一個文件有兩個工作表。我需要運行一個宏,它在sheet2上的A列下方,直到它爲空。它需要查找Sheet1中sheet2列A中單元格的值。如果找到,則更改列AP的值。如果未找到,則跳至下一個值的下一個搜索。Excel的VB宏從另一張表中查找值,然後更改當前表中的單元格值

這是我到目前爲止。我已經能夠解決它,我不再有錯誤,但它也沒有結果。它顯示並似乎正在運行,但沒有對sheet1上的單元格(「AP」,「找到行值」)進行更改。

Sub dataChange() 
    Dim myRow As Integer 
    Dim srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    While Sheet2.Cells(myRow, 1).Value <> "" 
     If Sheet1.Range("A" & CStr(srch)).Value = Sheet2.Cells(myRow, 1).Value Then 
      Sheet1.Range("AP" & CStr(srch)).Value = "HOUSTON" 
     End If 
     srch = srch + 1 
     myRow = myRow + 1 
    Wend 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
+0

行匹配嗎?另外,使用'cells'更容易(對我來說)。 – findwindow

+0

我試過了代碼,它的工作原理。雖然你需要在Err_Execute之前有一個Exit Sub,所以即使一切正常,你也不會收到錯誤信息。而且你應該把變量聲明從'Integer'改爲'Long'。整數只能包含32767的數字。使用它們遍歷1048576行的想法很糟糕。所以,因爲一切正常 - 問題究竟是什麼? – Leviathan

+0

最好提供一個輸入樣本,預期輸出,以及沒有得到的結果。我想猜你需要一個嵌套循環 - srch是外部的,myRow是內部的。 – OldUgly

回答

0

你的代碼是從Sheet1Sheet2比較A1A1。我想你想比較Sheet1中的A1Sheet2中的所有ColumnA。因此,你需要一個外部循環。

以下是您的代碼,修改後即可完成此操作。它還包含Leviathan的評論,將Integer的更改爲Long,並將Exit Sub插入到適當的位置。

在Sheet2中看起來像這樣...

enter image description here

我得到這樣的結果在Sheet1 ...

enter image description here

代碼...

Sub dataChange() 
    Dim myRow As Long, srch As Integer 
    On Error GoTo Err_Execute 
    myRow = 1 
    srch = 1 
    Do While Sheet1.Cells(srch, 1).VALUE <> "" 
     Do While Sheet2.Cells(myRow, 1).VALUE <> "" 
      If Sheet1.Cells(srch, 1).VALUE = Sheet2.Cells(myRow, 1).VALUE Then 
       Sheet1.Range("AP" & srch).VALUE = "HOUSTON" 
       Exit Do 
      End If 
      myRow = myRow + 1 
     Loop 
     myRow = 1 
     srch = srch + 1 
    Loop 
    Exit Sub 
Err_Execute: 
    MsgBox "An error occurred." 
End Sub 
相關問題