• Startseite
  • Produkte
  • Jetzt
  • Buchnotizen
  • Lebenslauf
  • Unternehmensberatung
  • Spiele
  • Click to open the search input field Click to open the search input field Suche
  • Menü Menü
Denis Reis
  • Link zu X
  • Link zu Facebook
  • Link zu Xing
  • Link zu LinkedIn
  • Link zu Rss dieser Seite
  • Link zu Mail
BPC

How To BPC – Variablenübergabe an ScriptLogic DataPackages aus Excel

Die DataPackages, auch Berichtspakete genannt, haben sehr viele Parameter. So muss der Benutzer jedes Mal, wenn er eine Kopier-Funktion aufruft, festlegen wie die Datensätze gehandhabt werden, ob nach der Kopie die Standard-Script Logic ausgeführt werden soll. Danach wird er gefragt ob eventuelle Datensperren (Work Status) berücksichtigt werden sollen. Anschließend muss er die Quell- und die Zielwerte eingeben.

Bringen Sie die Analyse- und Reporting-Funktionen von SAP Analytics Cloud in Ihre gewohnte Microsoft Office-Umgebung! Mit meinem neuen Buch lernen Sie, das SAP Analytics Cloud Add-in in Excel und PowerPoint einzusetzen, Daten in Echtzeit zu analysieren und ansprechende Berichte sowie Präsentationen zu erstellen.

DataPackage - Eingabe der Werte

Quell- und Zielwerte definieren

Schließlich muss der User entscheiden, ob das DataPackage sofort oder später ausgeführt werden soll. Obwohl SAP damit wirbt, dass BPC sehr benutzerfreundlich ist, ist der durchschnittliche Fachbereich schnell überfordert. Falsch gesetzte Parameter können leicht zu unerwünschten Ergebnissen führen.
Nun könnten Sie das Standardpaket kopieren und das Skript so anpassen, dass die User es leichter verstehen.

Skript eines Pakets anpassen

DataPackage Skript ändern

Allerdings muss sich der User dann trotzdem durch mehrere Screens durchklicken, obwohl er einfach von einer Version in die andere kopieren will.
In diesem Beitrag zeige ich Ihnen eine elegantere Lösung. Der Benutzer kann die Quell- und Zielversion über Dropdowns auswählen und die Funktion über ein Button ausführen.

Versionen können über Dropdown ausgewählt werden

Unser Ziel

Der Weg dahin führt über mehrere Stationen. Neben unserer Tabelle mit der Auswahl haben wir eine Tabelle mit den Bereichen PARAMETERS und PACKAGE.
Der Bereich PARAMETERS enthält alle Parameter für die jeweilge Funktion mit den zugehörigen Werten.

PARAMETERS Bereich

PARAMETERS Bereich

Der Bereich PACKAGE enthält die Angaben zu der DataPackage die ausgeführt werden soll. Die SAP legt beim Aufruf eines DataPackages eine XML-Datei namens DMUserSelection.xml mit den Parametern an. Wir legen unsere eigene Datei für diese Zwecke an. Daher wird im PACKAGE Bereich auch der Name für die Datei angegeben, die die Werte für die Eingabeaufforderung (Prompt) enthält.

PACKAGE Bereich

PACKAGE Bereich

Über ein Button wird das VBA Makro aufgerufen, welches das in PACKAGE definierte DataPackage mit den in PARAMETERS definierten Parametern versorgt.

Zunächst legen den Bereich PARAMETERS für die Parameter an.
Das Standardpackage Copy erwartet folgende Parameter:

  • CLEARDATA – enthält 0 oder 1. Standardeinstellung ist 0.
  • RUNLOGIC – enthält 0 oder 1. Standardeinstellung ist 0.
  • CHECKLCK – enthält 0 oder 1. Standardeinstellung ist 1.
  • SELECTION – Dimensionen und Member die den Datenbereich der Quelle festlegen.
  • TOSELECTION – Dimensionen und Member die den Datenbereich des Ziels festlegen. Dimensionen werden über die Konstante DIMS festgelegt. Den Inhalt können Sie in Berichtspaketeinstellungen unter Konstanten sehen.
DataPackage Script

Einstellungen des Berichtspakets

Diese Informationen können Sie der jeweiligen Skriptdatei entnehmen. Gehen Sie dabei wie folgt vor.
Wählen Sie im EPM AddIn den Reiter Daten-Manager aus. Gehen Sie anschließend auf Organisieren → Berichtspaketliste organisieren.

Daten-Manager Pakete organisieren

Berichtspaketliste organisieren

Wählen Sie nun das Berichtspaket (DataPackage), in unserem Beispiel ist es Copy, mit Rechtsklick aus und wählen Sie Berichtspaket ändern aus.

DataPackage anpassen

Berichtspaket ändern

Wählen Sie anschließend Skript ändern aus und klicken Sie im folgenden Fenster oben rechts auf Erweitert.

DataPackage Skript anpassen

Skript des Berichtspakets ändern

Sie sehen nun das Skript für die Berichtspaket Prozesskette mit allen Parametern. Diese Parameter übernehmen wir in unseren Excel Bereich PARAMETERS.
Erstellen Sie im neuen Reiter eine Tabelle mit dem folgenden Aufbau.

Aufbau PARAMETERS

Aufbau von PARAMETERS

Die Promptnamen sollten mit denen im Skript übereinstimmen, inklusive %-Zeichen. Zum Beispiel %CLEARDATA%. Prompt Typ kann entweder ein Parameter (z.B. Ladeeinstellungen) oder StringListPairs (Variablen) sein. Dimensionen sind nur für StringListPairs relevant. Als Wert tragen Sie den Wert ein, den das jeweilige Merkmal annehmen soll. Diese können hardgecodet sein oder über Formeln auf Usereingaben beziehen.
Dabei können Sie EPM-Formeln oder auch ganz normale Excel-Bezüge nutzen. In unserem Beispiel beziehe ich mich auf die Dropdown-Felder.
Als nächstes legen wir einen Bereich an. Markieren Sie dazu alle Zellen (A1 bis D20). Tragen Sie in das Namenfeld oben links PARAMETERS ein und drücken Sie ENTER.

Bereich benennen

Bereich benennen

Wir haben nun erfolgreich einen Bereich für die Parameter erstellt.
Im nächsten Schritt legen wir den PACKAGE Bereich an. Die notwendigen Infos sind in der Tabelle UJD_PACKAGES2 abgelegt. Um an die notwendigen Informationen zu kommen müssen wir uns zunächst in SAP GUI einlogen. Rufen Sie anschließend die Transaktion SE16 (Data Browser) auf. Geben Sie UJD_PACKAGES2 als Tabellennamen an.

TA SE16 Data Browser

Data Browser

Geben Sie im nächsten Screen APPSET_ID (Ihre Umgebung) sowie die APP_ID (Ihr Model / Cube) ein und drücken Sie Ausführen (F8).
Sie sehen nun alle Berichtpakete für Ihren Cube. Suchen Sie nach der PACKAGE_ID Copy. Selektieren Sie die Zeile und drücken Sie auf Anzeigen (F7).

Inhalt der Tabelle UJD_PACKAGES2

Einträge der Tabelle UJD_PACKAGES2

Sie sehen nun alle Informationen die wir für den PACKAGE Bereich benötigen.

Informationen über das DataPackage

Details für den PACKAGE Bereich

Tragen Sie diese Infos in die Excel Tabelle nach dem folgenden Muster ein:

UJD_PACKAGES2 Feld Excel Feld Beispiel
CHAIN ID Filename /CPMB/COPY
GROUP ID GroupId Data Management
PACKAGE ID PackageDesc Copy
PACKAGE ID PackageId Copy
PACKAGE TYPE PackageType Process Chain
TEAM ID TeamID <leer>
USER GROUP UserGroup 0010

Beachten Sie dabei, dass das Feld UserGroup als vierstelliges Feld mit führenden Nullen eingetragen werden muss. Darüber hinaus beinhaltet das Feld PromptFile den Pfad für die Datei, die auf dem PC von allen Benutzern existieren muss. Zum Beispiel C:\DataManagerPromptFile.txt.
Legen Sie nun den PACKAGE Bereich an.

Wählen Sie nun die Felder aus (F1 bis G9), tragen Sie PACKAGE im Namensbereich ein und drücken Sie ENTER.


SAP Analytics Cloud für Microsoft Office - Das Praxishandbuch

Moderne Berichte und Präsentationen mit SAP Analytics Cloud Daten!

Bringen Sie die Analyse- und Reporting-Funktionen von SAP Analytics Cloud in Ihre gewohnte Office-Umgebung! In diesem Handbuch zeige ich Ihnen, wie Sie das Add-in für Excel und PowerPoint nutzen, um in Echtzeit auf aktuelle Daten zuzugreifen, diese zu analysieren sowie in Berichten und Präsentationen zu verwenden.

Jetzt anfordern!

Im nächsten Schritt legen wir den Visual Basic Code an. Wie man ein VBA Makro anlegt beschreibe ich in dem Beitrag Excel VBA Grundlagen. In der Entwicklungsumgebung (ALT+F11), gehen Sie auf Extras → Verweise (engl. Tools → References) und wählen Sie die folgenden Einträge aus.

VBA Referenzen

VBA Verweise

Legen Sie nun ein neues Modul an und fügen Sie das folgende Coding ein:

Public Sub executeDmPackageWithParameters()
' Create the Answer Prompt file in the location
' specified in the Name Range "PACKAGE"
createAnswerPromptFile "PACKAGE", "PARAMETERS"
' Get the DM Automation class instance
Dim objDMautomation As EPMAddInDMAutomation
Set objDMautomation = New EPMAddInDMAutomation
' Run the package specified in Excel Name Range "PACKAGE",
' using the promtp file specified in Name Range "PACKAGE"
objDMautomation.RunPackage objPackageFromSheet("PACKAGE"), _
strFilename("PACKAGE")
End Sub
Private Function strFilename(strRange As String) As String
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
If rngPackageRange(i, 1).Value = "PromptFile" Then
strFilename = rngPackageRange(i, 2).Value
Exit Function
End If
Next
End Function
Private Function strPackageDescription(strRange As String) As String
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
If rngPackageRange(i, 1).Value = "PackageId" Then
strPackageDescription = rngPackageRange(i, 2).Value
Exit Function
End If
Next
End Function
Private Function objPackageFromSheet(strRange As String) As ADMPackage
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Create the ADM Package object
Set objPackageFromSheet = New ADMPackage
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
Select Case rngPackageRange(i, 1).Value
Case "Filename"
objPackageFromSheet.Filename = rngPackageRange(i, 2).Value
Case "GroupId"
objPackageFromSheet.GroupId = rngPackageRange(i, 2).Value
Case "PackageDesc"
objPackageFromSheet.PackageDesc = rngPackageRange(i, 2).Value
Case "PackageId"
objPackageFromSheet.PackageId = rngPackageRange(i, 2).Value
Case "PackageType"
objPackageFromSheet.PackageType = rngPackageRange(i, 2).Value
Case "TeamId"
objPackageFromSheet.TeamId = rngPackageRange(i, 2).Value
Case "UserGroup"
objPackageFromSheet.UserGroup = rngPackageRange(i, 2).Value
End Select
Next
End Function
Private Sub createAnswerPromptFile(strPackageName As String, _
strParametersName As String)
' Create a new XML document
Dim objDOM As DOMDocument
Set objDOM = New DOMDocument
' Set the processing instruction of the XML document
Dim objProcessingInstruction As IXMLDOMProcessingInstruction
Set objProcessingInstruction = _
objDOM.createProcessingInstruction("xml", _
" version='1.0' encoding='utf-16'")
objDOM.appendChild objProcessingInstruction
' Create root element
Dim objRootElem As IXMLDOMElement
Set objRootElem = objDOM.createElement("ArrayOfAnswerPromptPersistingFormat")
objDOM.appendChild objRootElem
' XSI Attribute
Dim objMemberRel As IXMLDOMAttribute
Set objMemberRel = objDOM.createAttribute("xmlns:xsi")
objMemberRel.NodeValue = "https://www.w3.org/2001/XMLSchema-instance"
objRootElem.setAttributeNode objMemberRel
' XSD Attribute
Set objMemberRel = objDOM.createAttribute("xmlns:xsd")
objMemberRel.NodeValue = "https://www.w3.org/2001/XMLSchema"
objRootElem.setAttributeNode objMemberRel
' Get the range of cells containing the parameters
Dim rngParameters As Range
Set rngParameters = ThisWorkbook.Names(strParametersName).RefersToRange
'Excel.Names(strParametersName).RefersToRange
'
Dim objCurrentStringPairParent As IXMLDOMElement
' Loop through each row
For i = 1 To rngParameters.Rows.Count
' See which type of parameter is being passed
Select Case rngParameters(i, 2).Value
' If it is a single Parameter, then add a parameter node to the root node
Case "Parameter"
addSingleSelectionParameterToXML rngParameters(i, 1).Value, _
rngParameters(i, 4).Value, _
objRootElem, _
objDOM
' If it is a list of values
Case "StringListPairs"
' If it's a new set of String List Pairs, then create a new parent
If rngParameters(i, 1).Value <> strCurrentStringPair Then
strCurrentStringPair = rngParameters(i, 1).Value
Set objCurrentStringPairParent = _
getStringListPairParent(rngParameters(i, 1).Value, _
objRootElem, _
objDOM)
End If
' Add the Dimension Name and Value to the parent
addStringListPair rngParameters(i, 3).Value, _
rngParameters(i, 4).Value, _
objCurrentStringPairParent, _
objDOM
End Select
Next
' Create the File object
Dim objFile As FileSystemObject
Set objFile = New FileSystemObject
' Create a stream to create and write to the file
Dim objStream As TextStream
Set objStream = objFile.OpenTextFile(strFilename(strPackageName), _
ForWriting, True)
' Write the name of the DM package first and then the XML output
objStream.WriteLine strPackageDescription(strPackageName) & _
"{param_separator}" & _
objDOM.XML
' Close the file
objStream.Close
End Sub

