Microsoft Excel

Herbers Excel/VBA-Archiv

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

Spalte filtern wenn....

Betrifft: Spalte filtern wenn.... von: Jan B.
Geschrieben am: 06.11.2014 08:46:20

Schönen guten Morgen,

ich habe ein kleines Problem und tue mich ziemlich schwer damit. Ich bekomme ausgefüllte Templates von Lieferanten, die ich mit einem Makro in richtige Form bringen muss. Wie kann ich eine Spalte so auswerten, dass wenn alle Zellen gefüllt sind das Makro weiter läuft und falls nicht die leeren Zellen gefiltert werden und das Makro mit einer MsgBox die Fehlermeldung ausgibt.

1. Makro soll Spalte überprüfen bis zur letzten Zeile ob leere Zellen dazwischen sind
2. Falls nein dann weiter
3. Falls ja dann filtern, leere Zeilen ausgeben und MsgBox mit z.B. "Leerzeichen nicht erlaubt"

Ich habe einige Versuche hinter mir und entweder bekomme ich die Leerzeichen nicht ausgegeben oder ich bekomme zu den Leerzeichen zusätzlich auch all die gefiltert, die sich unter der letzten gefüllten Zeile befinden.

Vielen Dank im Voraus!
Grüße
Jan B.

  

Betrifft: AW: Spalte filtern wenn.... von: Beverly
Geschrieben am: 06.11.2014 10:34:14

Hi Jan,

vom Prinzip her vielleicht so:

Sub LeereFeststellen()
    If ActiveSheet.AutoFilterMode = False Then Columns("C:C").AutoFilter
    ActiveSheet.Range("C1:C13").AutoFilter Field:=1, Criteria1:="="
    If Range("C1:C13").SpecialCells(xlCellTypeVisible).Count > 1 Then
        MsgBox "Leerzeichen nicht erlaubt"
    Else
        MsgBox "Alles i.O."
    End If
    ActiveSheet.ShowAllData
End Sub
In C1 steht eine Überschrift, die nicht mit gefiltert wird. Bereich musst du selbstverständlich anpassen.


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Spalte filtern wenn.... von: Jan B.
Geschrieben am: 06.11.2014 10:55:50

Hi Beverly,
vielen Dank für deine Antwort.
Leider ist das gerade mein Problem. Der Bereich ist jedes Mal anders also sollte das Makro zuerst den Bereich bestimmen und anschließend überprüfen, ob wie in deinem Beispiel in Spalte C sich Leerzeichen befinden und sie ggf. dann filtern.

Gruß
Jan


  

Betrifft: AW: Spalte filtern wenn.... von: Beverly
Geschrieben am: 06.11.2014 11:32:08

Hi Jan,

und wodurch bestimmt sich dein Bereich? Ist es immer eine andere Spalte oder kann nur die Zeilenanzahl in der betreffenden Spalte unterschiedlich sein?
Ohne deine mappe zu kennen ist das leider nur ein "Stochern im Nebel".


GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Spalte filtern wenn.... von: Jan B.
Geschrieben am: 06.11.2014 12:02:20

Hallo Beverly,

habe jetzt endlich die Lösung gefunden

...
Range(cells(2, 14), cells(ZeileMax - 1, 14).End(xlToLeft)).Select
For Each Zelle In Selection
If IsEmpty(Zelle) = True Then
With Range("N1").CurrentRegion
.AutoFilter field:=14, Criteria1:="="
End With
MsgBox "Leerzeichen nicht erlaubt"
Exit Sub
Else
...

Ich habe hier einen Fehler bei der Bestimmung der Range gehabt, mein Makro hat die komplette Tabelle durchgesucht und anschließend Spalte N nach leer gefiltert.

Ich danke dir vielmals für deine Hilfe.

Gruß
Jan


  

Betrifft: AW: Spalte filtern wenn.... von: Beverly
Geschrieben am: 06.11.2014 12:16:32

Hi Jan,

man muss nicht selektieren - das sollte es ebenso tun, auch wenn ich nicht verstehe, wozu das gut sein soll, dass alle Zellen durchlaufen werden um eine Filter zu setzen:

For Each Zelle In Range(cells(2, 14), cells(ZeileMax - 1, 14).End(xlToLeft))

GrußformelBeverly's Excel - Inn


  

Betrifft: AW: Spalte filtern wenn.... von: Jan B.
Geschrieben am: 06.11.2014 12:38:57

Hi Beverly,

vielen Dank für den Hinweis.
Der Filter soll nur gesetzt werden, wenn sich in Spalte 14 leere Zellen befinden. Es ist wichtig, dass das Makro an der Stelle angehalten wird und die Zeilen, die in der Spalte leere Zellen beinhalten zweck Nacharbeit eingeblendet werden - sonst soll das Makro weiter laufen.

Gruß
Jan


  

Betrifft: AW: Spalte filtern wenn.... von: Beverly
Geschrieben am: 06.11.2014 17:08:40

Hi Jan,

das sollte auch ohne Scheife gehen:

Sub LeereFeststellen()
    Dim lngLetzte As Long
    ' letzte belegte zeile in Spalte N
    lngLetzte = IIf(IsEmpty(Cells(Rows.Count, 14)), _
        Cells(Rows.Count, 14).End(xlUp).Row, Rows.Count)
    ' Anzahl an gefüllten Zellen ist kleiner als letzte belegte Zeile
    If Application.CountA(Columns(14)) < lngLetzte Then
        If ActiveSheet.AutoFilterMode = False Then Columns("N:N").AutoFilter
        Range(Cells(1, 14), Cells(lngLetzte, 14)).AutoFilter Field:=1, Criteria1:="="
        If Range(Cells(1, 14), Cells(lngLetzte, 14)).SpecialCells(xlCellTypeVisible).Count > 1  _
Then
            MsgBox "Leerzeichen nicht erlaubt"
        Else
            MsgBox "Alles i.O."
        End If
        ActiveSheet.ShowAllData
    End If
End Sub

GrußformelBeverly's Excel - Inn


 

Beiträge aus den Excel-Beispielen zum Thema "Spalte filtern wenn...."