Supportnet / Forum / Tabellenkalkulation
Autofilter in Makro nach SVERWES funzt nicht!
Frage
Hallo!
Ich bin schon am verzweifeln:
Ich erzeuge aus einer Großrechnerdatei mittels Makros eine ziemlich umfangreiche Tabelle mit fast 10.000 Datensätzen und ca. 40 Spalten.
Einige Spalten werden mit SVERWEIS zugespielt.
Diese wiederum kopiere ich aus Schnelligkeitsgründen und füge die Werte ein. Anschließend werden einige der Spalten mittels Autofilter selektiert und meistens gelöscht (Inhalte, nicht die Spalten).
Bei einer Spalte funktioniert dies aber nicht! Ich habe schon alles probiert was mir eingefallen ist, aber das Ergebnis ist immer das gleiche:
Wenn ich mittels Makro selektiere, findet er den gewählten Suchbegriff nicht und Excel blendet mir alle Spalten aus.
Wenn ich das Makro aufzeichne, funktioniert alles einwandfrei. Sobald ich aber das Makro laufen lasse, tut sich nichts....?!?!
WinNT 4.0 und Excel 97.
Ich kann auch gerne eine Beispieldatei zusenden!
Bitte um Hilfe
Vielen Dank,
Grüße Thomas
Antwort 1 von Guenter
Hallo Thomas,
paste doch mal das Makro, oder ein Teil davon, der nicht funktioniert, ins Forum.
Gruß
Günter
paste doch mal das Makro, oder ein Teil davon, der nicht funktioniert, ins Forum.
Gruß
Günter
Antwort 2 von JonesM
Hallo Günter,
also: Erzeugt wird die Spalte so:
' SVERWEIS zu Liste Vorwoche
Workbooks.Open FileName:= _
L:\Projekte\...\ArbeitslisteVorwoche.xls"
Windows("Arbeitsliste.xls").Activate
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Range("I4").Select
ActiveCell.FormulaR1C1 = "Gegenüber Vorwoche NEU VORHANDEN = #NV"
Range("I6").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],[ArbeitslisteVorwoche.xls]Arbeitsliste!C8:C9,1,0)"
Columns("I:I").ColumnWidth = 14
Und mittels Autofilter möchte ich einmal alle "0" und "#NV" anzeigen lassen und löschen, ein anderes mal <> "#NV" mit benutzerdefinierten Filter anzeigen und die Einträge löschen.
Selection.AutoFilter Field:=7, Criteria1:="0"
Range("G5:G10000").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
' Range("G6").Select
Selection.AutoFilter Field:=7, Criteria1:="NV"
Range("G5:G10000").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
Die "0" werden gefilter und auch gelöscht. Die #NV werden nicht gefunden. Es sind aber keine Leerzeichen oder anderes vorhanden. Habe sie auch schon unterschiedlich formatiert (Zahl, Standart, Text) und manuell eingegeben.
Excel interpretiert die von #NV im Makro einfach anders. Von "Hand" geht es einwandfrei.
Auch ersetzen funktioniert nur per Hand:
Cells.Select
Selection.Replace What:="#NV", Replacement:="NV", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
???????????
also: Erzeugt wird die Spalte so:
' SVERWEIS zu Liste Vorwoche
Workbooks.Open FileName:= _
L:\Projekte\...\ArbeitslisteVorwoche.xls"
Windows("Arbeitsliste.xls").Activate
Columns("I:I").Select
Selection.Insert Shift:=xlToRight
Range("I4").Select
ActiveCell.FormulaR1C1 = "Gegenüber Vorwoche NEU VORHANDEN = #NV"
Range("I6").Select
ActiveCell.FormulaR1C1 = _
"=VLOOKUP(RC[-1],[ArbeitslisteVorwoche.xls]Arbeitsliste!C8:C9,1,0)"
Columns("I:I").ColumnWidth = 14
Und mittels Autofilter möchte ich einmal alle "0" und "#NV" anzeigen lassen und löschen, ein anderes mal <> "#NV" mit benutzerdefinierten Filter anzeigen und die Einträge löschen.
Selection.AutoFilter Field:=7, Criteria1:="0"
Range("G5:G10000").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
' Range("G6").Select
Selection.AutoFilter Field:=7, Criteria1:="NV"
Range("G5:G10000").Select
Selection.ClearContents
Selection.AutoFilter Field:=7
Die "0" werden gefilter und auch gelöscht. Die #NV werden nicht gefunden. Es sind aber keine Leerzeichen oder anderes vorhanden. Habe sie auch schon unterschiedlich formatiert (Zahl, Standart, Text) und manuell eingegeben.
Excel interpretiert die von #NV im Makro einfach anders. Von "Hand" geht es einwandfrei.
Auch ersetzen funktioniert nur per Hand:
Cells.Select
Selection.Replace What:="#NV", Replacement:="NV", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
???????????
Antwort 3 von Guenter
In aller Eile, kurz vor dem Wochenende, kann ich Dir keinen guten Tipp geben. Ich kann mir aber vorstellen, dass #NV nicht gefunden vom Makro nicht gefunden wird. Es ist ja ein Fehlerwert. Vielleicht solltest in Deinen Formeln vermeiden, dass der Fehlerwert #NV auftritt.
Gruß
und schönes Wochenende
Günter
Gruß
und schönes Wochenende
Günter
Antwort 4 von Teddy7
Du könntest die Fehlermeldungen mit folgendem Makro beseitigen:
Sub Makro1()
Dim i1 As Integer
Dim lastrow As Integer
Dim xfeld as string
With Range("A1")
lastrow = .SpecialCells(xlCellTypeLastCell).Row
End With
on error resume next
For i1 = 1 To lastrow
xfeld = ""
xfeld = Cells(i1, 7)
if xfeld = "" then
cells(i1, 7) = ""
end if
Next i1
on error goto 0
End Sub
---------------
bei NV oder Div/0 oder ähnlichem steht in der Cells die Fehlernummer drin (z.B. Fehler 2001). Aber dieser Zelleninhalt kann nicht in ein string-Feld übertragen werden.
Das macht sich dieses Makro zu nutze.
Die übliche Fehlerbehandlung wird ersetzt durch den Befehl, fehlerhafte Anweisungen zu überspringen.
Gruß
Teddy
Sub Makro1()
Dim i1 As Integer
Dim lastrow As Integer
Dim xfeld as string
With Range("A1")
lastrow = .SpecialCells(xlCellTypeLastCell).Row
End With
on error resume next
For i1 = 1 To lastrow
xfeld = ""
xfeld = Cells(i1, 7)
if xfeld = "" then
cells(i1, 7) = ""
end if
Next i1
on error goto 0
End Sub
---------------
bei NV oder Div/0 oder ähnlichem steht in der Cells die Fehlernummer drin (z.B. Fehler 2001). Aber dieser Zelleninhalt kann nicht in ein string-Feld übertragen werden.
Das macht sich dieses Makro zu nutze.
Die übliche Fehlerbehandlung wird ersetzt durch den Befehl, fehlerhafte Anweisungen zu überspringen.
Gruß
Teddy
Antwort 5 von sicci
Hallo Thomas, Günter und Teddy,
Wenn im gewählten Bereich (hier Spalte G) keine Fehlerwerte auftauchen, die erhalten werden sollen, gibt es eine sehr handliche Variante, Fehlerwerte via VBA zu löschen:
Das war's schon ;-)
Teddy nennt ja den Grund, warum Replace oder Autofilter, die Strings erwarten, keine Fehlerwerte erkennen.
Gruß
sicci
Wenn im gewählten Bereich (hier Spalte G) keine Fehlerwerte auftauchen, die erhalten werden sollen, gibt es eine sehr handliche Variante, Fehlerwerte via VBA zu löschen:
Sub Thomas()
Columns(7).SpecialCells(xlCellTypeFormulas, 16).ClearContents
End Sub
Das war's schon ;-)
Teddy nennt ja den Grund, warum Replace oder Autofilter, die Strings erwarten, keine Fehlerwerte erkennen.
Gruß
sicci
Antwort 6 von JonesM
Hallo Teddy,
vielen Dank! Aber leider komme ich damit nicht ganz klar. Was genau macht diese Makro? Ich habe es zwar ausprobiert, aber es zeigte keine Auswirkung...? Was mache ich verkehrt?
Sub test()
Dim i1 As Integer
Dim lastrow As Integer
Dim xfeld As String
With Range("N6:N1000")
lastrow = .SpecialCells(xlCellTypeLastCell).Row
End With
On Error Resume Next
For i1 = 1 To lastrow
xfeld = "V"
xfeld = Cells(i1, 7)
If xfeld = "" Then
Cells(i1, 7) = ""
End If
Next i1
On Error GoTo 0
End Sub
Hi Sicci!
Das ist schon mal nicht schlecht! Funktioniert soweit auch. Leider habe ich eine Spalte, in der mich nur die Datensätze mit den Fehlwerten interessieren...
kann ich .ClearContens auch durch etwas anderes ersetzen und wenn ja, mit welcher Syntax. Also ich möchte den Fehlwert durch einen beliebigen String ersetzen.
Grüße Thomas
vielen Dank! Aber leider komme ich damit nicht ganz klar. Was genau macht diese Makro? Ich habe es zwar ausprobiert, aber es zeigte keine Auswirkung...? Was mache ich verkehrt?
Sub test()
Dim i1 As Integer
Dim lastrow As Integer
Dim xfeld As String
With Range("N6:N1000")
lastrow = .SpecialCells(xlCellTypeLastCell).Row
End With
On Error Resume Next
For i1 = 1 To lastrow
xfeld = "V"
xfeld = Cells(i1, 7)
If xfeld = "" Then
Cells(i1, 7) = ""
End If
Next i1
On Error GoTo 0
End Sub
Hi Sicci!
Das ist schon mal nicht schlecht! Funktioniert soweit auch. Leider habe ich eine Spalte, in der mich nur die Datensätze mit den Fehlwerten interessieren...
kann ich .ClearContens auch durch etwas anderes ersetzen und wenn ja, mit welcher Syntax. Also ich möchte den Fehlwert durch einen beliebigen String ersetzen.
Grüße Thomas
Antwort 7 von sicci
Hallo Thomas,
den Fehlerwert kannst Du z.B. mit einer Schleifenabfrage ersetzen:
Gruß
sicci
den Fehlerwert kannst Du z.B. mit einer Schleifenabfrage ersetzen:
Sub Thomas2()
Dim Fehler
For Each Fehler In Columns(7).SpecialCells(xlCellTypeFormulas, 16)
Fehler.Value = "String"
Next
End Sub
Gruß
sicci