🍀 Bitte helfen Sie dabei, unser LibreOffice Forum zu erhalten! 🍀
❤️ Spendenkampagne für das neue Jahr 2026 startet jetzt. ❤️
>> Das LibreOffice-Forum lebt von Ihnen – und von vielen Experten, die freiwillig ihr Wissen teilen.<<
Ihre Spende hilft, die Community offen, werbefrei (bei Registrierung) und lebendig zu halten. Vielen Dank!

❤️ DANKE >> << DANKE ❤️

🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗


Hilfe mit Makro - Fünf Zielwertsuche automatisch ausführen

CALC ist die Tabellenkalkulation, die Sie immer wollten.
Antworten
JoeHardi
Beiträge: 18
Registriert: Mi 19. Jul 2023, 13:32

Hilfe mit Makro - Fünf Zielwertsuche automatisch ausführen

Beitrag von JoeHardi » Do 22. Jan 2026, 19:59

Servus in die Runde,

schon seit einiger Zeit möchte ich in einem Calc Dokument ein Makro einbauen, dass mir gleich beim Öffnen des Dokuments fünf Zielwertsuche auf der Seite "VERMÖGEN" automatisch ausführt. Ich bekomme es leider ums verrecken nicht hin.

Ich weiß, dass es ein großes Thema ist, aber vielleicht hat jemand Zeit und Lust mir dabei zu helfen?

Die fünf Zielwertsuche wären:

1.
Formelzelle: $D$76
Zielwert: 0
Variable Zelle: $D$74

2.
Formelzelle: $F$76
Zielwert: 0
Variable Zelle: $F$74

3.
Formelzelle: $H$76
Zielwert: 0
Variable Zelle: $H$74

4.
Formelzelle: $J$76
Zielwert: 0
Variable Zelle: $J$74

5.
Formelzelle: $L$76
Zielwert: 0
Variable Zelle: $L$74

Das, was ich mir bis jetzt zusammengereimt habe ich:

Code: Alles auswählen

Option Explicit

Sub AutoRun_GoalSeeks
    Dim oDoc As Object
    Dim oSheets As Object
    Dim oSheet As Object

    oDoc = ThisComponent
    If oDoc Is Nothing Then
        MsgBox "Dokument nicht gefunden.", 16, "Makrofehler": Exit Sub
    End If

    ' Prüfen, ob es ein Spreadsheet-Dokument ist
    If Not oDoc.supportsService("com.sun.star.sheet.SpreadsheetDocument") Then
        MsgBox "Dieses Makro muss in einer Calc-Datei ausgeführt werden.", 16, "Makrofehler": Exit Sub
    End If

    oSheets = oDoc.getSheets()  ' zuverlässiger Zugriff
    If Not oSheets.hasByName("VERMÖGEN") Then
        MsgBox "Blatt 'VERMÖGEN' nicht gefunden.", 16, "Makrofehler": Exit Sub
    End If
    oSheet = oSheets.getByName("VERMÖGEN")

    ' GoalSeeks
    DoGoalSeek oDoc, oSheet, "D76", 0, "D74"
    DoGoalSeek oDoc, oSheet, "F76", 0, "F74"
    DoGoalSeek oDoc, oSheet, "H76", 0, "H74"
    DoGoalSeek oDoc, oSheet, "J76", 0, "J74"
    DoGoalSeek oDoc, oSheet, "L76", 0, "L74"
End Sub

Sub DoGoalSeek(oDoc As Object, oSheet As Object, sTargetRef As String, dGoal As Double, sVariableRef As String)
    Dim oTargetCell As Object, oVariableCell As Object
    Dim oArgs(2) As New com.sun.star.beans.PropertyValue
    Dim bSuccess As Boolean

    On Error GoTo LocalErr

    oTargetCell = oSheet.getCellRangeByName(sTargetRef)
    oVariableCell = oSheet.getCellRangeByName(sVariableRef)
    If oTargetCell Is Nothing Or oVariableCell Is Nothing Then
        MsgBox "Zellen nicht gefunden: " & sTargetRef & " oder " & sVariableRef, 16, "GoalSeek-Fehler": Exit Sub
    End If

    oArgs(0).Name = "TargetCell": oArgs(0).Value = oTargetCell
    oArgs(1).Name = "GoalValue":  oArgs(1).Value = dGoal
    oArgs(2).Name = "ChangingCell": oArgs(2).Value = oVariableCell

    oDoc.calculateAll

    bSuccess = False
    On Error Resume Next
    Err.Clear
    oDoc.GoalSeek(oArgs())
    If Err.Number = 0 Then bSuccess = True
    Err.Clear

    If Not bSuccess Then
        oDoc.getSheets().getByIndex(0).GoalSeek(oArgs())
        If Err.Number = 0 Then bSuccess = True
        Err.Clear
    End If

    If Not bSuccess Then
        oSheet.GoalSeek(oArgs())
        If Err.Number = 0 Then bSuccess = True
        Err.Clear
    End If
    On Error GoTo 0

    If Not bSuccess Then MsgBox "GoalSeek für " & sTargetRef & " → " & sVariableRef & " fehlgeschlagen.", 16, "GoalSeek-Fehler"
    Exit Sub

LocalErr:
    Dim sMsg As String
    sMsg = "Fehler bei GoalSeek für " & sTargetRef & " → " & sVariableRef & Chr(10) & "Fehlernummer: " & Err.Number
    If Len(Err.Description) > 0 Then sMsg = sMsg & Chr(10) & "Beschreibung: " & Err.Description
    MsgBox sMsg, 16, "Makrofehler"
End Sub
Ich bin um jede Hilfe dankbar!


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten