Auf Variablen in VBA-Formeln zugreifen
Schritt-für-Schritt-Anleitung
Um auf eine Variable in einer VBA-Formel zuzugreifen und den Wert aus einer Zelle in einen Datenschnitt zu übertragen, kannst du folgende Schritte befolgen:
-
Öffne Excel und drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Erstelle ein neues Modul:
- Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)".
- Wähle "Einfügen" > "Modul".
-
Füge den folgenden Code ein:
Sub Mitarbeiter()
' Mitarbeiter Makro
Dim Variable As Variant
Variable = Worksheets("Bericht").Range("N2").Value
ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Jahr].&[Variable]")
End Sub
-
Stelle sicher, dass der Datenschnitt den Namen "Datenschnitt_Jahr" hat.
-
Ändere den Wert in Zelle N2 auf das gewünschte Jahr und führe das Makro aus.
Häufige Fehler und Lösungen
- Anwendungs- oder objektdefinierter Fehler: Dieser Fehler tritt häufig auf, wenn der Datenschnitt auf einer PowerPivot-Tabelle basiert. Stelle sicher, dass die SlicerItems korrekt referenziert werden.
- Laufzeitfehler "Typen unverträglich": Dies kann passieren, wenn du versuchst, die VisibleSlicerItemsList mit einer falschen Datentyp-Übertragung zu setzen. Achte darauf, dass die Parameter in der richtigen Form übergeben werden.
Alternative Methoden
Eine alternative Methode, um mehrere Filterkriterien für den Datenschnitt zu definieren, besteht darin, die Werte aus verschiedenen Zellen auszulesen:
Sub FilterMultipleYears()
Dim Ds As String
Dim De As String
Ds = Worksheets("Kosten_Pivot").Range("N2").Value
De = Worksheets("Kosten_Pivot").Range("N6").Value
ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr").VisibleSlicerItemsList = Array( _
"[zwischentabellevorjahresvergleich].[Jahr].&[" & Ds & "]", _
"[zwischentabellevorjahresvergleich].[Jahr].&[" & De & "]")
End Sub
Praktische Beispiele
Hier ist ein Beispiel für ein komplexeres Szenario, bei dem mehrere Kostenstellen gefiltert werden:
Sub Kostenstellen_anpassen()
Dim KSTs As String
Dim KSTBereich As Range
Dim c As Range
Set KSTBereich = Worksheets("Kostenstellen_Region").Range("B3:B24")
For Each c In KSTBereich
If c.Value <> vbNullString Then
KSTs = KSTs & "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & c.Value & "], "
End If
Next c
KSTs = Left(KSTs, Len(KSTs) - 2) ' Entferne das letzte Komma und Leerzeichen
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Split(KSTs, ", ")
End Sub
Tipps für Profis
-
Verwende Konstanten für häufig verwendete Strings, um den Code lesbarer zu machen:
Const PRE As String = "[zwischentabellevorjahresvergleich].[Kostenstelle].&["
-
Überprüfe die Namen der Arbeitsblätter und Datenschnitte sorgfältig, um Tippfehler zu vermeiden.
-
Teste Deinen Code regelmäßig, um sicherzustellen, dass er in verschiedenen Szenarien funktioniert.
FAQ: Häufige Fragen
1. Kann ich auch Werte aus mehreren Zellen gleichzeitig verwenden?
Ja, du kannst mehrere Zellen auslesen und diese in einem Array für die VisibleSlicerItemsList verwenden.
2. Was mache ich, wenn ich einen Fehler beim Ausführen des Makros erhalte?
Überprüfe die Referenzen auf die Zellen und Datenschnitte, stelle sicher, dass sie korrekt benannt sind und dass die Zellen die erwarteten Werte enthalten.