Erst einmal den "Schleifen - Fehler" ausgebügelt schaut der Code wohl so aus
Sub Artikelzuordnung()
'Artikel aus Tabellenblatt Materialinformation zu dem jeweiligen Complaint zuordnen.
'leere Artikelnummernfelder mit n/a füllen
Dim s As Integer
Dim i As Integer
ThisWorkbook.Worksheets("query_export_results").Activate
i = 2
Do While Cells(i, 1) <> " "
s = 2
Do While Cells(s, 1) <> " "
If Cells(i, 1).Value = Worksheets("Material Information").Cells(s, 1) Then
If Worksheets("Material Information").Cells(s, 3).Value = "Yes" Then
Worksheets("Material Information").Cells(s, 10).Copy Destination:=Worksheets _
("query_export_results").Cells(i, 3) 'Gerätetyp in Complaintübersicht in Spalte C (Machine Type) kopieren
Else
Worksheets("Material Information").Cells(s, 5).Copy Destination:=Worksheets _
("query_export_results").Cells(i, 4) 'Artikelnummer in Complaintübersicht in Spalte D kopieren
Worksheets("Material Information").Cells(s, 6).Copy Destination:=Worksheets _
("query_export_results").Cells(i, 5) 'Artikelbezeichnung in Complaintübersicht in Spalte E Kopieren.
End If
End If
s = s + 1
Loop
i = i + 1
Loop
End Sub
Damit greift der Vergleich aber max. 1 x und dann knallt deine Variable s an das Ende seiner Fahnenstange - Loop bis max. Integer Zahl *)
*) arbeite ich mit Variablen die Zellzeilen ansprechen, dann wähle ich den "natürlichen" Datentyp LONG
Was in deinem Fall aber nur das sinnlose Hochzählen verlängert, denn
ThisWorkbook.Worksheets("query_export_results").Activate
Du operierst also aus einem aktiven Arbeitsblatt und vergleichst eine Zelle daraus mit einer Zelle aus einem anderen Arbeitsblatt - OHNE
der zweiten Zelle einen Bezug zum anderen mitzugeben
Do While Cells(i, 1) <> " "
s = 2
Do While Cells(s, 1) <> " "
Ergo werden hier nicht zwei Zellen miteinander verglichen, da VBA ohne fehlenden Bezug immer die Zelle aus dem aktiven Arbeitsblatt versteht
Zelle ist nicht leer und Zellinhalt = Zellinhalt, die Schleife wird nie unterbrochen
|