Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1528to1532
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
Inhaltsverzeichnis

Auf Variable in VBA-Formel zugreifen

Auf Variable in VBA-Formel zugreifen
12.12.2016 12:03:26
Quacki
Hallo zusammen,
ich würde gerne eine Variable in Zelle N2 (Berichtsjahr) definieren. Über die VBA Programmierung möchte ich nunmehr die Zelle N2 auslesen und in einen Datenschnitt übertragen. D.h. konkret, ich gebe das Berichtsjahr "2015" vor und der Datenschnitt übernimmt diese dann und nimmt eine entsprechende Auswahl vor. Anhand meiner Formel will das aber nicht so richtig funktionieren.
Hier meine dafür erstelle Formel:

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

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Auf Variable in VBA-Formel zugreifen
12.12.2016 12:52:33
Michael
Hallo!
Hantieren mit Pivot-Objekten ist meiner Erfahrung nach selten trivial. In Ermangelung einer Bsp-Datei Deinerseits hier eine Bsp-Mappe von mir: https://www.herber.de/bbs/user/109992.xlsm
Tabelle1 enthält die Spieldaten, Tabelle2 die Pivot-Tabelle, das Makro liegt im Modul1. Das Makro setzt einen Datenschnitt auf das Feld "Jahr" gemäß des Inhalts der Zelle "N2" in Tabelle1.
Der Code:
Sub a()
Dim i As SlicerItem
With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
.ClearManualFilter
For Each i In .SlicerItems
With i
If .Name = Worksheets("Tabelle1").Range("N2").Value Then
.Selected = True
Else: .Selected = False
End If
End With
Next i
End With
End Sub
LG
Michael
Anzeige
AW: Auf Variable in VBA-Formel zugreifen
12.12.2016 14:38:26
Quacki
Hallo Michael,
vielen vielen Dank für deine Hilfe.
Die Pivot entspringt einer PowerPivot Datenbank. Kann es sein, dass er deshalb hier hängen bleibt:
For Each i In .SlicerItems
"Anwendungs- oder Objektdefinierter Fehler"
AW: Auf Variable in VBA-Formel zugreifen
12.12.2016 15:18:32
Michael
Achso, PowerPivot... noch weniger trivial ;-)
Dann lagst Du prinzipiell schon richtig, aber Du hast falsch zusammengesetzt:
Sub b()
Dim Ds As String
Ds = Worksheets("Tabelle1").Range("N2").Value
ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr").VisibleSlicerItemsList = Array( _
"[Tabelle1].[Jahr].&[" & Ds & "]")
End Sub
Passt?
LG
Michael
Anzeige
AW: Auf Variable in VBA-Formel zugreifen
13.12.2016 06:48:14
Quacki
Es funktioniert! Wirklich großartig. Ich bin dir sehr dankbar für deine Hilfe.
Eine letzte Frage in diesem Zusammenhang: Kann ich auch mehrere Filterkriterien vorgeben. In Zelle N2 kann ich jetzt ein Jahr vorgeben aber was ist, wenn ich zwei Jahre auswählen möchte?
AW: Auf Variable in VBA-Formel zugreifen
13.12.2016 09:27:56
Quacki
Habe etwas herumprobiert und es mit folgendem Befehl geschafft:
Dim Ds As String
Ds = Worksheets("Kosten_Pivot").Range("N2").Value
Dim De As String
De = Worksheets("Kosten_Pivot").Range("N6").Value
ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Jahr].&[" & Ds & "]", _
"[zwischentabellevorjahresvergleich].[Jahr].&[" & De & "]")
Anzeige
Ja, genau so! Freut mich, Danke fd Rückmldg., owT
13.12.2016 09:57:20
Michael
ein kleiner Haken
13.12.2016 10:13:46
Quacki
Allerdings gibt es einen kleinen Haken bei diesem Befehl, ich muss immer zwei Jahre vorgeben.
Manchmal benötige ich allerdings nur ein Jahr :/
AW: ein kleiner Haken
13.12.2016 12:22:33
Quacki
Über eine ordentliche if Kombination habe ich das Problem im Bereich der Kostenstellen wie folgt umgangen (allerdings nicht sonderlich elegant):
Sub Kostenstellen_anpassen()
Dim KST1 As String
KST1 = Worksheets("Kostenstellen_Region").Range("B3").Value
Dim KST2 As String
KST2 = Worksheets("Kostenstellen_Region").Range("B4").Value
Dim KST3 As String
KST3 = Worksheets("Kostenstellen_Region").Range("B5").Value
Dim KST4 As String
KST4 = Worksheets("Kostenstellen_Region").Range("B6").Value
Dim KST5 As String
KST5 = Worksheets("Kostenstellen_Region").Range("B7").Value
Dim KST6 As String
KST6 = Worksheets("Kostenstellen_Region").Range("B8").Value
Dim KST7 As String
KST7 = Worksheets("Kostenstellen_Region").Range("B9").Value
Dim KST8 As String
KST8 = Worksheets("Kostenstellen_Region").Range("B10").Value
Dim KST9 As String
KST9 = Worksheets("Kostenstellen_Region").Range("B11").Value
Dim KST10 As String
KST10 = Worksheets("Kostenstellen_Region").Range("B12").Value
Dim KST11 As String
KST11 = Worksheets("Kostenstellen_Region").Range("B13").Value
Dim KST12 As String
KST12 = Worksheets("Kostenstellen_Region").Range("B14").Value
Dim KST13 As String
KST13 = Worksheets("Kostenstellen_Region").Range("B15").Value
Dim KST14 As String
KST14 = Worksheets("Kostenstellen_Region").Range("B16").Value
Dim KST15 As String
KST15 = Worksheets("Kostenstellen_Region").Range("B17").Value
Dim KST16 As String
KST16 = Worksheets("Kostenstellen_Region").Range("B18").Value
Dim KST17 As String
KST17 = Worksheets("Kostenstellen_Region").Range("B19").Value
Dim KST18 As String
KST18 = Worksheets("Kostenstellen_Region").Range("B20").Value
Dim KST19 As String
KST19 = Worksheets("Kostenstellen_Region").Range("B21").Value
Dim KST20 As String
KST20 = Worksheets("Kostenstellen_Region").Range("B22").Value
Dim KST21 As String
KST21 = Worksheets("Kostenstellen_Region").Range("B23").Value
Dim KST22 As String
KST22 = Worksheets("Kostenstellen_Region").Range("B24").Value
If KST2 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]")
GoTo Zeile1
Else
If KST3 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]")
GoTo Zeile1
Else
If KST4 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]")
GoTo Zeile1
Else
If KST5 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST4 & "]")
GoTo Zeile1
Else
If KST6 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST4 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST5 & "]")
GoTo Zeile1
Else
If KST7 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST4 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST5 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST6 & "]")
GoTo Zeile1
Else
If KST8 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST4 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST5 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST6 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST7 & "]")
GoTo Zeile1
Else
If KST9 = "" Then
ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle").VisibleSlicerItemsList = Array _
( _
"[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST1 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST2 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST3 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST4 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST5 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST6 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST7 & "]" _
, "[zwischentabellevorjahresvergleich].[Kostenstelle].&[" & KST8 & "]")
GoTo Zeile1
Zeile1:
End If
End If
End If
End If
End If
End If
End If
End If
MsgBox ("Fertig")
End Sub

