If Abfrage

jerry0110

Erfahrenes Mitglied
Hallo zusammen,

ich habe folgenden Code aus dem Internet rausgesucht und angepasst:

Code:
Private Sub Kopie_755ohneZuständigkeit()

Worksheets("Data").Activate

    Dim source As Worksheet
    Dim target As Worksheet
    Dim LastRowNrInTarget As Long
    Dim i
  
    Set source = ThisWorkbook.Worksheets("Data")
    Set target = ThisWorkbook.Worksheets("755ohneZuständigkeit")
    Call source.Rows(1).Copy(Destination:=target.Rows(1))
   
   LastRowNrInTarget = lastRowNr(target)
    For i = lastRowNr(source) To 1 Step -1
       
       If Cells(i, 8) = "" Then
        If Cells(i, 9) = "755 QS" Or Cells(i, 9) = "755 QS und 541" And Cells(i, 10) = "Ja" Then
           
           LastRowNrInTarget = LastRowNrInTarget + 1
            Call source.Rows(i).Copy(Destination:=target.Rows(LastRowNrInTarget))
        End If
    Next i
End Sub

Folgendes soll passieren. Wenn in Cells(i, 8) nichts steht, soll er weiter und weiter prüfen ob in 9 zwei unterschiedliche Dinge stehen. Und wenn dann in 10 noch ein Ja steht soll er die Zeile kopieren und in ein extra Datenblatt packen.

Macht er aber nicht. Er schreibt auch Dinge in das Tabellenblatt wo in Cells(i, 8) etwas steht.

Habe noch mehrere von diesen If Anweisungen wo andere Sachen gesucht werden. Aber die Suche ist da immer voll und das klappt auch. Aber mit dem Leer funktioniert nicht.
 

Yaslaw

n/a
Moderator
Bitte in Zukunft gleich in den Header des Threads schreiben, dass es um Excel geht.

Grundsätzlich sehe ich den Fehler gerade nicht.. Mach doch mal ein PrintScreen von der Source

Die folgenden Punkte sind mit aber noch aufgefallen

item: Die Zeile Worksheets("Data").Activate ist überflüssiger Mumpitz. Grad wenn man mit mehreren Worksheets abreitet sollte man nie dieses dämliche activate() und selected verwenden. Dafür solltest du dann bei den Cells() angeben, um welchens WS es sich handelt. source.Ceslls(i, 8)

item: Im 2ten If hast du das Schmea A OR b AND c. Das ist ungenau. Besser wäre (A OR b) AND c.

item: Sind die Zellennummern die richtigen? Also H, I und J?

item: Der ganze IF kann man eigentlich auch zusammenführen. Schematish mal so dargestellt
Visual Basic:
If H="" AND (I="755 QS" Or I="755 QS und 541") AND J="Ja" Then
 

jerry0110

Erfahrenes Mitglied
Hi,

Sorry wegen der Überschrift. Werde ich in der Zukunft so machen.

Das mit dem
Code:
 Worksheets("Data").Activate
mache ich nur, damit immer das Sheet "Data" auf gemacht wird.
Das Makro mache ich ja nicht für mich sondern für welche die noch nie mit Excel gearbeitet haben. Und wenn die nicht sehen, was passiert dann kommen sie schreiend zu mir. Die Zellennummern H, I und J sind korrekt.

Jetzt klappt es auch mit dem Leerzeichen
 

jerry0110

Erfahrenes Mitglied
Da es jetzt mit dem Leezeichen klappt war ich ganz wild und wollte eine If Abfrage machen wo mehrere Abfragen nach einander gemacht werden.
Ziel ist es, dass wenn 755 QS und 541 im Feld steht, soll in das Sheet Buchhaltung und in das zugehörige Team packen.

Macht er natürlich nicht. Es kommt jedoch auch kein Fehler.

Code:
Private Sub Kopie_Buchhaltung_oder_QS()
Worksheets("Data").Activate
    Dim source As Worksheet
    Dim LastRowNrInTarget1 As Long
    Dim LastRowNrInTarget2 As Long
    Dim LastRowNrInTarget3 As Long
    Dim LastRowNrInTarget4 As Long
    Dim LastRowNrInTarget5 As Long
    Dim i
    Dim target1 As Worksheet
    Dim target2 As Worksheet
    Dim target3 As Worksheet
    Dim target4 As Worksheet
    Dim target5 As Worksheet
    Set source = ThisWorkbook.Worksheets("Data")
    Set target1 = ThisWorkbook.Worksheets("Buchhaltung")
    Set target2 = ThisWorkbook.Worksheets("755QSTeam1")
    Set target3 = ThisWorkbook.Worksheets("755QSTeam2")
    Set target4 = ThisWorkbook.Worksheets("755QSTeam3")
    Set target5 = ThisWorkbook.Worksheets("755QSGenthin")
   
    Call source.Rows(1).Copy(Destination:=target1.Rows(1))
    Call source.Rows(1).Copy(Destination:=target2.Rows(1))
    Call source.Rows(1).Copy(Destination:=target3.Rows(1))
    Call source.Rows(1).Copy(Destination:=target4.Rows(1))
    Call source.Rows(1).Copy(Destination:=target5.Rows(1))

    LastRowNrInTarget1 = lastRowNr(target1)
    LastRowNrInTarget2 = lastRowNr(target2)
    LastRowNrInTarget3 = lastRowNr(target3)
    LastRowNrInTarget4 = lastRowNr(target4)
    LastRowNrInTarget5 = lastRowNr(target5)
  
    For i = lastRowNr(source) To 1 Step -1
      
    If Cells(i, 9) = "755 QS und 541" And Cells(i, 8) = "755QSTeam1" Then
          
            LastRowNrInTarget1 = LastRowNrInTarget1 + 1
            LastRowNrInTarget2 = LastRowNrInTarget2 + 1
            Call source.Rows(i).Copy(Destination:=target1.Rows(LastRowNrInTarget1))
            Call source.Rows(i).Copy(Destination:=target2.Rows(LastRowNrInTarget2))
           
    ElseIf Cells(i, 9) = "755 QS und 541" And Cells(i, 8) = "755QSTeam2" Then
           
            LastRowNrInTarget1 = LastRowNrInTarget1 + 1
            LastRowNrInTarget3 = LastRowNrInTarget3 + 1
            Call source.Rows(i).Copy(Destination:=target1.Rows(LastRowNrInTarget1))
            Call source.Rows(i).Copy(Destination:=target3.Rows(LastRowNrInTarget3))
   
   ElseIf Cells(i, 9) = "755 QS und 541" And Cells(i, 8) = "755QSTeam3" Then
           
            LastRowNrInTarget1 = LastRowNrInTarget1 + 1
            LastRowNrInTarget4 = LastRowNrInTarget4 + 1
            Call source.Rows(i).Copy(Destination:=target1.Rows(LastRowNrInTarget1))
            Call source.Rows(i).Copy(Destination:=target4.Rows(LastRowNrInTarget4))
           
   ElseIf Cells(i, 9) = "755 QS und 541" And Cells(i, 8) = "755QSGenthin" Then
           
            LastRowNrInTarget1 = LastRowNrInTarget1 + 1
            LastRowNrInTarget5 = LastRowNrInTarget5 + 1
            Call source.Rows(i).Copy(Destination:=target1.Rows(LastRowNrInTarget1))
            Call source.Rows(i).Copy(Destination:=target5.Rows(LastRowNrInTarget5))
    End If
    Next i
End Sub
 

Yaslaw

n/a
Moderator
Mach noch ein else am Schluss hin um zu prüfen, ob die Bedienung nicht erfüllt wurde. Am besten in Anführungszeichen ausgeben, um führende oder folgende Leerzeichen zu erkennen
Zudem verwende auch bei cells() dein Worksheetobject, damit ganz klar ist, welche Zelle gemeint ist
Code:
Else
    DebugPrint i, "'" & source.Cells(i, 9) & "'", "'" & source.Cells(i, 8) & "'"
End If
 

jerry0110

Erfahrenes Mitglied
Danke für deine Hilfe.
Ich möchte jetzt nicht sagen, wo dran es wirklich lag :(
Wenn man nach den falschen Sachen sucht, dann wird er auch nix finden. :(
 

Neue Beiträge