Private Function addStringListPair(strVariableName As String, _
strValue As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument)
' Create the "StringListPair" node
Dim objStringListPairElement As IXMLDOMElement
Set objStringListPairElement = _
objDOM.createElement("StringListPair")
objParent.appendChild objStringListPairElement
' Create the "Str" element containing the variable name
Dim objStrElement As IXMLDOMElement
Set objStrElement = objDOM.createElement("str")
objStringListPairElement.appendChild objStrElement
objStrElement.Text = strVariableName
' Create the "lst" element
Dim objLstElement As IXMLDOMElement
Set objLstElement = objDOM.createElement("lst")
objStringListPairElement.appendChild objLstElement
' Create the "string" element containing the variable value
Dim objStringElement As IXMLDOMElement
Set objStringElement = objDOM.createElement("string")
objLstElement.appendChild objStringElement
objStringElement.Text = strValue
End Function
Private Function getStringListPairParent(strVariableName As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument) As IXMLDOMElement
' Create the "AnswerPromptPersistingFormat" node
Dim objAnswerPromptPersistingFormatElement As IXMLDOMElement
Set objAnswerPromptPersistingFormatElement = _
objDOM.createElement("AnswerPromptPersistingFormat")
objParent.appendChild objAnswerPromptPersistingFormatElement
' Create the "_ap" node
Dim objApElement As IXMLDOMElement
Set objApElement = objDOM.createElement("_ap")
objAnswerPromptPersistingFormatElement.appendChild objApElement
' Create the parameter name element
Dim objParameterElement As IXMLDOMElement
Set objParameterElement = objDOM.createElement("Name")
objApElement.appendChild objParameterElement
objParameterElement.Text = strVariableName
' Create the values element
Dim objValuesElement As IXMLDOMElement
Set objValuesElement = objDOM.createElement("Values")
objApElement.appendChild objValuesElement
' Create the "_apc" node
Set getStringListPairParent = objDOM.createElement("_apc")
objAnswerPromptPersistingFormatElement.appendChild getStringListPairParent
End Function

Private Function addSingleSelectionParameterToXML(strVariableName As String, _
strValue As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument)
' Create the "AnswerPromptPersistingFormat" node
Dim objAnswerPromptPersistingFormatElement As IXMLDOMElement
Set objAnswerPromptPersistingFormatElement = _
objDOM.createElement("AnswerPromptPersistingFormat")
objParent.appendChild objAnswerPromptPersistingFormatElement
' Create the "_ap" node
Dim objApElement As IXMLDOMElement
Set objApElement = objDOM.createElement("_ap")
objAnswerPromptPersistingFormatElement.appendChild objApElement
' Create the parameter name element
Dim objParameterElement As IXMLDOMElement
Set objParameterElement = objDOM.createElement("Name")
objApElement.appendChild objParameterElement
objParameterElement.Text = strVariableName
' Create the values element
Dim objValuesElement As IXMLDOMElement
Set objValuesElement = objDOM.createElement("Values")
objApElement.appendChild objValuesElement
' Create the string element with the value passed to the parameter
Dim objStringElement As IXMLDOMElement
Set objStringElement = objDOM.createElement("string")
objValuesElement.appendChild objStringElement
objStringElement.Text = strValue
End Function

Legen Sie nun die Dropdowns und den Button für VBA an. Über diesen Button rufen Sie das Makro executeDmPackageWithParameters aus.
Das Datenpaket wird nun ausgeführt. Betrachten Sie den Status indem Sie auf Daten-Manager → Status anzeigen gehen. Die Daten wurden erfolgreich kopiert.

Sie wissen nun wie Sie Standardfunktionen mit Variablen füttern können.
Betrachten wir im nächsten Schritt eigene Skript Logiken die über ein DataPackage ausgeführt werden. Da werden die Variablen zum Beispiel über PROMPT %CATEGORY_DIM% oder COMPCODE (Für Kundeneigene Dimensionen) angefordert, anschließend verwenden wir in der Logik %CATEGORY_SET%.
So sieht mein DataPackage aus

PROMPT(SELECTINPUT,,,,"%CATEGORY_DIM%,COMPCODE,SAORG")
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SUSER,%USER%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPPSET,%APPSET%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPP,PSX_PLAN)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SELECTION,%SELECTION%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,LOGICFILENAME,DIR_STRAT.LGF)

In meiner RUNALLOCATION ScriptLogic verteile ich die Planwerte anhand der Ist-Werte des Vorjahres.