Anzeige
Du könntest das auch so lösen...
13.12.2016 13:00:01
Michael
Quacki,
Sub a()
Const PRE As String = "[zwischentabellevorjahresvergleich].[Kostenstelle].&["
Const SUF As String = "]"
Const SEPP As String = ", "
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Kostenstellen_Region")
Dim KstBereich As Range, a, i As Long, KSTs As String
With Ws
Set KstBereich = .Range("B3:B24")
a = Application.Transpose(KstBereich)
For i = LBound(a) To UBound(a)
If a(i)  vbNullString Then
KSTs = KSTs & PRE & a(i) & SUF & SEPP
End If
Next i
KSTs = Left(KSTs, Len(KSTs) - 1)
End With
With ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle")
.VisibleSlicerItemsList = Array(KSTs)
End With
End Sub
Ungetestet, aber vom Prinzip sollte es reichen.
LG
Michael
Anzeige
AW: Du könntest das auch so lösen...
13.12.2016 13:48:33
Quacki
Dies habe ich versucht. Allerdings erhalte ich hierbei einen Laufzeitfehler "Typen unverträglich"
With ActiveWorkbook.SlicerCaches("Datenschnitt_Kostenstelle")
.VisibleSlicerItemsList = Array(KSTs)
End With
AW: Du könntest das auch so lösen...
13.12.2016 14:19:58
Quacki
Wenn du mir hierbei nochmal behilflich sein könntest wäre das super nett.
Dann wäre ich mit meinem Vorhaben fertig!
Kann ich mir erst Freitag wieder anschauen...
13.12.2016 16:36:49
Michael
... Bin bis dahin nicht mehr im Forum!
Lg
Michael
Das reicht auch...
16.12.2016 08:27:51
Quacki
Danke schon mal!
AW: Das reicht auch...
16.12.2016 13:59:12
Michael
Hallo Quacki!
Da war ich auch schlampig; denn VisibleSlicerItemsList übernimmt die Parameterliste nicht als String; d.h. unsere schöne Verkettung bringt nix. Daher hier eine neue Version, welche die Datenschnitt-Parameter auch aus dem angegebenen Zellbereich übernimmt, aber in die Array-Form wandelt, die für VisibleSlicerItemsList gebraucht wird.
Bitte die PREfix-Konstante entsprechend Deiner Datei anpassen - ich musste das natürlich bei mir in "Tabelle1" testen.
Sub a()
Const PRE As String = "[Tabelle1].[Jahr].&["
Const SUF As String = "]"
Const SPL As String = ","
Dim Wb As Workbook: Set Wb = ThisWorkbook
Dim Ws As Worksheet: Set Ws = Wb.Worksheets("Kostenstellen_Region")
Dim KstBereich As Range, c As Range, i As Long, a, b
With Ws
Set KstBereich = .Range("B3:B24")
ReDim a(0 To KstBereich.Cells.Count)
For Each c In KstBereich
If c.Value  vbNullString Then
a(i) = PRE & c.Value & SUF & SPL
i = i + 1
End If
Next c
ReDim Preserve a(i)
End With
b = Split(Join(a, vbNullString), SPL)
ReDim Preserve b(UBound(b) - 1)
ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr").VisibleSlicerItemsList = b
End Sub
Ist getestet und läuft in meiner (Test-) Umgebung einwandfrei. Rückmeldung würde mich freuen, war nicht ganz trivial.
LG
Michael
Anzeige

333 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige