Formel mit relativen Bezügen in Zellbereich einfügen

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Formel mit relativen Bezügen in Zellbereich einfügen

Re: Formel mit relativen Bezügen in Zellbereich einfügen

von Clousi » Fr, 27.08.2021 11:25

Hervorragend! Ich bin beeindruckt! Herzlichen Dank!

Re: Formel mit relativen Bezügen in Zellbereich einfügen

von Stephan » Fr, 27.08.2021 11:17

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

von Clousi » Fr, 27.08.2021 10:48

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

von Stephan » Fr, 27.08.2021 10:25

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

Formel mit relativen Bezügen in Zellbereich einfügen

von Clousi » Fr, 27.08.2021 09:19

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

Nach oben