Supportnet / Forum / Tabellenkalkulation
Filter setzen mit Excel 97 VBA
Frage
Hallo,
kann mir einer von euch sagen warum folgende Prozedur in Excel 97 zu einer
Fehlermeldung kommt.
private sub filtern()
dim crit, xname as string
dim xcol,xrow as long
xname=activeworkbook.name
set x=application.inputbox(" "," ",Type:=8)
xcol=x.column
xrow=x.row
crit=cells(xrow+1,xcol).value
workbooks(xname).worksheets(1).cells(xrow,xcol).select
'Bricht in der Zeile unten ab.
selection.autofilter field:=xcol,criteria1:=crit
end sub
Als Fehlermeldung taucht Laufzeitfehler 1004 auf.
Vielen Dank für Euere Hilfe
Stefan
Antwort 1 von Guenter
Welche Zeile betrifft den die Laufzeitfehlermeldung?
Gruß
Günter
Gruß
Günter
Antwort 2 von sicci
Hallo Stefan,
das liegt daran, daß das Selektieren keine direkte Zelladressierung, sondern eine Cursorbewegung ist. Beim Arbeiten in Excel selbst, kannst Du mit dem Cursor auch nicht direkt in die Zelle eines anderen Blattes springen, Du mußt erst das andre Blatt selektieren.
in vba also:
... sheets(1).select
Cells(xrow,xcol).select ...
... ein gutes Beispiel dafür, daß man das Selektieren wo immer möglich vermeiden sollte. Es verbraucht nur unnötig Ablaufzeit. Mit WITH .. kann man beim Autofilter exakt referenzieren und Verarbeitungsbefehle setzen:
Willst Du den neuen Filter auch gleich sehen, kommst Du natürlich um's Selektieren nicht rum. Aber da langt es ja, das sheet zu selektieren.
Gruß
sicci
das liegt daran, daß das Selektieren keine direkte Zelladressierung, sondern eine Cursorbewegung ist. Beim Arbeiten in Excel selbst, kannst Du mit dem Cursor auch nicht direkt in die Zelle eines anderen Blattes springen, Du mußt erst das andre Blatt selektieren.
in vba also:
... sheets(1).select
Cells(xrow,xcol).select ...
... ein gutes Beispiel dafür, daß man das Selektieren wo immer möglich vermeiden sollte. Es verbraucht nur unnötig Ablaufzeit. Mit WITH .. kann man beim Autofilter exakt referenzieren und Verarbeitungsbefehle setzen:
Private Sub filtern()
Dim crit, xname As String
Dim xcol, xrow As Long
Set x = Application.InputBox(" ", " ", Type:=8)
xcol = x.Column
xrow = x.Row
crit = Cells(xrow + 1, xcol).Value
With ActiveWorkbook.Sheets(1).Cells(xrow, xcol)
.AutoFilter field:=xcol, Criteria1:=crit
End With
End SubWillst Du den neuen Filter auch gleich sehen, kommst Du natürlich um's Selektieren nicht rum. Aber da langt es ja, das sheet zu selektieren.
Gruß
sicci
Antwort 3 von Stefan Kaiser
Hallo,
leider habe ich erst jetzt Zeit gefunden, wieder im Internet zu surfen.
Ich werde die Lösung von Sicci ausprobieren.
Günter möchte ich mitteilen, dass der Fehler in der Zeile
selection.autofilter _ field:=xcol,criteria1:=crit
auftritt.
Ich hatte mir in der Zwischenzeit mal den Filter über ein Makro setzen lassen.
Dort bekamm ich folgenden Code:
Columns("D:D").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, _ Criteria1:="1"
Als ich die zwei letzten Zeilen in mein Programm nahm, war ich von Fehlern verschont geblieben, aber ich habe noch nicht viel getestet.
Vielen Dank für Euere Hilfe.
Stefan
leider habe ich erst jetzt Zeit gefunden, wieder im Internet zu surfen.
Ich werde die Lösung von Sicci ausprobieren.
Günter möchte ich mitteilen, dass der Fehler in der Zeile
selection.autofilter _ field:=xcol,criteria1:=crit
auftritt.
Ich hatte mir in der Zwischenzeit mal den Filter über ein Makro setzen lassen.
Dort bekamm ich folgenden Code:
Columns("D:D").Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, _ Criteria1:="1"
Als ich die zwei letzten Zeilen in mein Programm nahm, war ich von Fehlern verschont geblieben, aber ich habe noch nicht viel getestet.
Vielen Dank für Euere Hilfe.
Stefan
Antwort 4 von Stefan Kaiser
Hallo,
Ich habe die Lösung von Sicci ausprobiert und sie funktioniert.
Siggi und Günter möchte ich vielmals für Ihre Hilfe danken.
Schönen Abend noch wünscht Euch
Stefan
Ich habe die Lösung von Sicci ausprobiert und sie funktioniert.
Siggi und Günter möchte ich vielmals für Ihre Hilfe danken.
Schönen Abend noch wünscht Euch
Stefan

