Autofilter in manchen feldern Fehlerhaft
11.09.2024 16:07:08
Marius
Vorab muss ich direkt darauf hinweisen das ich hier leider nicht mit einer Beispielmappe dienen kann, da es um interne Wartungslisten geht.
Kurzer Hintergrund.
Aktuell strukturieren wir o.g. Wartungslisten so um, dass wir in einer Datei alle Listen haben, per VBA Skript das korrekte auswählen/filtern und daraus eine PDF generieren, welche der Techniker sich dann aus dem Wartungsticket herunterladen kann
Um zumindest manchen Fragen vorzugreifen:
Da wir viele Autofilter Felder nutzen und an 3 Stellen sortieren müssen (Intervall, Maschine, Maschinenoptionen) haben wir das so geregelt, dass Intervall und Maschinentyp mit "x" und "" ganz einfach gefiltert werden können. Das ist nur jeweils ein Feld für den jeweiligen intervall und Maschinentyp.
Problematisch ist dies allerdings bei den Optionen.
Die Anlagen können mit verschiedenen Typen von Peripherie nach Kundenwusch ausgestattet werden, was gleichzeitig bedeutet das Ersatzteile auch andere Artikelnummern haben. Das haben wir gelöst in dem wir einfach als Beispiel "Kühlwasserzusatz einfüllen" 3mal (weil 3 Kühlertypen) untereinander geschrieben haben mit den jeweiligen artikelnummern. Das hat zur folge das wir die Optionen invertiert filtern müssen. das wird klarer wenn ihr den code jetzt gleich seht. Ds funktioniert auch, bis zu einer gewissen Stelle:
Funktionierender Filtercode:
Function sortOptions(optChiller As Long, optExhaust As Long, optZAxis As Long, optFlipper As Long, optAAC As Long, optPLC As Long)
'Für Maschinentyp 1 die Optionen filtern
'Parameterübergabe bei Klick auf Continue des Optionsformulars
'Autofilter Feld ist immer Spalte - 1
'Optionen müssen invertiert gefiltert werden
'Beispiel: Für Kühlertyp1 müssen Kühlertyp2 und Kühlertyp3 auf leer ("") gefiltert werden nicht Kühlertyp1 auf "x"
'Kühler Filtern
Select Case optChiller
Case 0
'Kühlertyp1
With tblSource.Range("B2")
.AutoFilter 45, ""
.AutoFilter 46, ""
End With
Range(tblSource.Cells(1, 46), tblSource.Cells(1, 47)).Columns.Hidden = True
Case 1
'Kühlertyp2
With tblSource.Range("B2")
.AutoFilter 44, ""
.AutoFilter 46, ""
End With
Range(tblSource.Cells(1, 45), tblSource.Cells(1, 45)).Columns.Hidden = True
Range(tblSource.Cells(1, 47), tblSource.Cells(1, 47)).Columns.Hidden = True
Case 2
'Kühlertyp3
With tblSource.Range("B2")
.AutoFilter 44, ""
.AutoFilter 45, ""
End With
Range(tblSource.Cells(1, 45), tblSource.Cells(1, 46)).Columns.Hidden = True
End Select
Der Filter der mit dem folgenden Code gesteuert wird, ist exakt so aufgebaut wie die anderen funktionierenden auch. Das haben wir mehrfach überprüft. Auch Feldnummer für den Autofilter ist 100% korrekt. Dennoch filtert der Autofilter plötzlich alles raus selbst wenn kein x eingetragen ist und die Option ist garnicht mehr vorhanden Die Spalte die eingeblendet bleibt ist sogar die richtige, aber alle zeilen die dazu gehören, egal ob mit x bestückt oder nicht werden weggefiltert
Function sortOptionsOther(optLaser As Long, optMaintUnit As Long)
'Für Maschinentyp 2 und 3 Laser und Wartungseinheit filtern.
'Parameterübergabe bei Klick auf Continue des Optionsformulars
'Autofilter Feld ist immer Spalte - 1
'Optionen müssen invertiert gefiltert werden
'Beispiel: Für Lasertyp1 muss Lasertyp2 auf leer ("") gefiltert werden nicht Lasertyp1 auf "x"
'Laser filtern
Select Case optLaser
Case 0
'Lasertyp1
tblSource.Range("B2").AutoFilter 57, ""
Range(tblSource.Cells(1, 58), tblSource.Cells(1, 58)).Columns.Hidden = True
Case 1
'Lasertyp2
tblSource.Range("B2").AutoFilter 56, ""
Range(tblSource.Cells(1, 57), tblSource.Cells(1, 57)).Columns.Hidden = True
End Select
Vielleicht sehe ich den Wald vor lauter bäumen nicht, aber ich bin mir ziemlich sicher das beide funktionen exakt gleich aufgebaut sind, die eine halt nur mit weniger optionen. Wie bereits gesagt kann ich leider keine Beispieldatei hochladen. Es würde mich viel zu viel Zeit kosten daraus eine Beispielmappe zu erstellen. Und ich habe schon genug zeit damit verbracht diesen miesen kleinen bug zu suchen. Und das weiterhin ohne erfolg. Daher wende ich mich an euch mit der Hoffnung hier auf ein paar hilfreiche kommentare zu treffen.
Beste Grüße
Marius
Anzeige