2016-04-24 12 views
0

Ich versuche COUNTIF in VBA zu tun und ich bekomme für einige Resom Fehler '438' und ich weiß nicht warum.VBA - Countif Fehler '438'

Option Explicit 

Sub tools() 
' 

With Worksheets("Plans") 
    .Range("a:ar").AutoFilter Field:=2, Criteria1:="=Cv", Operator:=xlOr, Criteria2:="=Se" 
    .rows("6:6").Select 
    .Range(Selection, Selection.End(xlDown)).Select 
    .Selection.Delete Shift:=xlUp 
    .ShowAllData 
    .Range("A2:A" & .Cells(rows.Count, "e").End(xlUp).Row).FormulaR1C11 = "=COUNTIF(c[5],RC[5])" 
    .Range("A2:a" & .Cells(rows.Count, "e").End(xlUp).Row) = Range("A2:a" & .Cells(rows.Count, "e").End(xlUp).Row).Value2 
End With 

End Sub 

Antwort

2

gab es zwei Fehler, jeder Wurf '38' Fehler:

.Selection.Delete Shift:=xlUp 

seit Selection ist keine gültige Eigenschaft des Objekts Arbeitsblatt

.FormulaR1C11 

nur ein Tippfehler, da es sein sollte be

FormulaR1C1 

Abgesehen davon gibt es einige gute Codierung Gewohnheiten wie folgt:

  • vermeiden Verwendung von Select und Selection

    Satz und direkten Bezug auf Objekte (Bereiche) statt

  • Vermeidung von Wiederholungen von verwenden gleich lange Referenzen mit With Stichwort

    Dies wird Tippfehler

  • vermeiden
  • vermeiden, ganze Spalten oder Zeilen

    und Grenzbereiche beziehen tatsächlich Zellen verwendet, um

    diese insbesondere bei der Verwendung von Tabellenfunktionen wie COUNTIF

so hier ist der Code für die Fehler korrigiert auch für oben erwähnte gute Codiergewohnheiten

Option Explicit 

Sub tools() 

With Worksheets("Plans") 
    .Range("a:ar").AutoFilter Field:=2, Criteria1:="=Cv", Operator:=xlOr, Criteria2:="=Se" 

    With .rows("6:6") 
     Range(.Cells, .End(xlDown)).Delete Shift:=xlUp 
    End With 

    .ShowAllData 

    With .Range("A2:A" & .Cells(rows.Count, "e").End(xlUp).Row) 
     .FormulaR1C1 = "=COUNTIF(R1C[5]:R" & .rows(.rows.Count).Row & "C[5],RC[5])" 
     .Value = .Value2 
    End With 
End With 

End Sub 
+0

Funktioniert gut, großer Dank. –

+0

Sie sind willkommen – user3598756