Supportnet Computer
Planet of Tech

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

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:

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 Sub


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

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

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 möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: