HERBERS Excel-Forum - das Archiv
SpecialCells(xlCellTypeBlanks).Count
Franz

Hallo liebe Profis!
Obwohl im "Catalog" der Zusatz ".Count" gelistet wird bekomme ich eine Fehlermeldung.
Was ist hier faul?

Sub Leere_Felder_zaehlen_und_markieren()
loBlanksCount = Range("Datenbereich").SpecialCells(xlCellTypeBlanks).Count
MsgBox (loBlanksCount) '<----- das müsste hich erfahren
If loBlanksCount > 0 Then
Range("Datenbereich").Interior.ColorIndex = xlNone
Range("Datenbereich").SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3
End If
End Sub

Ich hoffe hier könntet mir wieder helfen.
Grüße
Franz D.

AW: SpecialCells(xlCellTypeBlanks).Count
Daniel

Hi
specialcells bricht immer mit einem Fehler ab, wenn die Methode keine Zellen finden kann, da hilft dann das Count dahinter auch nichts.
die einfachste Lösung ist in diesem Fall, die Specicalcells-Methode in ON ERROR zu kapseln:
Sub Leere_Felder_zaehlen_und_markieren()
On Error Resume Next
loBlanksCount = Range("Datenbereich").SpecialCells(xlCellTypeBlanks).Count
On Error Goto 0
MsgBox (loBlanksCount) '<----- das müsste hich erfahren
If loBlanksCount > 0 Then
Range("Datenbereich").Interior.ColorIndex = xlNone
Range("Datenbereich").SpecialCells(xlCellTypeBlanks).Interior.ColorIndex = 3
End If
End Sub
desweiteren solltest du dir angewöhnen, mit Option Explicit zu arbeiten und deine Variablen sauber zu deklarieren.
Gruß, Daniel
AW: SpecialCells(xlCellTypeBlanks).Count
Franz

Hallo Daniel,
Einmal wieder: HERZLICHEN DANK! Ich wollte das On error... vermeiden. Ich vertraue deinem Experten-Wissen dass es anders nicht geht. Übrigens, ich verwende grundsätzlich "Option explicit", habe den geposteten Code zu stark "abgespeckt.
Gute Nacht und vielleicht bis bald wieder.
Franz D.
Lösung ohne "On Error"
NoNet

Hallo Franz,
das kann man auch ohne "On Error..." lösen, wenn man einfach zuvor prüft, ob es überhaupt Leerzellen im Bereich gibt :
    If Application.CountBlank(Range("Datenbereich")) = 0 Then
MsgBox "Im Bereich 'Datenbereich' sind keine leere Zellen vorhanden !"
loBlanksCount = 0
Else
loBlanksCount = Range("Datenbereich").SpecialCells(xlCellTypeBlanks).Count
MsgBox loBlanksCount
End If

Wenn Du generell nur die ANZAHL der Leerzellen benötigst und mit diesen nichts weiter vorhast, dann genügt sogar das ZÄHLEN, dann benötigst Du die SpecialCells-Variante gar nicht :
        loBlanksCount = Application.CountBlank(Range("Datenbereich"))
MsgBox loBlanksCount

Gruß, NoNet
AW: Lösung ohne "On Error"
Franz

Hallo NoNet,
Das "No" passt zu dir nicht, aber lassen wir die Wortspielereien. Super Trick! Kannst du mir noch verraten wie ich aus 4 gefundenen die Nummer 1 "selektiere" oder "activate", dh. wie springe ich auf die entsprechende Zelle ?
Grüße
Franz D.
Erste Leerzelle eines Bereiches aktivieren
NoNet

Hallo Franz,
Danke für die "Blumen" ;-) Mein Nick bezieht sich jedoch nicht auf "nett" (hieße ansonsten wohl NoNice ;-).
Die erste Leerzelle eines Bereiches kannst Du folgendermaßen aktivieren :
Range("Datenbereich").SpecialCells(xlCellTypeBlanks)(1).Activate
Das funktioniert allerdings wirklich nur mit der ersten Zelle des Bereiches so, ansonsten muss man über eine Schleife gehen. Für die 3.Leerzelle z.B. :
    If Application.CountBlank(Range("Datenbereich")) >= 3 Then
For Each rngzelle In Range("Datenbereich").SpecialCells(xlCellTypeBlanks)
lngz = lngz + 1
If lngz = 3 Then
rngzelle.Activate
Exit For
End If
Next
End If
Gruß, NoNet
AW: Erste Leerzelle eines Bereiches aktivieren
Franz

Hallo,
Super! Werde es Morgen "einbauen". Hab' viel gelernt Heute (ich meine Gestern).
Gute Nacht ihr Nachtschwärmer!
Franz D.
AW: Lösung ohne "On Error"
Luschi

Hallo NoNet,
Deine Lösung versagt leider, wenn im gesamten 'Datenbereich' Formeln derart stehen:
=WENN(B3>0;"";1)
- CountBlank() erkennt dann leere Zellen
- SpecialCells(xlCellTypeBlanks) dagegen nicht und es kommt zur Fehler-Nr. 400
Gruß von Luschi
aus klein-Paris