Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
984to988
984to988
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Autofilter: Problem mit verknüpften Spalten

Autofilter: Problem mit verknüpften Spalten
22.06.2008 09:32:29
susi-lein
Hallo Leute,
ich habe ein kompliziertes Problem für einen echten Excel-Profi:
ich habe ein Excel-Projekt das aus mehreren miteinander verknüpften Mappen mit vielen, vielen verknüpften Blättern besteht.
Diese enthalten umfangreiche Berechnungen die über mehrere Jahre.
Um nicht immer alles ausdrucken zu müssen arbeite ich mit einem Benutzerdefinierten Autofilter der mir jeweils nur die Zeilen eines Blattes zeigen/drucken soll die in dieser Steuerungs-Spalte eine 1 enthalten.
Ich habe z.B. ein Blatt1 in Mappe1 nur für diese Ausdrucksteuerung welches vordefinierte Spalten enthält und dem jeweils nur die Zeilen eine 1 enthalten,
die dann gedruckt werden sollen,
z.B. eine Spalte für 2005, eine Spalte für 2006 usw. in denen jeweils nur für die 12 Zeilen des jeweiligen Jahres und die ansonsten anderen immer mit zu druckenden Zeilen eine 1 steht.
In der letzten Spalte des Blattes1 befindet sich die jeweils aktuelle gewünschte Ausdrucksteuerung für alle anderen Blätter.
Um die Ausdrucksteuerung aller anderen Blätter zu ändern
kopiere ich jeweils die ganze Spalte für das gewünschte Jahr in diese letzte Spalte.
Alle anderen Blätter in allen Mappen haben jeweils eine Drucksteuerungsspalte als hinterste Spalte.
Diese letzten Spalten enthalten jeweils anfangs beschriebene benutzerdefinierte Autofilterfunktion im Spaltenkopf.
Nun funktioniert die Sache aber nicht so wie ich das erwartet habe:
wenn ich auf Blatt1 in Mappe1 eine andere Spalte in die hintere Spalte kopiere
dann erscheint ihr Inhalt zwar richtig auf allen anderen Blättern,
nur die Autofiltern-Funktion funktioniert nicht automatisch mit den geänderten Werten:
erst wenn ich auf einem Blatt auf den blauen Pfeil klicke und danach die 1 auswähle werden nur die gewünschten Zeilen angezeigt, so wie ich das möchte;
ich müsste mir also immer alle Blätter einzeln vornehmen,
auf den blauen Pfeil klicken und
die benutzerdefinierte 1 auswählen
damit nur die gewünschten Zeilen angezeigt werden.
das wollte ich aber gerade vermeiden!
wie funktioniert das so wie ich es gerne hätte,
also automatisch auf allen Seiten aller gleichzeitig geöffneten Mappen?
Grüsse, Susi

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
22.06.2008 12:19:00
fcs
Hallo Susi,
die Automatisierung der Auofilter-Aktualisierung geht nur per Makro.
Das nachfolgende Makro muss du deiner persönlichen Makroarbeitsmappe speichern oder in der Mappe1 mit den Vorgabewerten für die Ausdrucksteuerung.
Gruß
Franz

Sub AutoFilterDrucken()
'Setzt den Autofilter in den Blättern neu auf 1 für das Drucken
Dim objWb As Workbook, objWks As Worksheet
Dim objFilter As Filter, objFilterBereich As Range
Dim lngSpalteFilter As Long
On Error GoTo Fehler
Application.ScreenUpdating = False
For Each objWb In Workbooks
'nur eingeblendete Mappen abarbeiten
If Application.Windows(objWb.Name).Visible = True Then
For Each objWks In objWb.Worksheets
Select Case objWks.Name
Case "Blatt1", "TabelleXYZ" 'Ausnahmen - Tabellenblattnamen anpassen!!!!
'Namen der Blätter in denen der Autofilter nicht gesetzt werden soll
'do nothing
Case Else
With objWks
'Prüfen, ob Autofilter im Blatt aktiv ist
If .AutoFilterMode = True Then
'ggf. Alle Daten einblenden
For Each objFilter In .AutoFilter.Filters
If objFilter.On = True Then
.ShowAllData
Exit For
End If
Next
'Aktuell eingestellten Bereich des Autofilters merken
Set objFilterBereich = .AutoFilter.Range
'Letzte Spalte mit Druckersteuerung ermitteln
'Falls diese Spalte in allen Blättern einen Eintrag in der Spaltentitelzeile _
hat, dann kann das  "+ 1" in der nächsten Zeile entfallen
'Die +1 dient dazu, dass "xlToLeft" auf eine Zelle mit Inhalt in der _
Druckersteuerungsspalte trifft. Also eine Zelle mit Wert oder Formel
lngSpalteFilter = .Cells(objFilterBereich.Row + 1, _
.Columns.Count).End(xlToLeft).Column
'Filter setzen
objFilterBereich.AutoFilter Field:=lngSpalteFilter _
- objFilterBereich.Column + 1, Criteria1:=1
End If
End With
End Select
Next
End If
Next
Application.ScreenUpdating = True
MsgBox "Alle Autofilter für Drucksteuerung auf 1 gesetzt"
Fehler:
If Err.Number  0 Then
MsgBox "Fehler Nr.: " & Err.Number & vbLf & Err.Description
End If
Set objWb = Nothing: Set objWks = Nothing
Set objFilter = Nothing: Set objFilterBereich = Nothing
End Sub


Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
22.06.2008 15:30:47
susi-lein
Hallo Franz,
vielen Dank für das Makro.
ich habe es in meiner persönlichen Makrosammlung gespreichert.
es tut sich aber nichts,
ich nehme an es muss auch irgendwie gestartet werden.
was muss ich noch tun?
Grüsse, Susi

AW: Autofilter: Problem mit verknüpften Spalten
22.06.2008 18:10:34
fcs
Hallo susi,
starten muss du es von Hand nachdem du alle gewünschten Arbeitsmappen geöffnet und in der Steuerungsdatei die 1er in die Spalte kopiert hast aus der die andern Datei den Wert per Formel übernehmen.
Weitere Automatisierung wird problematisch ohne Kenntnis der Dateien. Du könntest als Vereinfachung in deiner Steuerungsdatei noch eine Schaltfläche aus der Symbolleiste Formular einfügen und dann das Makro zuweisen.
Gruß
Franz

Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
23.06.2008 08:13:46
susi-lein
Hallo Franz,
ein automatischer Ablauf der Routine auch in Blättern die die Drucksteuerungsspalte nicht enthalten wäre bei der Vielzahl der Blätter sehr wünschenswert.
Ich könnte den Text der 1. Zelle der Drucksteuerungsspalte so ändern das sie die Zeichenfolge "$" enthält sodaß sich deine Routine an diesem Inhalt orientieren könnte.
würdest du mir die Routine dahingehend ändern?
danke dir schon im Voraus.
Grüsse, Susi

AW: Autofilter: Problem mit verknüpften Spalten
23.06.2008 13:07:27
fcs
Hallo Susi,
ich hab da jetzt ein Verständnisproblem.
Ist der Autofilter normalerweise in den Blättern nicht aktiviert - oder nicht in allen Blättern -
bzw. soll er nicht in allen Blättern gesetzt werden?
Ich hab das Makro jetzt mal so umgestrickt, dass wenn in Zeile 1 eines Blattes ein $-Zeichen steht der Filter gestzt wird, sonst nicht.
Gruß
Franz

Sub AutoFilterDrucken()
'Setzt den Autofilter in den Blättern neu auf 1 für das Drucken
Dim objWb As Workbook, objWks As Worksheet
Dim objFilterBereich As Range
Dim lngSpalteFilter As Long
Const Druckzeile As Long = 1 'Zeile in den Blättern zum Ermitteln der Spalte für _
den Autofilter = Titelzeile des Autofilters, ggf. ändern
On Error GoTo Fehler
Application.ScreenUpdating = False
For Each objWb In Workbooks
'nur eingeblendete Mappen abarbeiten
If Application.Windows(objWb.Name).Visible = True Then
'Arbeitsmappe in der Filter nicht gesetzt werden soll
Select Case LCase(objWb.Name)
Case "druckautofilter.xls"   'ggf Namen anpassen/ergänzen
'Filter in Mappe mit Drucksteuerung nicht setzen
Case Else
For Each objWks In objWb.Worksheets
Select Case objWks.Name
Case "Blatt1", "TabelleXYZ" 'Ausnahmen - Tabellenblattnamen anpassen!!!!
'Namen der Blätter in denen der Autofilter nicht gesetzt werden soll
'do nothing
Case Else
With objWks
'Letzte Spalte mit Druckersteuerung in Druckzeile ermitteln
lngSpalteFilter = .Cells(Druckzeile, .Columns.Count).End(xlToLeft).Column
'prüfen ob Blatt mit Druckspalte (Spalte enthält $-Zeichen)
If .Cells(Druckzeile, lngSpalteFilter).Value = "$" Then
'Prüfen, ob Autofilter im Blatt aktiv ist
If .AutoFilterMode = True Then
.AutoFilterMode = False 'vorhanden Autofilter abschalten
End If
'Bereich des Autofilters setzen (Druckzeile bis letzte Zeile)
Set objFilterBereich = .Range(.Cells(Druckzeile, lngSpalteFilter), _
.Cells(.Rows.Count, lngSpalteFilter).End(xlUp))
'Autofilter setzen in Drucksteuerungs-Spalte
objFilterBereich.AutoFilter Field:=1, Criteria1:=1
'in den den beiden nächsten zeilen das Kommentierungszeichen löschen, wenn du das Blatt _
sofort drucken und den Filter wieder abschalten willst
'.PrintOut Preview:=False 'Blatt Drucken ohne Seitenvorschau
'.AutoFilterMode = False 'Autofilter wieder abschalten
Else
'was tun in/mit den anderen Blättern ohne Druckspalte
'.PrintOut Preview:=False 'Drucken ohne Seitenvorschau
End If
End With
End Select
Next objWks
End Select
End If
Next objWb
Application.ScreenUpdating = True
MsgBox "Alle Autofilter für Drucksteuerung auf 1 gesetzt"
Fehler:
If Err.Number  0 Then
MsgBox "Fehler Nr.: " & Err.Number & vbLf & Err.Description
End If
Set objWb = Nothing: Set objWks = Nothing
Set objFilterBereich = Nothing
End Sub


Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
24.06.2008 08:30:00
susi-lein
Hallo Franz,
nochmals vielen Dank für deine Routinen.
es gibt Blätter ohne jegliche Autofilterfunktion die haben in der letzten Spalte auf nicht die Verknüpfung mit der Autofilterspalte und solche mit Berechnungen auf welchen sich immer der gleiche Autofilter in der letzten Spalte befindet.
Grüss, Susi

