2017-07-03 4 views
1

Ich bin sehr neu in VBA und habe mich für die letzte Woche unterrichtet. Ich habe eine Aufgabe übernommen, die für mich vielleicht etwas zu komplex ist.Excel VBA Typ Mismatch mit Wenn Funktion

Ich habe ein Dokument mit Spalten A - AE Ich muss durch dieses Dokument gehen und Informationen auf separaten Blättern verschieben, je nachdem, was es ist. Ich versuche jetzt, eine IF-Anweisung zu verwenden, die zwei Anforderungen entsprechen muss, bevor die Informationen verschoben werden. Ich kann jede einzelne Anforderung zum Arbeiten bringen, aber nicht beides zusammen, da immer ein Typ-Mismatch-Fehler auftritt.

Ich habe keine Ahnung, was ich falsch mache. Jede Hilfe wird sehr geschätzt.

Sub copyrows() 

    Dim Test As Range, Cell As Object 

    Set Test = Range("G2:Z4000") 'Substitute with the range which includes your True/False values 

    For Each Cell In Test 

     If IsEmpty(Cell) Then 
      Exit Sub 
     End If 

     If Cell.Value = "Refund" And "Commission" Then 
      Cell.EntireRow.Copy 
      Sheet3.Select 'Substitute with your sheet 
      ActiveSheet.Range("A65536").End(xlUp).Select 
      Selection.Offset(1, 0).Select 
      ActiveSheet.Paste 
     End If 

    Next 

End Sub 
+0

Warum ist 'Cell' ein' Objekt'? Ich würde es stattdessen zu einer 'Range' machen, weil du es so verwendest. Während 'Object' * funktionieren kann, ist' Range' besser, glaube ich. – BruceWayne

Antwort

3

If Cell.Value = "Refund" And "Commission" Then

Soll heißen statt:

If Cell.Value = "Refund" Or Cell.Value = "Commission" Then

Sie haben mit jedem Zustand wie AND oder OR von Booleschen Operatoren getrennt explizit sein.

2

Der Grund für die Fehler in der Antwort oben durch @IanL

jedoch bereits erwähnt, ist Ihr Code aus ist bei weitem nicht optimiert.

Cell.EntireRow.Copy 
Sheet3.Select 'Substitute with your sheet 
ActiveSheet.Range("A65536").End(xlUp).Select 
Selection.Offset(1, 0).Select 
ActiveSheet.Paste 

mit 1:

Sie können Ihre 5 Zeilen ersetzen

Cell.EntireRow.Copy Destination:=Sheet3.Range("A65536").End(xlUp).Offset(1) 

Was nicht Select verwendet, ist, ActiveSheet oder Selection, nur voll qualifizierte Range Objekt.