*XDIM_MEMBERSET ACCOUNT = SAAMO
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_ADDMEMBERSET CATEGORY = ACTUAL
*XDIM_MEMBERSET COMPCODE = %COMPCODE_SET%
*XDIM_MEMBERSET SAORG = %SAORG_SET%
*XDIM_MEMBERSET SAOFF = 
*XDIM_MEMBERSET DICHA = 
*XDIM_MEMBERSET PRODH1 = 
*XDIM_MEMBERSET PRODUCT = 
*XDIM_MEMBERSET INPUTCURRENCY = EUR
*XDIM_MEMBERSET TIME = BAS(%YEAR%.TOTAL)
*XDIM_ADDMEMBERSET TIME = BAS(%YEAR%(-1).TOTAL)

*RUNALLOCATION
*FACTOR = USING/TOTAL

*DIM ACCOUNT         WHAT = SAAMO;    WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM CATEGORY        WHAT = %CATEGORY_SET%;      WHERE = <<<;       USING = ACTUAL;          TOTAL = <<<;
*DIM COMPCODE        WHAT = %COMPCODE_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAORG           WHAT = %SAORG_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAOFF           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM DICHA           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODH1          WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODUCT         WHAT = NONE;     WHERE = NONE;  USING = BAS(ALL);        TOTAL = <<<;
*DIM INPUTCURRENCY   WHAT = EUR;      WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM TIME            WHAT = BAS(%YEAR%.TOTAL); WHERE = <<<;       USING = BAS(%YEAR%(-1).TOTAL); TOTAL = <<<;

*ENDALLOCATION

Wenn ich nun diese ScriptLogic über ein DataPackage aufrufen will, muss ich die Variablen noch einmal eingeben. Das ist natürlich kein Zustand.

Variablenwerte müssen vom User ausgewählt werden

Auswahl der Variablen

Sie kennen jetzt einen Weg um dieses Problem zu lösen. Als erstes legen wir unseren PARAMETERS Bereich an.
Die Werte für die zu füllenden Variablen lesen wir mithilfe der EPM-Formel EPMContextMember aus.

Im nächsten Schritt legen wir den PACKAGE Bereich mit den Infos aus der Tabelle UJD_PACKAGES2 an.

PACKAGE Bereich für ScriptLogic

ScriptLogic PACKAGE Bereich

Als nächsten aktivieren wir die Verweise und legen ein Modul mit dem Coding an. Danach triggern wir das executeDmPackageWithParameters Makro über ein Button. Et voilà ! Das DataPackage mit unserer ScriptLogic wird ausgeführt.

Was ist aber, wenn wir auch die Version für Referenzdaten (in unserem Beispiel ACTUAL) variabel setzen wollen? Dazu können wir die Formelvariablen benutzen. Zunächst müssen wir unsere ScriptLogic Verteilungsfunktion anpassen und die Variable $VAR_CAT$ hinzufügen.

 *XDIM_MEMBERSET ACCOUNT = SAAMO
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_ADDMEMBERSET CATEGORY = $VAR_CAT$
*XDIM_MEMBERSET COMPCODE = %COMPCODE_SET%
*XDIM_MEMBERSET SAORG = %SAORG_SET%
*XDIM_MEMBERSET SAOFF = <ALL>
*XDIM_MEMBERSET DICHA = <ALL>
*XDIM_MEMBERSET PRODH1 = <ALL>
*XDIM_MEMBERSET PRODUCT = <ALL>
*XDIM_MEMBERSET INPUTCURRENCY = EUR
*XDIM_MEMBERSET TIME = BAS(%YEAR%.TOTAL)
*XDIM_ADDMEMBERSET TIME = BAS(%YEAR%(-1).TOTAL)

*RUNALLOCATION
*FACTOR = USING/TOTAL

*DIM ACCOUNT         WHAT = SAAMO;    WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM CATEGORY        WHAT = %CATEGORY_SET%;      WHERE = <<<;       USING = $VAR_CAT$;          TOTAL = <<<;
*DIM COMPCODE        WHAT = %COMPCODE_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAORG           WHAT = %SAORG_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAOFF           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM DICHA           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODH1          WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODUCT         WHAT = NONE;     WHERE = NONE;  USING = BAS(ALL);        TOTAL = <<<;
*DIM INPUTCURRENCY   WHAT = EUR;      WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM TIME            WHAT = BAS(%YEAR%.TOTAL); WHERE = <<<;       USING = BAS(%YEAR%(-1).TOTAL); TOTAL = <<<;

*ENDALLOCATION

Die Variable $VAR_CAT$ muss durch das DataPackage (Berichtspaket) übergeben werden.
Daher passen wir im nächsten Schritt das Skript des Berichtspakets an.

PROMPT(SELECTINPUT,,,,"%CATEGORY_DIM%,COMPCODE,SAORG")
PROMPT(TEXT, %VAR_CAT%, "Version der Referenzwerte",). 

INFO(%EQU%,=)

TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SUSER,%USER%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPPSET,%APPSET%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPP,PSX_PLAN)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SELECTION,%SELECTION%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,LOGICFILENAME,TEST.LGF)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,REPLACEPARAM,VAR_CAT%EQU%%VAR_CAT%)

Neben unseren alten Variablen soll nun auch die Variable %VAR_CAT% gefüllt werden. Diese muss dann in das Format der ScriptLogic (allerdings ohne $) übersetzt werden.
Dies geschieht in der letzten Zeile des Codes.
Im nächsten Schritt erweitern wir unseren PARAMETERS Bereich. Den Namensbereich können Sie im Reiter Formeln → Namens-Manager ändern.

PARAMETRS Bereich wird um Variablen erweitert

Zusätzlicher Prompt Typ – Variable

Um den zusätzlichen Prompt Typ verarbeiten zu können, müssen wir unsere VBA Logik ändern. Glücklicherweise stimmt die XML-Syntax für Variablen mit der der Parameter überein. Wir können also dieselbe Methode addSingleSelectionParameterToXML nutzen. Erweitern Sie einfach das Makro createAnswerPromptFile um eine zusätzliche CASE Abfrage.

' If it is a single variable, then add a variable node to the root node
Case "Variable"
addSingleSelectionParameterToXML rngParameters(i, 1).Value, _
rngParameters(i, 4).Value, _
objRootElem, _
objDOM

Zur Sicherheit nochmal das gesamte Coding:

 Public Sub executeDmPackageWithParameters()
' Create the Answer Prompt file in the location
' specified in the Name Range "PACKAGE"
createAnswerPromptFile "PACKAGE", "PARAMETERS"
' Get the DM Automation class instance
Dim objDMautomation As EPMAddInDMAutomation
Set objDMautomation = New EPMAddInDMAutomation
' Run the package specified in Excel Name Range "PACKAGE",
' using the promtp file specified in Name Range "PACKAGE"
objDMautomation.RunPackage objPackageFromSheet("PACKAGE"), _
strFilename("PACKAGE")
End Sub
Private Function strFilename(strRange As String) As String
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
If rngPackageRange(i, 1).Value = "PromptFile" Then
strFilename = rngPackageRange(i, 2).Value
Exit Function
End If
Next
End Function
Private Function strPackageDescription(strRange As String) As String
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
If rngPackageRange(i, 1).Value = "PackageId" Then
strPackageDescription = rngPackageRange(i, 2).Value
Exit Function
End If
Next
End Function
Private Function objPackageFromSheet(strRange As String) As ADMPackage
' Get the range in which the DM package paramteres is set
Dim rngPackageRange As Range
Set rngPackageRange = Application.Names(strRange).RefersToRange
' Create the ADM Package object
Set objPackageFromSheet = New ADMPackage
' Loop through the rows
For i = 1 To rngPackageRange.Rows.Count
Select Case rngPackageRange(i, 1).Value
Case "Filename"
objPackageFromSheet.Filename = rngPackageRange(i, 2).Value
Case "GroupId"
objPackageFromSheet.GroupId = rngPackageRange(i, 2).Value
Case "PackageDesc"
objPackageFromSheet.PackageDesc = rngPackageRange(i, 2).Value
Case "PackageId"
objPackageFromSheet.PackageId = rngPackageRange(i, 2).Value
Case "PackageType"
objPackageFromSheet.PackageType = rngPackageRange(i, 2).Value
Case "TeamId"
objPackageFromSheet.TeamId = rngPackageRange(i, 2).Value
Case "UserGroup"
objPackageFromSheet.UserGroup = rngPackageRange(i, 2).Value
End Select
Next
End Function
Private Sub createAnswerPromptFile(strPackageName As String, _
strParametersName As String)
' Create a new XML document
Dim objDOM As DOMDocument
Set objDOM = New DOMDocument
' Set the processing instruction of the XML document
Dim objProcessingInstruction As IXMLDOMProcessingInstruction
Set objProcessingInstruction = _
objDOM.createProcessingInstruction("xml", _
" version='1.0' encoding='utf-16'")
objDOM.appendChild objProcessingInstruction
' Create root element
Dim objRootElem As IXMLDOMElement
Set objRootElem = objDOM.createElement("ArrayOfAnswerPromptPersistingFormat")
objDOM.appendChild objRootElem
' XSI Attribute
Dim objMemberRel As IXMLDOMAttribute
Set objMemberRel = objDOM.createAttribute("xmlns:xsi")
objMemberRel.NodeValue = "https://www.w3.org/2001/XMLSchema-instance"
objRootElem.setAttributeNode objMemberRel
' XSD Attribute
Set objMemberRel = objDOM.createAttribute("xmlns:xsd")
objMemberRel.NodeValue = "https://www.w3.org/2001/XMLSchema"
objRootElem.setAttributeNode objMemberRel
' Get the range of cells containing the parameters
Dim rngParameters As Range
Set rngParameters = ThisWorkbook.Names(strParametersName).RefersToRange
'Excel.Names(strParametersName).RefersToRange
'
Dim objCurrentStringPairParent As IXMLDOMElement
' Loop through each row
For i = 1 To rngParameters.Rows.Count
' See which type of parameter is being passed
Select Case rngParameters(i, 2).Value
' If it is a single Parameter, then add a parameter node to the root node
Case "Parameter"
addSingleSelectionParameterToXML rngParameters(i, 1).Value, _
rngParameters(i, 4).Value, _
objRootElem, _
objDOM
' If it is a list of values
Case "StringListPairs"
' If it's a new set of String List Pairs, then create a new parent
If rngParameters(i, 1).Value <> strCurrentStringPair Then
strCurrentStringPair = rngParameters(i, 1).Value
Set objCurrentStringPairParent = _
getStringListPairParent(rngParameters(i, 1).Value, _
objRootElem, _
objDOM)
End If
' Add the Dimension Name and Value to the parent
addStringListPair rngParameters(i, 3).Value, _
rngParameters(i, 4).Value, _
objCurrentStringPairParent, _
objDOM
' If it is a single variable, then add a variable node to the root node
Case "Variable"
addSingleSelectionParameterToXML rngParameters(i, 1).Value, _
rngParameters(i, 4).Value, _
objRootElem, _
objDOM
End Select
Next
' Create the File object
Dim objFile As FileSystemObject
Set objFile = New FileSystemObject
' Create a stream to create and write to the file
Dim objStream As TextStream
Set objStream = objFile.OpenTextFile(strFilename(strPackageName), _
ForWriting, True)
' Write the name of the DM package first and then the XML output
objStream.WriteLine strPackageDescription(strPackageName) & _
"{param_separator}" & _
objDOM.XML
' Close the file
objStream.Close
End Sub

Private Function addStringListPair(strVariableName As String, _
strValue As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument)
' Create the "StringListPair" node
Dim objStringListPairElement As IXMLDOMElement
Set objStringListPairElement = _
objDOM.createElement("StringListPair")
objParent.appendChild objStringListPairElement
' Create the "Str" element containing the variable name
Dim objStrElement As IXMLDOMElement
Set objStrElement = objDOM.createElement("str")
objStringListPairElement.appendChild objStrElement
objStrElement.Text = strVariableName
' Create the "lst" element
Dim objLstElement As IXMLDOMElement
Set objLstElement = objDOM.createElement("lst")
objStringListPairElement.appendChild objLstElement
' Create the "string" element containing the variable value
Dim objStringElement As IXMLDOMElement
Set objStringElement = objDOM.createElement("string")
objLstElement.appendChild objStringElement
objStringElement.Text = strValue
End Function
Private Function getStringListPairParent(strVariableName As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument) As IXMLDOMElement
' Create the "AnswerPromptPersistingFormat" node
Dim objAnswerPromptPersistingFormatElement As IXMLDOMElement
Set objAnswerPromptPersistingFormatElement = _
objDOM.createElement("AnswerPromptPersistingFormat")
objParent.appendChild objAnswerPromptPersistingFormatElement
' Create the "_ap" node
Dim objApElement As IXMLDOMElement
Set objApElement = objDOM.createElement("_ap")
objAnswerPromptPersistingFormatElement.appendChild objApElement
' Create the parameter name element
Dim objParameterElement As IXMLDOMElement
Set objParameterElement = objDOM.createElement("Name")
objApElement.appendChild objParameterElement
objParameterElement.Text = strVariableName
' Create the values element
Dim objValuesElement As IXMLDOMElement
Set objValuesElement = objDOM.createElement("Values")
objApElement.appendChild objValuesElement
' Create the "_apc" node
Set getStringListPairParent = objDOM.createElement("_apc")
objAnswerPromptPersistingFormatElement.appendChild getStringListPairParent
End Function

Private Function addSingleSelectionParameterToXML(strVariableName As String, _
strValue As String, _
objParent As IXMLDOMElement, _
objDOM As DOMDocument)
' Create the "AnswerPromptPersistingFormat" node
Dim objAnswerPromptPersistingFormatElement As IXMLDOMElement
Set objAnswerPromptPersistingFormatElement = _
objDOM.createElement("AnswerPromptPersistingFormat")
objParent.appendChild objAnswerPromptPersistingFormatElement
' Create the "_ap" node
Dim objApElement As IXMLDOMElement
Set objApElement = objDOM.createElement("_ap")
objAnswerPromptPersistingFormatElement.appendChild objApElement
' Create the parameter name element
Dim objParameterElement As IXMLDOMElement
Set objParameterElement = objDOM.createElement("Name")
objApElement.appendChild objParameterElement
objParameterElement.Text = strVariableName
' Create the values element
Dim objValuesElement As IXMLDOMElement
Set objValuesElement = objDOM.createElement("Values")
objApElement.appendChild objValuesElement
' Create the string element with the value passed to the parameter
Dim objStringElement As IXMLDOMElement
Set objStringElement = objDOM.createElement("string")
objValuesElement.appendChild objStringElement
objStringElement.Text = strValue
End Function

Genauso können Sie mit der Zeit verfahren.
ScriptLogic:

 *XDIM_MEMBERSET ACCOUNT = SAAMO
*XDIM_MEMBERSET CATEGORY = %CATEGORY_SET%
*XDIM_ADDMEMBERSET CATEGORY = $VAR_CAT$
*XDIM_MEMBERSET COMPCODE = %COMPCODE_SET%
*XDIM_MEMBERSET SAORG = %SAORG_SET%
*XDIM_MEMBERSET SAOFF = <ALL>
*XDIM_MEMBERSET DICHA = <ALL>
*XDIM_MEMBERSET PRODH1 = <ALL>
*XDIM_MEMBERSET PRODUCT = <ALL>
*XDIM_MEMBERSET INPUTCURRENCY = EUR
*XDIM_MEMBERSET TIME = BAS($VAR_AY$.TOTAL)
*XDIM_ADDMEMBERSET TIME = BAS($VAR_PY$.TOTAL)

*RUNALLOCATION
*FACTOR = USING/TOTAL

*DIM ACCOUNT         WHAT = SAAMO;    WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM CATEGORY        WHAT = %CATEGORY_SET%;      WHERE = <<<;       USING = $VAR_CAT$;          TOTAL = <<<;
*DIM COMPCODE        WHAT = %COMPCODE_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAORG           WHAT = %SAORG_SET%;     WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM SAOFF           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM DICHA           WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODH1          WHAT = NONE;     WHERE = BAS(ALL);  USING = BAS(ALL);        TOTAL = <<<;
*DIM PRODUCT         WHAT = NONE;     WHERE = NONE;  USING = BAS(ALL);        TOTAL = <<<;
*DIM INPUTCURRENCY   WHAT = EUR;      WHERE = <<<;       USING = <<<;             TOTAL = <<<;
*DIM TIME            WHAT = BAS($VAR_AY$.TOTAL); WHERE = <<<;       USING = BAS($VAR_PY$.TOTAL); TOTAL = <<<;

*ENDALLOCATION

DataPackage Skript:

PROMPT(SELECTINPUT,,,,"%CATEGORY_DIM%,COMPCODE,SAORG")
PROMPT(TEXT, %VAR_CAT%, "Version der Referenzwerte",). 
PROMPT(TEXT, %VAR_AY%, "Aktuelles Jahr",). 
PROMPT(TEXT, %VAR_PY%, "Vorheriges Jahr",). 

INFO(%EQU%,=)
INFO(%TAB%,;)

TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SUSER,%USER%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPPSET,%APPSET%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SAPP,PSX_PLAN)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,SELECTION,%SELECTION%)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,LOGICFILENAME,TEST.LGF)
TASK(/CPMB/DEFAULT_FORMULAS_LOGIC,REPLACEPARAM,VAR_CAT%EQU%%VAR_CAT%%TAB%VAR_AY%EQU%%VAR_AY%%TAB%VAR_PY%EQU%%VAR_PY%)

PARAMETERS Bereich:

PARAMETERS Bereich mit Zeitvariablen

PARAMETERS Bereich mit Zeitvariablen

Viel Spass dabei!

Ihre User beklagen sich über langsame Berichte?

  • In meinem Newsletter lernen Sie, wie Sie Abhilfe schaffen.
  • Entdecken Sie die Möglichkeiten der Performanceoptimierung.
  • Praktische Anleitungen ermöglichen Ihnen schnelle Erfolge bei der Optimierung von SAP Systemen.
  • Viele Tipps und Tricks zu SAP BI Themen.
  • Holen Sie die maximale Performance aus Ihrem SAP BI!
  • Bei der Anmeldung zu meinem Newsletter erhalten Sie das Buch „High Performance SAP BI“ als Willkommensgeschenk.
Fordere SAP Performance Tricks an

Jetzt anfordern!

* Pflichtfeld
 
Kein SPAM. Ich hasse Spam genau so wie du.

Quellen:
Tristan Colgate et al – How to Call a BPC Data Manager Package from VBA
Sergey Nelyapenko – How to deal with BPC Data Manager packages programmatically
SAP Hilfe

Falls Ihnen dieser Beitrag weitergeholfen hat, wäre es eine sehr nette Anerkennung meiner Arbeit wenn Sie z.B. Ihre Bücher über Amazon bestellen würden. Wenn Sie ein Produkt kaufen, erhalte ich dafür eine Provision. Für Sie ändert sich am Preis des Produktes gar nichts. Ich möchte mich an dieser Stelle jetzt schon für Ihre Unterstützung bedanken.

16. Mai 2014/2 Kommentare/von Denis
Eintrag teilen
  • Teilen auf Facebook
  • Teilen auf X
  • Teilen auf WhatsApp
  • Teilen auf Pinterest
  • Teilen auf LinkedIn
  • Teilen auf Tumblr
  • Teilen auf Vk
  • Teilen auf Reddit
  • Per E-Mail teilen
https://www.denisreis.com/wp-content/uploads/2016/09/logo.png 0 0 Denis https://www.denisreis.com/wp-content/uploads/2016/09/logo.png Denis2014-05-16 13:37:172018-10-16 01:09:21How To BPC – Variablenübergabe an ScriptLogic DataPackages aus Excel
Das könnte Dich auch interessieren
Wie Sie flexible Datenscheiben mit ABAP und SQL Script anlegen Wie Sie flexible Datenscheiben mit ABAP und SQL Script anlegen
Stammdaten mit BPC bearbeiten Leichte Optimierung vs Vollständige Optimierung in BO BPC
Stammdaten mit BPC bearbeiten Empfohlene Sicherheitseinstellungen BPC
Stammdaten mit BPC bearbeiten Script Logic über Excel Button ausführen
Blockbildung in FOX Formeln erklärt Blockbildung in FOX Formeln erklärt
Stammdaten mit BPC bearbeiten How To SAP BI – Stammdaten mit BPC bearbeiten
2 Kommentare
  1. Maik Thiede
    Maik Thiede sagte:
    30. August 2016 um 11:02

    Gutes Howto – probier ich bei Gelegenheit mal aus.

    Antworten
    • Denis
      Denis sagte:
      2. September 2016 um 07:58

      Vielen Dank.

      Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar Antwort abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

Stay connected

  • RSS abonnieren
  • XING
  • LinkedIn
  • Twitter
  • Facebook
  • Newsletter

Ich lese gerade

12 Rules for Life: An Antidote to Chaos

Kategorien

  • Allgemein
  • BPC
  • Buchnotizen
  • CSS
  • Excel
  • How-To Tutorials SAP BI BA
  • Know-How SAP
  • Projektmanagement und Führung
  • VBA

Hörfutter

Hol dir ein kostenloses Hörbuch!

Anzeige

Beliebt
  • Bestimmte Zeilen in eine andere Tabelle kopieren
    Excel VBA – Bestimmte Zeilen in eine andere Tabelle...9. März 2014 - 22:14
  • Excel VBA - Wie Sie den Blattschutz ohne Kennwort aufheben
    Excel VBA – Wie Sie den Blattschutz ohne Kennwort...24. Oktober 2017 - 12:58
  • Excel VBA - Zeichen ersetzen mit Replace
    Excel VBA – Zeichen ersetzen mit Replace12. Oktober 2014 - 20:15
  • Wie sie das aktuelle Datum in einer Liste finden
    Excel VBA – Wie Sie das aktuelle Datum in einer Liste...30. Januar 2018 - 12:57
Kürzlich
  • Datasphere CLI einrichten
    Wie Sie Datasphere CLI einrichten20. Juni 2026 - 10:57
  • Linux Spickzettel
    Linux Spickzettel24. April 2026 - 20:38
  • SAP Datasphere als Remote Quelle für SAP HANA nutzen
    SAP Datasphere als Remote Quelle für SAP HANA nutzen23. März 2026 - 09:27
  • Markdown Syntax Spickzettel
    Markdown Spickzettel25. Februar 2026 - 22:14
Kommentare
  • PaulSuper Artikel, leider gibt es diesen FuBa bei BW/4HANA 2023...3. März 2026 - 13:34 von Paul
  • MichaelHallo, ich habe diesen Beitrag gefunden, gerade der Tipp...1. August 2023 - 14:52 von Michael
  • CarportDanke für die tolle Arbeit die hier geleistet wurde, hier...14. Februar 2023 - 12:15 von Carport
  • Tobias IsenbergHi, kann nur davon abraten/warnen, das Sprachpaket zu...19. Oktober 2022 - 14:31 von Tobias Isenberg

Werbung

Schlagwörter

ABAP AI Analysis Aufwandsschätzung BAdI berechtigungen BPC BTP Controlling CSS Datasphere Delegation Design Studio EPM EvDRE Excel HTML JavaScript Meeting PM Prozessketten Python SAC SAP Script Logic Scrum SQL SQLScript Tabellen Transformationsroutinen Tutorial VBA Workshop

Archiv

  • Juni 2026
  • April 2026
  • März 2026
  • Februar 2026
  • Januar 2026
  • Dezember 2025
  • November 2025
  • Oktober 2025
  • September 2025
  • August 2025
  • Juli 2025
  • Juni 2025
  • Mai 2025
  • April 2025
  • März 2025
  • Februar 2025
  • Januar 2025
  • Dezember 2024
  • November 2024
  • Oktober 2024
  • September 2024
  • August 2024
  • Juli 2024
  • Juni 2024
  • Mai 2024
  • April 2024
  • März 2024
  • Februar 2024
  • Januar 2024
  • Dezember 2023
  • November 2023
  • Oktober 2023
  • September 2023
  • August 2023
  • Juli 2023
  • Juni 2023
  • Mai 2023
  • April 2023
  • März 2023
  • Februar 2023
  • Januar 2023
  • Dezember 2022
  • November 2022
  • Oktober 2022
  • September 2022
  • August 2022
  • Juli 2022
  • Juni 2022
  • Mai 2022
  • April 2022
  • März 2022
  • Februar 2022
  • Januar 2022
  • Dezember 2021
  • November 2021
  • Oktober 2021
  • September 2021
  • August 2021
  • Juli 2021
  • Juni 2021
  • Mai 2021
  • April 2021
  • März 2021
  • Februar 2021
  • Januar 2021
  • Dezember 2020
  • November 2020
  • Oktober 2020
  • September 2020
  • August 2020
  • Juli 2020
  • Juni 2020
  • Mai 2020
  • April 2020
  • März 2020
  • Februar 2020
  • Januar 2020
  • Dezember 2019
  • November 2019
  • Oktober 2019
  • September 2019
  • August 2019
  • Juli 2019
  • Juni 2019
  • Mai 2019
  • April 2019
  • März 2019
  • Februar 2019
  • Januar 2019
  • Dezember 2018
  • November 2018
  • Oktober 2018
  • Juli 2018
  • Juni 2018
  • Mai 2018
  • April 2018
  • März 2018
  • Februar 2018
  • Januar 2018
  • Dezember 2017
  • November 2017
  • Oktober 2017
  • September 2017
  • August 2017
  • Juli 2017
  • Juni 2017
  • Mai 2017
  • April 2017
  • März 2017
  • Februar 2017
  • Januar 2017
  • Dezember 2016
  • November 2016
  • Oktober 2016
  • September 2016
  • August 2016
  • Juli 2016
  • Juni 2016
  • Mai 2016
  • April 2016
  • März 2016
  • Februar 2016
  • Januar 2016
  • Dezember 2015
  • November 2015
  • Oktober 2015
  • September 2015
  • August 2015
  • Juli 2015
  • Juni 2015
  • Mai 2015
  • April 2015
  • März 2015
  • Februar 2015
  • Januar 2015
  • Dezember 2014
  • November 2014
  • Oktober 2014
  • September 2014
  • August 2014
  • Juli 2014
  • Juni 2014
  • Mai 2014
  • April 2014
  • März 2014
  • Februar 2014
  • Januar 2014
  • Dezember 2013
  • November 2013
  • Oktober 2013
  • September 2013
  • August 2013
  • Juli 2013
  • Juni 2013
  • Mai 2013
  • April 2013
  • März 2013
  • Februar 2013
  • Januar 2013
  • Dezember 2012
  • November 2012
  • Oktober 2012
  • September 2012
  • August 2012
  • Juli 2012
  • Juni 2012
  • Mai 2012
  • April 2012
  • März 2012
  • Februar 2012
  • Januar 2012
© Copyright - Denis Reis - Lumen accipe et imperti - Impressum - Datenschutz
  • Link zu X
  • Link zu Facebook
  • Link zu Xing
  • Link zu LinkedIn
  • Link zu Rss dieser Seite
  • Link zu Mail
Link to: Excel VBA – Farbe der Tabellenreiter ändern Link to: Excel VBA – Farbe der Tabellenreiter ändern Excel VBA – Farbe der Tabellenreiter ändern Link to: Excel VBA – Tabelle kopieren Link to: Excel VBA – Tabelle kopieren Excel VBA – Tabelle kopieren
Nach oben scrollen Nach oben scrollen Nach oben scrollen

Diese Website benutzt Cookies. Wenn du die Website weiter nutzt, erteilst du eine Einverständniserklärung zur Erhebung personenbezogener Daten nach der DSGVO. Weitere Informationen zu Cookies und insbesondere dazu, wie Sie deren Verwendung widersprechen können, finden Sie in unseren Datenschutzhinweisen.

Akzeptieren


Wie wir Cookies verwenden

Wir können Cookies anfordern, die auf Ihrem Gerät eingestellt werden. Wir verwenden Cookies, um uns mitzuteilen, wenn Sie unsere Websites besuchen, wie Sie mit uns interagieren, Ihre Nutzererfahrung verbessern und Ihre Beziehung zu unserer Website anpassen.

Klicken Sie auf die verschiedenen Kategorienüberschriften, um mehr zu erfahren. Sie können auch einige Ihrer Einstellungen ändern. Beachten Sie, dass das Blockieren einiger Arten von Cookies Auswirkungen auf Ihre Erfahrung auf unseren Websites und auf die Dienste haben kann, die wir anbieten können.

Notwendige Website Cookies

Diese Cookies sind unbedingt erforderlich, um Ihnen die auf unserer Webseite verfügbaren Dienste und Funktionen zur Verfügung zu stellen.

Da diese Cookies für die auf unserer Webseite verfügbaren Dienste und Funktionen unbedingt erforderlich sind, hat die Ablehnung Auswirkungen auf die Funktionsweise unserer Webseite. Sie können Cookies jederzeit blockieren oder löschen, indem Sie Ihre Browsereinstellungen ändern und das Blockieren aller Cookies auf dieser Webseite erzwingen. Sie werden jedoch immer aufgefordert, Cookies zu akzeptieren / abzulehnen, wenn Sie unsere Website erneut besuchen.

Wir respektieren es voll und ganz, wenn Sie Cookies ablehnen möchten. Um zu vermeiden, dass Sie immer wieder nach Cookies gefragt werden, erlauben Sie uns bitte, einen Cookie für Ihre Einstellungen zu speichern. Sie können sich jederzeit abmelden oder andere Cookies zulassen, um unsere Dienste vollumfänglich nutzen zu können. Wenn Sie Cookies ablehnen, werden alle gesetzten Cookies auf unserer Domain entfernt.

Wir stellen Ihnen eine Liste der von Ihrem Computer auf unserer Domain gespeicherten Cookies zur Verfügung. Aus Sicherheitsgründen können wie Ihnen keine Cookies anzeigen, die von anderen Domains gespeichert werden. Diese können Sie in den Sicherheitseinstellungen Ihres Browsers einsehen.

Andere externe Dienste

Wir nutzen auch verschiedene externe Dienste wie Google Webfonts, Google Maps und externe Videoanbieter. Da diese Anbieter möglicherweise personenbezogene Daten von Ihnen speichern, können Sie diese hier deaktivieren. Bitte beachten Sie, dass eine Deaktivierung dieser Cookies die Funktionalität und das Aussehen unserer Webseite erheblich beeinträchtigen kann. Die Änderungen werden nach einem Neuladen der Seite wirksam.

Google Webfont Einstellungen:

Google Maps Einstellungen:

Google reCaptcha Einstellungen:

Vimeo und YouTube Einstellungen:

Datenschutzrichtlinie

Sie können unsere Cookies und Datenschutzeinstellungen im Detail in unseren Datenschutzrichtlinie nachlesen.

Datenschutz
Einstellungen akzeptieren