2016-05-04 6 views
1

Ich habe eine Datei, die zwei Arbeitsblätter hat. Ich muss ein Makro ausführen, das Spalte A auf Blatt 2 nachschlägt, bis es leer ist. Es muss nach dem Wert aus der Zelle in Blatt 2 Spalte A auf Blatt1 suchen. Wenn gefunden, ändern Sie den Wert der Spalte AP. Wenn nicht gefunden, springen Sie zur nächsten Suche nach dem nächsten Wert.Excel VB Macro, um den Wert von einem anderen Blatt zu finden, dann ändern Sie einen Zellenwert im aktuellen Blatt

Das ist was ich bisher habe. Ich konnte es beheben, wo ich keine Fehler mehr bekomme, aber auch keine Ergebnisse. Es zeigt und scheint zu laufen, aber es werden keine Änderungen an Zelle ("AP", "Zeilenwert gefunden") auf Blatt 1 vorgenommen.

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

Passen die Reihen zusammen? Außerdem ist es einfacher, 'Zellen' zu benutzen (für mich sowieso). – findwindow

+0

Ich habe den Code ausprobiert und es funktioniert. Obwohl Sie ein 'Exit Sub' vor dem' Err_Execute: 'brauchen, erhalten Sie keine Fehlermeldung, auch wenn alles gut ausgeführt wurde. Und Sie sollten die Variablendeklarationen definitiv von 'Integer' nach' Long' ändern. Ganzzahlen können nur Zahlen von bis zu 32767 enthalten. Eine schlechte Idee, diese zu verwenden, um über 1048576 Zeilen zu traversieren. Also, da alles funktioniert - was genau ist das Problem? – Leviathan

+0

Es ist am besten, ein Beispiel für die Eingabe, die erwartete Ausgabe und die Ergebnisse zu geben, die Sie nicht erhalten. Ich gehe davon aus, dass Sie eine verschachtelte Schleife benötigen - srch ist die äußere und myRow ist die innere. – OldUgly

Antwort

0

Ihr Code wird A1Sheet1-A1 in Sheet2 zu vergleichen. Ich denke, dass Sie A1 in Sheet1 zu allem von ColumnA in Sheet2 vergleichen möchten. Daher benötigen Sie eine äußere Schleife.

Der folgende Code wurde geändert, um dies zu erreichen. Es enthält auch Leviathans Kommentar, um Integer zu Long zu ändern, und den Exit Sub an der entsprechenden Stelle eingefügt.

Wenn Sheet2 wie folgt aussieht ...

enter image description here

ich dieses Ergebnis auf Sheet1 ...

enter image description here

Der Code ...

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 
Verwandte Themen