Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

SpecialCells(xlCellTypeBlanks).Count | Herbers Excel-Forum


Betrifft: SpecialCells(xlCellTypeBlanks).Count von: Franz D.
Geschrieben am: 18.11.2009 22:43:01

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.

  

Betrifft: AW: SpecialCells(xlCellTypeBlanks).Count von: Daniel
Geschrieben am: 18.11.2009 23:12:21

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


  

Betrifft: AW: SpecialCells(xlCellTypeBlanks).Count von: Franz D.
Geschrieben am: 18.11.2009 23:27:20

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.


  

Betrifft: Lösung ohne "On Error" von: NoNet
Geschrieben am: 18.11.2009 23:37:17

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


  

Betrifft: AW: Lösung ohne "On Error" von: Franz D.
Geschrieben am: 18.11.2009 23:59:06

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.


  

Betrifft: Erste Leerzelle eines Bereiches aktivieren von: NoNet
Geschrieben am: 19.11.2009 00:16:14

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


  

Betrifft: AW: Erste Leerzelle eines Bereiches aktivieren von: Franz D.
Geschrieben am: 19.11.2009 00:40:26

Hallo,
Super! Werde es Morgen "einbauen". Hab' viel gelernt Heute (ich meine Gestern).
Gute Nacht ihr Nachtschwärmer!
Franz D.


  

Betrifft: AW: Lösung ohne "On Error" von: Luschi
Geschrieben am: 19.11.2009 10:20:10

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