Pivot-Table - Auswahlmöglichkeiten einschränken
13.12.2014 13:32:48
Oliver
Ich stehe vor folgendem Problem:
Ich habe eine Datei mit mehreren Pivot-Tabellen erstellt. Jede Pivot-Tabelle ist in einem eigenen Tabellenblatt.
In diesen Tabellen befinden sich jeweils im Berichtsfilter die Mitarbeiternamen.
Diese würde ich in den Rohdaten aus denen die Pivot-Tabellen erstellt werden so einstellen, dass es sich dabei jeweils um die Nutzernamen von Excel (Application Username) handelt.
Das Problem: Jeder Mitarbeiter soll nur die Gesamtdaten (im Filter also (Alle) sehen können und seine eigenen Daten, jedoch nicht die eines anderen einzelnen Mitarbeiters.
Ich kann aufgrund sensibler Daten nicht die originalen Dateien hochladen, daher habe ich eine kleine Beispieldatei hochgeladen die aber nach dem gleichen Prinzip aufgebaut ist. Es handelt sich um reine Beispieldaten ohne sinnvolle Interpretation :-).
https://www.herber.de/bbs/user/94382.xlsm
Hinweis: Ich habe das STRG-Blatt und das VBA-Projekt mit dem Passwort Oliver geschützt da ich das nachher auch so haben möchte damit mir niemand in den Formeln im STRG-Blatt rumfuhrwerkt.
Meine Idee war folgende:
1) Setzen der Filter beim Öffnen der Datei auf die Benutzernamen in "Diese Arbeitsmappe", dies funktioniert:
Private Sub Workbook_Open()
'Benutzernamen in Zelle C2 eintragen
Worksheets("STRG").Range("C2").Value = Application.UserName
' In den Berichtsfiltern auf den Wert aus Zelle C2 setzen
Worksheets("Geschaeft").PivotTables("PivotTable2").PivotFields("Mitarbeiter").ClearAllFilters
Worksheets("Geschaeft").PivotTables("PivotTable2").PivotFields("Mitarbeiter").CurrentPage = _
Worksheets("STRG").Range("C2").Value
Worksheets("Produkt").PivotTables("PivotTable1").PivotFields("Mitarbeiter").ClearAllFilters
Worksheets("Produkt").PivotTables("PivotTable1").PivotFields("Mitarbeiter").CurrentPage = _
Worksheets("STRG").Range("C2").Value
End Sub
2) im STRG-Blatt habe ich auf die Berichtsfilter referiert und mit einer Wenn-Dann-Funktion auf eine eigens erstellte Funktion Makro_starten zugegriffen die nur dann das Makro "Schließen" startet wenn der Berichtsfilter ungleich (Alle) oder dem Nutzernamen ist. Dieses Makro soll einfach das Workbook schließen ohne zu Speichern und ohne Abfrage zum Speichern.
Diese Funktion habe ich in Modul1 abgelegt.
Function Makro_starten()
'Makro Schließen aurufen
Call Schließen
End Function
Sub Schließen()
MsgBox "Makro Schließen wurde gestartet"
'ThisWorkbook.Close
End Sub
Ich habe zum Testen eine MsgBox eingefügt, wenn ich nur diese MsgBox nehme geht das Ganze auch. Kommentiere ich die Box jedoch aus und will nur das Workbook schließen geht es nicht. Alternativ wäre auch ok, wenn die Blätter "Geschaeft" oder "Produkt" gelöscht werden.
Kann mir jemand helfen? Ich wäre unendlich dankbar, da ich sicher schon 20 Stunden dran sitze und noch VBA-Anfänger bin.
Eine von vielen Alternativen die ich auch schon probiert habe:
-Sperren der Zellen in denen der Berichtsfilter liegt und die anderen Zellen sollen nicht gesperrt sein. Hier wurde ich aber überrascht dass man dennoch Filtern kann auch wenn die Zellen gesperrt sind.
-Die Feldlliste nicht mehr einblendbar einstellen
Viele Grüße
Oliver