Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1380to1384
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

Autofilterprozedure endet in Fehlermeldung.

Autofilterprozedure endet in Fehlermeldung.
23.09.2014 15:41:05
Peter

Hallo,
ich verstehe nicht, warum dieser Code in der einen Datei funktioniert.
In der anderen (mit anderen Range angaben jedoch nicht. Aufbau der Filter ist der Gleiche)
Also in "Tabelle12" habe ich diesen Code gesetzt:

Public Sub Autofilter2()
Range("A1:g1").AutoFilter
End Sub
In "Diese Arbeitsmappe ist dieser Code eingefügt:
Public Sub Autofilter5()
Worksheets("Tabelle12").Range("e2:e7612").AutoFilter Field:=5, Criteria1:=">=" & Worksheets(" _
Tabelle16").Range("b1").Value, Operator:=xlAnd, Criteria2:="<=" & Worksheets("Tabelle16").Range("b2").Value
Worksheets("Tabelle12").Range("f2:f7612").AutoFilter Field:=6, Criteria1:=">=" & Worksheets(" _
Tabelle16").Range("c1").Value, Operator:=xlAnd, Criteria2:="<=" & Worksheets("Tabelle16").Range("c2").Value
End Sub

In der "Tabelle12" sind die Daten, welche gefiltert werden sollen.
In der Tabelle 16 sind die Filterkriterien. Per Formel berechnet. Die Filterkriterien sind Zahlen.
Wie gesagt, in einer separaten Datei, wo ich den code ausprobiert habe, funktioniert es.
In der Datei, wo ich dies jedoch benötige, leider nicht.
Die Prozedure endet immer in folgender Meldung: Index ausserhalb des gültigen Bereichs.
Wonach muß ich suchen?
Grüße
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilterprozedure endet in Fehlermeldung.
23.09.2014 16:08:35
fcs
Hallo Peter,
die Fehlermeldung deutet Richtung unterschiedliche Namen der Tabellenblätter im Code und auf den Registertabs.
Ansonsten würde ich den Code in die folgende Richtung trimmen.
Public Sub Autofilter5()
Dim wksKrit As Worksheet
Set wksKrit = Worksheets("Tabelle16")
With Worksheets("Tabelle12")
If .AutoFilterMode = False Then
MsgBox "Bitte erst den Autofilter in Blatt """ & .Name & """ aktivieren!"
Else
With .AutoFilter.Range
.AutoFilter Field:=5, Criteria1:=">=" & wksKrit.Range("b1").Value, _
Operator:=xlAnd, Criteria2:="<=" & wksKrit.Range("b2").Value
.AutoFilter Field:=6, Criteria1:=">=" & wksKrit.Range("c1").Value, _
Operator:=xlAnd, Criteria2:="<=" & wksKrit.Range("c2").Value
End With
End If
End With
End Sub
Gruß
Franz

Anzeige
AW: Autofilterprozedure endet in Fehlermeldung.
24.09.2014 14:29:39
Peter
Sauber hat funktioniert.
Ich mußte statt Tabelle 12 jedoch die genaue Bezeichnung des Tabellenblattes eintragen. Danach ging es:-)
Vielen Dank!!
Peter

AW: Autofilterprozedure endet in Fehlermeldung.
25.09.2014 09:46:17
Peter
Guten Morgen,
ich habe folgenden Code:
Sub MinCopy()
Range("A1").CurrentRegion _
.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("fake").Range("A1")
End Sub
Dieser kopiert immer die sichtbaren gefilterten Zeilen in ein anderes Tabellenblatt.
Nun zwei Probleme:
1. Es wird immer der Filterkopf aus der ursprünglichen Tabelle mitkopiert. Das solle nicht sein. Es sollen nur alle sichtbaren Zeilen ab A2 kopiert werden.
Hatte schon im Code A1 mit A2 ersetzt. Hat jedoch nicht funktioniert.
2. Wenn ich mehrere Daten filter und kopiere, möchte ich, daß die neuen Zeilen unter die bereits kopierten Zeilen angefügt werden.
Heißt also, es muß die erste freie Zeile nach der letzten belegten Zeile gefunden werden und die neuen Daten sollen darunter angefügt werden.
Gibt es für Punkt 2 eine Struktur, wie man das grundsätzlich immer bauen/programmieren kann? Habe öfter das Problem und würde gern wissen, wie man die Code aufbaut.
Grüße
Peter

Anzeige
AW: Autofilterprozedure endet in Fehlermeldung.
25.09.2014 09:53:06
Peter
ok. so funktioniert schon mal das untereinander kopieren.
Jedoch wird es nicht ab Zeile 2 eingefügt sondern ab Zeile 8850 irgendwo am ende des Tabellenbblattes:-/
Sub MinCopy()
letztezeile = Sheets("Burgenlink Bd 5").UsedRange.SpecialCells(xlCellTypeLastCell).Row
letztezeileFake = Sheets("fake").UsedRange.SpecialCells(xlCellTypeLastCell).Row
Range("A2:H" & letztezeile).Copy _
Worksheets("fake").Range("A" & letztezeileFake + 1)
End Sub

AW: Autofilterprozedure endet in Fehlermeldung.
25.09.2014 10:51:49
Peter
ich möchte aus jedem TAbellenblatt dieses Makro auf den Reiter "Fake" anwenden können.
Der Code ist in einem Modul untergebracht.
Momentan wird das Makro abgebrochen und kehrt in den Debug Modus:-/
Sub Makro1()
' Makro1 Makro
With ActiveWorkbook
.Worksheets("fake").Range("2:2").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete Shift:=xlUp
Range("A2").Select
End With
End Sub

Anzeige
AW: Autofilterprozedure endet in Fehlermeldung.
25.09.2014 16:56:23
fcs
Hallo Peter,
du hast ja jetzt schon etliche Methoden zur Bestimmung der nächsten freien Zeile kennengelernt und auch deren unerwünschten Ergebnise.
Es gibt neben den beiden von dir schon mehr oder weniger erfolgreich angewendeten noch 2 andere gängige Methoden zur Bestimmung der letzten benutzten Zeile bzw. der nächsten freien Zeile. Welche geeignet ist bzw. verwendet werden muss hängt z.T. von den Daten in der Tabelle ab.
Dein Problem mit dem letzten Makro ist wahrschscheinlich, dass du Select auf ein Objekt versuchst, das nicht auf dem aktiveb Blatt ist.
Nachfolgenden die Makros/Functions.
Gruß
Franz
Sub aaTest()'Testmakro zur berechnung der letzten Zeile mit Daten
Dim lngZeileN As Long
lngZeileN = fncZeileNaechste1(Spalte:=2)
MsgBox lngZeileN, , "fncZeileNaechste1"
lngZeileN = fncZeileNaechste2
MsgBox lngZeileN, , "fncZeileNaechste2"
lngZeileN = fncZeileNaechste3
MsgBox lngZeileN, , "fncZeileNaechste3"
lngZeileN = fncZeileNaechste4
MsgBox lngZeileN, , "fncZeileNaechste4"
End Sub
Sub MinCopy()
Dim ZeileN As Long
ZeileN = fncZeileNaechste3(wks:=Worksheets("fake"))
ActiveSheet.AutoFilter.Range.Offset(1, 0).Copy _
Worksheets("fake").Cells(ZeileN, 1)
'  ActiveSheet.AutoFilter.Range.Offset(1, 0) _
.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("fake").Cells(ZeileN, 1)
End Sub
Public Function fncZeileNaechste1(Optional Spalte As Long = 1, Optional wks As Worksheet)
'Zeile nach letzter Zeile mit Inhalt in der Spalte
'Diese Function nur verwenden, wenn in der Spalte in jeder Zeile Werte eingetragen werdn.
If wks Is Nothing Then Set wks = ActiveSheet
With wks
If IsEmpty(.Cells(.Rows.Count, Spalte)) Then
fncZeileNaechste1 = .Cells(.Rows.Count, Spalte).End(xlUp).Row
If fncZeileNaechste1 = 1 And IsEmpty(.Cells(1, Spalte)) Then
fncZeileNaechste1 = 1
Else
fncZeileNaechste1 = fncZeileNaechste1 + 1
End If
Else
fncZeileNaechste1 = 0
End If
End With
End Function
Public Function fncZeileNaechste2(Optional wks As Worksheet)
'Zeile nach letzter Zeile mit Inhalt
Dim Zelle As Range
If wks Is Nothing Then Set wks = ActiveSheet
With wks
Set Zelle = .Cells.Find(what:="*", after:=.Cells(1, 1), LookIn:=xlFormulas, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If Zelle Is Nothing Then
fncZeileNaechste2 = 1
Else
If Zelle.Row = .Rows.Count Then
fncZeileNaechste2 = 0
Else
fncZeileNaechste2 = Zelle.Row + 1
End If
End If
End With
End Function
Public Function fncZeileNaechste3(Optional wks As Worksheet)
'Zeile nach letzter Zelle mit Inhalt ungleich ""
Dim Zelle As Range
If wks Is Nothing Then Set wks = ActiveSheet
With wks
Set Zelle = .Cells.Find(what:="*", after:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlPrevious)
If Zelle Is Nothing Then
fncZeileNaechste3 = 1
Else
If Zelle.Row = .Rows.Count Then
fncZeileNaechste3 = 0
Else
fncZeileNaechste3 = Zelle.Row + 1
End If
End If
End With
End Function
Public Function fncZeileNaechste4(Optional wks As Worksheet)
'Zeile nach letzter benutzter Zeile (auch Zellen mit Formatierung gelten als benutzt)
Dim Zeile As Long
If wks Is Nothing Then Set wks = ActiveSheet
With wks
With .UsedRange
Zeile = .Row + .Rows.Count - 1
End With
If Zeile = .Rows.Count Then
Zeile = 0
Else
If Zeile = 1 And Application.WorksheetFunction.CountA(.Rows(1)) = 0 Then
Zeile = 1
Else
Zeile = Zeile + 1
End If
End If
End With
fncZeileNaechste4 = Zeile
End Function

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige