Zellbezüge sollen beim Kopieren erhalten bleiben

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

LeverAction
*
Beiträge: 17
Registriert: Di, 05.12.2006 22:26
Wohnort: Schiffdorf

Zellbezüge sollen beim Kopieren erhalten bleiben

Beitrag von LeverAction »

Hallo OOo-Freunde,

ich versuche im Moment folgendes Problem zu bewältigen:
Das aktive Tabellenblatt soll dupliziert werden, was ja über copyByName auch nicht so schwierig ist.
Allerdings werden die relativen Zellbezüge, welche auf andere Blätter verweisen, angepasst, was ich gerne verhindern möchte.
In einem älteren Referenzhandbuch fand ich den Hinweis auf ToggleRelative, womit sich nach einmaligem Ausführen die Zellbezüge in absolute ändern. Das erreiche ich händisch auch mit "Umschalt + F4", dann bleiben logischerweise auch die Zellbezüge so erhalten, das ich auf der duplizierten Seite den gleichen Inhalt dargestellt bekomme.
Alternativ hatte ich versucht, es durch aktivieren des Tabellenblattschutzes umzusetzen, aber die Zellbezüge wurden trotzdem geändert.

Code: Alles auswählen

Dim oCalcDokument as Object
Dim oSheets as Object
Dim oSheet as Object
Dim oSelektion as Object
Dim iIndex as Long
Dim sName as String
Dim sCopy as String

Sub Kopieren
oCalcDokument = ThisComponent
oSheets = oCalcDokument.getSheets()
iIndex = oSheets.getCount()
sName = oCalcDokument.CurrentController.ActiveSheet.Name
oSheet = oSheets.getByName(sName)
oSelektion = oSheet.getCellRangeByName("A1:O70")
oSelektion.ToggleRelative
sCopy = sName & "_2"
oSheets.copyByName(sName, sCopy, iIndex)
End Sub
Kann mir jemand bei der Umsetzung behilflich sein?
Auch andere Lösungsansätze sind willkommen.

Gruß,
Matthias
DPunch
*******
Beiträge: 1112
Registriert: Mo, 02.11.2009 16:16
Wohnort: Marburg

Re: Zellbezüge sollen beim Kopieren erhalten bleiben

Beitrag von DPunch »

Aloha

Wie bzw. ob man das Anpassen der Zellbezüge beim Kopieren per Makro generell verhindern kann, weiss ich leider nicht.

Aber bis sich jemand mit ausreichender Kompetenz meldet, sollte folgendes auch seinen Zweck erfüllen:

Code: Alles auswählen

Sub Kopieren
   sDesiredCellRange = "A1:T70"
	oDoc = thisComponent
	oSheetToCopy = oDoc.CurrentController.ActiveSheet
	sSheetName = oSheetToCopy.Name
	oRangeToCopy = oSheetToCopy.getCellRangeByName(sDesiredCellRange)
	aFormulaArray = oRangeToCopy.getFormulaArray
	
	sNewName = sSheetName & "_2"
	If oDoc.Sheets.hasByName(sNewName) Then
		MsgBox "Tabellenblatt " & sNewName & " schon vorhanden", 16, "Fehler"
		Exit Sub
	End If
	nNewIndex = oDoc.Sheets.Count
	oDoc.Sheets.copyByName(sSheetName,sNewName,nNewIndex)
	oNewSheet = oDoc.Sheets(nNewIndex)
	oTargetRange = oNewSheet.getCellRangeByName(sDesiredCellRange)
	oTargetRange.setFormulaArray(aFormulaArray)
End Sub
LeverAction
*
Beiträge: 17
Registriert: Di, 05.12.2006 22:26
Wohnort: Schiffdorf

Re: Zellbezüge sollen beim Kopieren erhalten bleiben

Beitrag von LeverAction »

Hi DPunch,

vielen Dank für die schnelle Hilfe.
Werde mich in den nächsten Tagen mit deinem Code näher beschäftigen, sobald ich ein wenig Ruhe dafür finde.
Hab' es nur 'mal schnell "eingebaut" und es hat sofort funktioniert. Einfach großartig, Danke noch einmal.

Gruß,
Matthias
Antworten