Seite 1 von 1
Formel mit relativen Bezügen in Zellbereich einfügen
Verfasst: Fr, 27.08.2021 09:19
von Clousi
Hallo zusammen
Ich würde gerne eine Formel mit relativen Bezügen in einen Zellbereich einfügen. Dafür habe ich mir folgendes Script gebastelt. Nur leider krieg ich es nicht zum laufen (Eigenschaft oder Methode nicht gefunden: setFormula):
Code: Alles auswählen
Sub Main
Dim oDoc As Object
Dim oSheet As Object
Dim oRange as Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oRange=oSheet.getCellRangeByName("C15:C20")
oRange.setFormula("=E15&F15")
End Sub
Hat mir jemand einen Tipp?
Vielen Dank im Voraus!
Clousi
Re: Formel mit relativen Bezügen in Zellbereich einfügen
Verfasst: Fr, 27.08.2021 10:25
von Stephan
Die Fehlermeldung kommt weil Du einem CellRange keine Formel zuweisen kannst, sondern nur den jeweiligen Zellen des CellRange.
es geht im Konkreten:
Code: Alles auswählen
Sub Main2
Dim oDoc As Object
Dim oSheet As Object
Dim oRange as Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
For i = 15 To 20
oSheet.getCellRangeByName("C" & i).setFormula("=E" & i & "&F" & i)
Next i
End Sub
Für allgemeine Verwendung ist aber möglicherweise ein Misch-Masch von nativen Makro- und dispatcher-Code pragmatischer (eine allumfassend optimale Implementierung ist das aber auch nicht):
Code: Alles auswählen
Sub Main
Dim oDoc As Object
Dim oSheet As Object
Dim oRange as Object
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
oSheet.getCellRangeByName("C15").setFormula("=E15&F15")
oDoc.CurrentController.Select(oSheet.getCellRangeByName("C15"))
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())
oRange=oSheet.getCellRangeByName("C15:C20")
oDoc.CurrentController.Select(oRange)
dim args1(5) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "F"
args1(1).Name = "FormulaCommand"
args1(1).Value = 0
args1(2).Name = "SkipEmptyCells"
args1(2).Value = false
args1(3).Name = "Transpose"
args1(3).Value = false
args1(4).Name = "AsLink"
args1(4).Value = false
args1(5).Name = "MoveMode"
args1(5).Value = 4
dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args1())
End Sub
Gruß
Stephan
Re: Formel mit relativen Bezügen in Zellbereich einfügen
Verfasst: Fr, 27.08.2021 10:48
von Clousi
Hallo Stephan,
Du bist ja wirklich sehr hilfsbereit! Ich bin dir dafür extrem dankbar!
Ich habe den Work-Around mit der Misch-Masch Lösung getestet und diese funktioniert soweit gut!
Wenn ich allerdings anstelle "=E15&F15" eine komplexere Formel einsetze (z.B. sververweis) dann wird das auf Anhieb nicht als Formel erkannt und Calc gibt mir die Fehlermeldung #Name? zurück. Erst wenn ich die Zelle C15 über den Formel-Editor auswähle und diesen (ohne Modifikation) wieder schliesse, wird mir der gewünschte Wert zurückgegeben.
Weisst Du woran das liegen könnte?
Re: Formel mit relativen Bezügen in Zellbereich einfügen
Verfasst: Fr, 27.08.2021 11:17
von Stephan
grundsätzlich musst Du in:
Code: Alles auswählen
oSheet.getCellRangeByName("C15").setFormula("=E15&F15")
die internen, englischen, Tabellenfunktionsnamen benutzen, für SVERWEIS() also VLOOKUP() (siehe:
http://calc-info.de/files/Funktionen_de-en.pdf).
Um deutsche Funktinsnamen zu benutzen, musst Du diesen Code verwenden:
Code: Alles auswählen
oSheet.getCellRangeByName("C15").FormulaLocal = "=E15&F15"
Gruß
Stephan
Re: Formel mit relativen Bezügen in Zellbereich einfügen
Verfasst: Fr, 27.08.2021 11:25
von Clousi
Hervorragend! Ich bin beeindruckt! Herzlichen Dank!