2016-05-04 4 views
0

Ich habe ein Excel-Makro geschrieben, das Namen zwischen zwei Blättern abgleicht und sie in einem Listenfeld anzeigt. Es hat kein Problem, nur Namen zu finden, aber sobald ich versuche, andere Daten von einem der Blätter aufzunehmen, scheint es keine Schleife mehr zu geben.Multicolumn List Box zeigt nicht die Daten, ich will es?

Hier ist mein Code:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion) 
matching_artist = matchedartistcell.Value 
For i = 1 To maxmaster 
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then 
     ListBox1.AddItem (Worksheets("Master").Cells(i, 2)) 
     ListBox1.List(0, 1) = Worksheets("Master").Cells(i, 4) 
     ListBox1.List(0, 2) = Worksheets("Master").Cells(i, 5) 
     ListBox1.List(0, 3) = Worksheets("Master").Cells(i, 6) 
     End If 
Next i 

Also im Grunde die erste Spalte zeigt eine Liste von Namen ... Aber die zweite, dritte und vierte Datenspalte zeigen, für das letzte Spiel in der gleichen Zeile wie die erste match (wenn das Sinn macht?)

Ich fühle mich wie es ist nicht in der Art und Weise Schleifen wie ich es gerne, aber ich kann nicht für das Leben von mir herauszufinden, warum ... Jede Hilfe würde sehr geschätzt werden! !

Danke!

EDIT für Klarheit:

ich ein paar Bilder bin auch besser, das Problem zu beschreiben, eine Test-Arbeitsmappe mit

Dies ist ein Beispiel des Künstlers auf dem Arbeitsblatt ‚Master‘ enter image description here

Und dies ist ein Beispiel für das Arbeitsblatt ich auf das Makro renne (‚Los‘) enter image description here

Wenn ich das Makro für die artw laufe ork von Hannah Smith, erwarte ich, dass die List Box so etwas wie

Mark Smith 1940 Briten 1999
Adam Smith Australian 1901 1980
Hannah Smith Canadian 1982

jedoch sehen, ist es diese gibt enter image description here

Mark Smith bekommt die Nationalität und Daten von Hannah Smith, und weder Adam Smith noch Hannah Smith haben zusätzliche Informationen.

+0

Was Sie dieses „Gefühl“ gibt, dass es funktioniert tun Sie nicht, wie Sie es erwarten? Haben Sie versucht, den Code zu debuggen? Vielleicht, wenn Sie ein paar Break-Punkte und überprüfen Sie die Werte der Variablen? Sie könnten auch ein paar Meldungsfelder oder ein "Debug.Print i &" : Vergleiche "& Trimmen (Arbeitsblätter (" Master "). Zellen (i, 1)) &" zu "& Trimmen (passender_Künstler) und überprüfe die Ausgabe, um sicherzustellen, dass die Dinge so laufen, wie du es erwartest/willst – Ralph

+0

Hiya! Ich habe meine Post bearbeitet, um mehr über das Problem zu erklären, und warum ich dieses Gefühl habe. Das Problem ist t Der Code läuft gut, daher wird mir nicht gezeigt, wo das Problem liegt. Ich werde versuchen, was Sie jetzt gesagt haben, vielen Dank für den Vorschlag! – MBot93

Antwort

0

Das Problem ist, dass Sie immer die erste Zeile Ihrer ListBox aktualisieren (in Ihrem Code). Während i von 1 bis zur letzten Zeile in diesem Blatt geht, aktualisieren Sie immer ListBox1.List(0, someColumn). . So sind Sie immer aktualisieren Zeile 0 (das ist die erste Zeile in der List-Box ist

einen Versuch geben diese und lassen Sie mich wissen, ob es funktioniert:

Set matchedartistcell = Worksheets("Lots").Cells(curcell.Row, columnofregion) 
matching_artist = matchedartistcell.Value2 
For i = 1 To maxmaster 
    If Trim(Worksheets("Master").Cells(i, 1)) = Trim(matching_artist) Then 
     ListBox1.AddItem (Worksheets("Master").Cells(i, 2)) 
     ListBox1.List(ListBox1.ListCount - 1, 1) = Worksheets("Master").Cells(i, 4) 
     ListBox1.List(ListBox1.ListCount - 1, 2) = Worksheets("Master").Cells(i, 5) 
     ListBox1.List(ListBox1.ListCount - 1, 3) = Worksheets("Master").Cells(i, 6) 
    End If 
Next i 
+0

Oh ich sehe, das macht Sinn ... Ich habe es reingesteckt und es funktioniert perfekt! Du bist so ein Star, vielen Dank! – MBot93

Verwandte Themen