AW: Autofilter: Problem mit verknüpften Spalten
24.06.2008 15:44:53
susi-lein
Hallo Franz,
mir ist gerade eingefallen das ich schon eine Routine habe die nach dem Starten des Projektes alle Blätter nacheinander abklappert.
dort könnte ich die Routine einbauen die den Autofilter aktiviert.
ich bräuchte als nur eine Routine die die im aktuellen Blatt macht,
der ganze Overhead zum Durchsuchen nach entsprechenden Blättern könnte also entfallen was die Routine sicherlich übersichtlicher gestalten würde.
Grüsse, Susi

Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
24.06.2008 17:01:42
fcs
Hallo Susi,
so sehr viel übersichtlicher wird die Prozedur dadurch auch nicht.
Außerdem müssen mit dem Start des Projektes schon die Werte für die Druckersteuerung gesetzt sein bzw. beim Projektstart gesetzt werden bevor die Blätter in den Arbeitsmappen abgearbeitet werden, um den Autofilter zu setzen.
Nachfolgend die 3 Teilgerüste des bisherigen Makros, die du an passender Stelle in deines bisherigenMakro einfügen muss.
Einfacher ist es aber wahrscheinlich, wenn du das Makro so wie es ist zum Laufen bringst, dann als zusätzlich Prozedur in dein Modul mit dem Startmakro kopierst und es am Ende der Startprozedur mit
Call AutofilterDrucken
startest.
Gruß
Franz

Sub AutoFilterDrucken()
'Variablendeklarationen  am Anfang der Prozedur einfügen
'Setzt den Autofilter in den Blättern neu auf 1 für das Drucken
Dim objWks As Worksheet
Dim objFilterBereich As Range
Dim lngSpalteFilter As Long
Const Druckzeile As Long = 1 'Zeile in den Blättern zum Ermitteln der Spalte für _
den Autofilter = Titelzeile des Autofilters, ggf. ändern
On Error GoTo Fehler
'ab hier an passender Stelle einfügen wo die entsprechenden Blatt aktiv sind
Application.ScreenUpdating = False
Set objWks = ActiveSheet
Select Case objWks.Name
Case "Blatt1", "TabelleXYZ" 'Ausnahmen - Tabellenblattnamen anpassen!!!!
'Namen der Blätter in denen der Autofilter nicht gesetzt werden soll
'do nothing
Case Else
With objWks
'Letzte Spalte mit Druckersteuerung in Druckzeile ermitteln
lngSpalteFilter = .Cells(Druckzeile, .Columns.Count).End(xlToLeft).Column
'prüfen ob Blatt mit Druckspalte (Spalte enthält $-Zeichen)
If .Cells(Druckzeile, lngSpalteFilter).Value = "$" Then
'Prüfen, ob Autofilter im Blatt aktiv ist
If .AutoFilterMode = True Then
.AutoFilterMode = False 'vorhanden Autofilter abschalten
End If
'Bereich des Autofilters setzen (Druckzeile bis letzte Zeile)
Set objFilterBereich = .Range(.Cells(Druckzeile, lngSpalteFilter), _
.Cells(.Rows.Count, lngSpalteFilter).End(xlUp))
'Autofilter setzen in Drucksteuerungs-Spalte
objFilterBereich.AutoFilter Field:=1, Criteria1:=1
'in den den beiden nächsten zeilen das Kommentierungszeichen löschen, wenn du das Blatt _
sofort drucken und den Filter wieder abschalten willst
'.PrintOut Preview:=False 'Blatt Drucken ohne Seitenvorschau
'.AutoFilterMode = False 'Autofilter wieder abschalten
Else
'was tun in/mit den anderen Blättern ohne Druckspalte
'.PrintOut Preview:=False 'Drucken ohne Seitenvorschau
End If
End With
End Select
Application.ScreenUpdating = True
'Diesen Teil am Ende der Prozedur einfügen
Fehler:
If Err.Number  0 Then
MsgBox "Fehler Nr.: " & Err.Number & vbLf & Err.Description
End If
Set objWks = Nothing
Set objFilterBereich = Nothing
Application.ScreenUpdating = True
End Sub


Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
25.06.2008 07:53:00
susi-lein
Hallo Franz,
nochmals vielen Dank für deine Routine.
noch 3 Anmerkungen bzw. Fragen zum Verständnis:
1. die letzte Spalte auf den einzelnen Blättern mit der Ausdrucksteuerung ist die letzte benutzte Spalte auf jedem Arbeitsblatt auf dem ein selektiver Ausdruck stattfinden soll, aber die Spalte selbst wird nicht mitgedruckt, d.h. sie befindet sich nicht im Druckbereich.
wird das von deiner Routine so behandelt?
2. Damit meine vorhandene Routine durch den eingefügten Code für mich als VBA-Banause in sich nicht zu unübersichtlich wird wollte ich dort nur einen Subroutinenaufruf einfügen und deinen Code in einem eigenen Modul abspeichern.
was müsste ich dafür an der Routine noch ändern?
3. wozu ist der Code des 1. case "Case "Blatt1", "TabelleXYZ"..." erforderlich wenn sich die Steuerung am "$"-Zeichen orientiert?
(Anm. ich fände deutlich besser wenn sich deine Routine am Text der 1. Zelle der entsprechenden Drucksteuerungsspalte orientieren würde (die später nicht sichtbar ist!) statt an ihrer Position als letzte Spalte des Blattes da ich in Zelle A1 den Namen des Blattes stehen habe der in meiner Dokumentation des Programmes auftaucht und ich sonst die gesamte Doku ändern müsste!)
Grüsse, Susi

Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
25.06.2008 08:41:37
fcs
Hallo Susi,
1. Druckbereich
Der Druckbereich wird durch das Makro nicht beeinflusst.
2. Subroutinenaufruf
Das müsste ohne Änderung an der Routine funktionieren.
3. wozu ist der Code des 1. case "Case "Blatt1", "TabelleXYZ"..." erforderlich wenn sich die Steuerung am "$"-Zeichen orientiert?
So eine Case-Zeile ist bei mir bei solchen Routinen, die Blätter oder Arbeitsmappen in großer Anzahl abarbeiten, standardmäßig drin, um Ausnahmen festzulegen für die Blätter, die von einer Routine nicht oder anders bearbeitet werden sollen.
Wenn es bei dir solche Ausnahmen nicht gibt, dann kannst du hier die Select Case-Konstruktion ganz weglassen oder die Zeile ändern zu
Case ""
Die Routine orientiert sich am Text der 1. Zelle der entsprechenden Drucksteuerungsspalte.
Wichtig ist, dass die Spalte zum Zeitpunkt der Makro-Ausführung eingeblendet ist!
Excel muss ja irgendwie ermittel oder gesagt bekommen in welcher Zelle das "$"-Zeichen steht.
Das Makro sucht von Rechts in der Zeile 1 die 1. sichtbare Spalte mit Inhalt. Ist der Inhalt = "$" dann wird der Autofilter neu gesetzt.
Alternativ könnte man in einer For-Next-Schleife auch prüfen, ob eine Spalte in Zeile 1 = "$" ist und entsprechend den Autofilter setzen. Das würde dann auch mit ausgeblendeten Zellen funktionieren.
Wenn die 1. Zelle der Druckspalte in allen Blättern die gleiche Zelladresse hat, dann kannst du für die Variablen Druckzeile (z.Zt auf 1 gesetzt) und lngSpalteFilter feste Werte vorgeben.
Grüsse,
Franz

Anzeige
AW: Autofilter: Problem mit verknüpften Spalten
02.07.2008 08:00:23
susi-lein
Hallo Franz,
nochmals vielen Dank für Deine Routine.
Ich bin erst jetzt dazu gekommen sie in meine Funktion einzubauen.
Könntes Du mir noch die Zeile
If .Cells(Druckzeile, lngSpalteFilter).Value = "$" Then
so ändern das nicht der gesamte Zellinhalt "$" ist sondern nur das "$" im Text enthalten ist?
Vielen Dank im Voraus.
Grüsse,
Susi

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige