Supportnet Computer
Planet of Tech

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

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

???????????

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

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

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:

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

Antwort 7 von sicci

Hallo Thomas,

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: