Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1408to1412
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Autofilter über Makro funktioniert nicht

Autofilter über Makro funktioniert nicht
20.02.2015 11:02:59
Thomas
Hallo zusammen,
ich bin auf der Suche nach Hilfe bei einem Problem an dieses Forum verwiesen worden, da meinem Tipgeber hier schon häufig geholfen wurde.
Ich habe eine Datei in der über 1000 Vorgänge zu finden sind. Diese sollen über einen Autofilter nach Debitor/Kundennummer gefiltert und dann gedruckt werden.
In meinem Makro habe ich vorerst die Ausgabe in Druckvorschau eingestellt um Papier zu sparen.
Das Makro hat auch super funktioniert, bis wie den Text in den ersten 15 Zeilen eingefügt haben. Seitdem kriege ich das Ding nicht mehr an laufen.
https://www.herber.de/bbs/user/95894.xlsm
(Habe die Anzahl der Datensätze in der Datei abgespeckt auf 11)
Wer kann mir sagen wo hier der Fehler liegt?
Über eine Antwort wäre ich wirklich sehr sehr dankbar!
Beste Grüße
Thomas

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter über Makro funktioniert nicht
20.02.2015 11:32:01
Michael
Hallo Thomas!
Habe nur schnell über den Code gesehen. Wenn Ihr die ersten 15 Zeilen wirklich neu hinzugefügt habt, könnte es daran liegen, dass der Code sich in der Zeile
For lngRow = 2 To LoLetzte
auf Zeile 2 als erste Zeile bezieht, die jetzt aber nicht mehr Teil der Datentabelle ist. Hier könnte evtl. ein Start ab 16 helfen...
Ist jetzt aber nur sehr überblicksmäßig analysiert...
LG
Michael

AW: Autofilter über Makro funktioniert nicht
20.02.2015 11:45:44
Thomas
Hallo Michael,
danke für die schnelle Rückmeldung.
Jetzt kommen wir der Sache langsam näher aber funktionieren tut es immer noch nicht.
Der Filter wird jetzt zwar in der richtigen Zeile gesetzt und die ersten 15 Textzeilen werden in der Druckvorschau auch angezeigt, allerdings werden die Zeilen darunter immer noch nicht gefiltert.
Ich bekomme quasi lauter leere Blätter.
Wenn die ich Vorschau schließe zeigt es mir aber zumindest den korrekten Filter an und ich könnte manuell die Daten filtern. Das würde bei dem eigentlichen Datensatzvoluem aber nicht möglich.
Gruß
Thomas

Anzeige
AW: Autofilter über Makro funktioniert nicht
20.02.2015 11:52:49
Matze
Hallo Thomas,
kann es sein das ihr auch eine Spalte hinzugefügt habt?
Das was Michael dir schon geschrieben hat solltest du abändern
For lngRow = 16 To LoLetzte
auch den Start des Zählenwenn
If Application.CountIf(.Range(.Cells(16, 2),
es richtet sich alles nach Spalte 2
Gruß Matze

AW: Autofilter über Makro funktioniert nicht
20.02.2015 11:53:27
Klaus
Hi Thomas,
du hast die Rechnungsnummer ( .Cells(lngRow, 2) ) als Filterkriterium für den Debitor ( .Autofilter Field:=3 ) genommen. Ausserdem waren ein paar Zeilenangaben falsch.
So sollte es laufen:
Sub Autofilter_mit_Druck()
' Zeile 2 Löschen damit Autofilter wirkt
Dim lngRow As Long
On Error GoTo ErrExit
Dim LoLetzte As Long
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 2)), Cells(Rows.Count, 2).End(xlUp).Row, Rows. _
Count)
Application.ScreenUpdating = False
With Sheets("Rechnungsübersicht")
For lngRow = 16 To LoLetzte
If .Cells(lngRow, 2)  "" Then
If Application.CountIf(.Range(.Cells(2, 2), .Cells(lngRow, 2)), .Cells(lngRow,  _
2)) = 1 Then
.Range("A15").Autofilter Field:=3, Criteria1:=.Cells(lngRow, 3)
.PrintPreview
End If
End If
Next
.ShowAllData
End With
ErrExit:
Application.ScreenUpdating = True
End Sub
LG,
Klaus M.vdT.

Anzeige
AW: Autofilter über Makro funktioniert nicht
20.02.2015 11:58:25
Klaus
Auch die Formel geändert (so druckt er jeden Debitor nur einmal) und ein paar Zeilen entschlackt - und noch viel mehr Zeilen/Spalten korrigiert.
Wenn du ein Makro aus dem Internet abschreibst, darfst du nicht einfach Zeilen und Spalten einfügen wie du lustig bist - im Gegensatz zu Formel aktualisieren sich die Bezüge im VBA nicht selber!
Sub Autofilter_mit_Druck()
Dim lngRow As Long
On Error GoTo ErrExit
Dim LoLetzte As Long
Application.ScreenUpdating = False
With Sheets("Rechnungsübersicht")
LoLetzte = .Cells(.Rows.Count, 3).End(xlUp).Row
For lngRow = 16 To LoLetzte
If .Cells(lngRow, 3)  "" Then
If Application.CountIf(.Range(.Cells(16, 3), .Cells(lngRow, 3)), .Cells(lngRow,  _
3)) = 1 Then
.Range("A15").Autofilter Field:=3, Criteria1:=.Cells(lngRow, 3)
.PrintPreview
End If
End If
Next lngRow
.ShowAllData
End With
ErrExit:
Application.ScreenUpdating = True
End Sub
Grüße,
Klaus M.vdT.

Anzeige
AW: Autofilter über Makro funktioniert nicht
20.02.2015 13:12:48
Thomas
Hallo Klaus,
ich weiß gar nicht wie ich dir dafür danken kann.
Nach Wochen des Tüftelns und Bastelns endlich ein funktionierendes Makro.
Das Problem war, dass man mir mal im Netz mit dem ursprünglichen Makro geholfen hat und danach konnten wir das nie richtig anpassen.
Meine Kenntnisse streben gegen 0 was Makros betrifft und wenn man nicht versteht was die einzelnen Zeilen machen bastelt man sich irgendwann kaputt.
Nochmal besten Dank und Daumen hoch dass es noch Leute gibt die helfen!!!
Schönes Wochenende & Gruß
Thomas

AW: Autofilter über Makro funktioniert nicht
20.02.2015 13:21:20
Klaus
Hi Thomas,
danke erstmal für die freundliche Rückmeldung! Damit ein Makro auch vom Laien an neue Tabellen angepasst werden kann, empfehle ich alle Zeilen / Spalten-angaben als variablen mit sprechendem Namen nach oben auszulagern. Das ist recht intuitiv, und man muss den Code selber nicht verstehen (nur dem Programmierer vertrauen :-) )
Im Beispielmakro sähe das so aus:
Option Explicit
Sub Autofilter_mit_Druck()
Const SuchSpalte As Long = 3     'hier stehen die Suchwörter. Spalte A=1, B=2 und so weiter. _
Const ErsteZeile As Long = 15    'in dieser Zeile stehen die Überschriften
Const FilterVonLinks As Long = 3 'Die Filterspalte ist die dritte von Links. Ist meist  _
identisch mit SuchSpalte - aber der Filter MUSS ja nicht in A anfangen!
Const BlattName As String = "Rechnungsübersicht"  'so heisst das Blatt
Dim lngRow As Long
On Error GoTo ErrExit
Dim LoLetzte As Long
Application.ScreenUpdating = False
With Sheets(BlattName)
LoLetzte = .Cells(.Rows.Count, SuchSpalte).End(xlUp).Row
For lngRow = ErsteZeile + 1 To LoLetzte
If .Cells(lngRow, SuchSpalte)  "" Then
If Application.CountIf(.Range(.Cells(ErsteZeile + 1, SuchSpalte), .Cells(lngRow, _
SuchSpalte)), .Cells(lngRow, SuchSpalte)) = 1 Then
.Cells(ErsteZeile, SuchSpalte).AutoFilter Field:=FilterVonLinks, Criteria1:= _
.Cells(lngRow, SuchSpalte)
.PrintPreview
End If
End If
Next lngRow
.ShowAllData
End With
ErrExit:
Application.ScreenUpdating = True
End Sub
Dann kannst du auch beruhigt Zeilen einfügen oder löschen wie du willst - solange du ganz oben die Variable "ErsteZeile" anpasst.
LG,
Klaus M.vdT.

Anzeige
Nachsatz :-)
20.02.2015 13:26:18
Klaus
Einen hab ich noch, Thomas, aber nur wie du damit angefangen hast :-)
ich weiß gar nicht wie ich dir dafür danken kann.
Wenn du es so ansprichst: Ich schon! Überlege dir, wieviel Geld dir meine Hilfe in Euro Wert war. Vielleicht ne Kiste Bier = 15€? Diese Summe spendest du stattdessen an die SOS-Kinderdörfer oder eine ähnliche Organisation deiner Wahl, und das Bier kaufe ich mir selber.
LG,
Klaus

AW: Nachsatz :-)
20.02.2015 13:34:23
Thomas
Hi Klaus,
das mach ich. Spende hier sowieso regelmäßig an die regionale Tafel und das Tierheim.
Die werden jeweils einen halben Kasten Bier in Form von Münzen zusätzlich bekommen.
Alles Gute für die Zukunft
Gruß
Thomas

Anzeige
AW: Nachsatz :-)
20.02.2015 14:07:15
Thomas
Hallo Klaus,
darf ich dich in dem Zuge noch kurz etwas fragen?
Wenn ich in einem weiteren Blatt in Spalte H die Sprache zu einem Debitor hab, kann ich dann über ein Makro alle Zeilen löschen lassen die nicht Deutsch sind?
So nach dem Motto "Prüfe Zeile 1 - wenn deutsch mache nichts - wenn nicht deutsch dann lösche zeile - weiter bei Zeile 2"?
Vielen Dank im Voraus!

AW: Nachsatz :-)
20.02.2015 16:31:46
Thomas
Hallo,
habe es soweit geschaft mit folgender Lösung
Sub Löschen_unerwünschter_Sprache()
lz = Cells(Rows.Count, 8).End(xlUp).Rows.Row
For t = lz To 2 Step -1
If Cells(t, 8).Value  "Deutsch" Then
Rows(t).Delete Shift:=xlUp
End If
Next t
End Sub
Damit behalte ich ja alle Kunden die die Sprache deutsch zugeordnet haben.
Im zweiten Tabellenblatte mache ich das selbe mit Niederländisch. Soweit so gut.
im dritten und letzten brauch ich jetzt aber alle die nicht deutsch und nicht niederländisch sind. Mit
ungleich AND oder gleich OR
klappt es nicht und ich bekomme ne Fehlermeldung.
Es wäre super, wenn ich hier noch ein letztes Mal Hilfe bekommen könnte!!
Besten Dank!

Anzeige
AW: Nachsatz :-)
20.02.2015 16:39:34
Matze
Hallo Thomas,
mein Beitrag oben hätte dich eigentlich auch weiterbringen sollen,
nunja Klaus hat es ja dann deutlich genug gemacht.
Dein Makro wird zwar funktionieren, dafür aber auch in Jedem Tabellenblatt
und du sollst dir angewöhnen "Variablen" zu deklarieren
In ein Modul
Option Explicit

Sub DebitorDeutschLöscheZeile()
 
Dim i       As Long
Dim LetzteH As Long
 
With Worksheets("Rechnungsübersicht")
LetzteH = .Cells(Rows.Count, 8).End(xlUp).Row
    For i = 16 To LetzteH
 
        If .Cells(i, 8).Value = "Deutsch" Then
        .Cells(i, 8).EntireRow.Delete
        i = i - 1
        End If
    Next i
End With

End Sub

Anzeige
AW: Nachsatz :-)
20.02.2015 16:57:30
Thomas
Hi Matthias,
ich bin jedem Dankbar der sich meinem Problem annimmt.
Funktionieren tut es ja mit meiner Lösung. Die Testläufe sind einwandfrei
Ich weiß nur nicht wie ich zwei Bedingungen verknüpfe.
Also das Sprache Deutsch und Niederländisch zum ausführen der Aktion führen.

AW: Nachsatz :-)
20.02.2015 17:30:08
Matze
Hallo Thomas,
Ich glaube du meinst es so und dann wäre es nicht UND sondern ODER
Sobald eine der Beiden Suchbegriffe in der Spalte stehen , lösche diese Zeile.
Habe mir erlaubt die Suchbegriffe zu kürzen
Option Explicit

Sub DebitorDeutschLöscheZeile()
Dim i       As Long
Dim LetzteH As Long
 
With Worksheets("Rechnungsübersicht")
LetzteH = .Cells(Rows.Count, 8).End(xlUp).Row
    For i = 16 To LetzteH
        If .Cells(i, 8).Value = "De" Or .Cells(i, 8).Value = "Ned" Then
        .Rows(i).EntireRow.Delete
        i = i - 1
        End If
    Next i
End With
End Sub
Gruß Matze

Anzeige
AW: Nachsatz :-)
21.02.2015 06:05:04
Luschi
Hallo Matze,
einen Schleifenzähler zu manipulieren halte ich für keine gute Idee.
Deshalb schreibe ich das in diesem Fall so:

For i = LetzteH To 16 Step -1
If .Cells(i, 8).Value = "de" Or .Cells(i, 8).Value = "ned" Then
.Rows(i).EntireRow.Delete
End If
Next i
Gruß von Luschi
aus klein-Paris

341 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige