Seite 1 von 3
[GELÖST] Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 11:49
von Ich Bins
Hallo zusammen,
von einem Arbeitsblatt benötige ich ein Duplikat mit identischen Formaten und Werten aber ohne Verknüpfungen und Funktionen.
Mit nachfolgendem Code kann ich im ersten Schritt das Arbeitsblatt duplizieren und im zweiten Schritt im Duplikat den gesamten genutzten Bereich kopieren und wieder an gleicher Stelle einfügen.
Code: Alles auswählen
sub kopieren_einfuegen
oDocument = ThisComponent
oDocument.Sheets.CopyByName("Tabelle1","Tabelle2",1) 'Tabelle1 duplizieren
'Inhalt der neuen Tabelle2 kopieren und nur deren Werte über die bestehenden Daten einfügen.
oSheet = thisComponent.sheets(1) '2.Blatt
ocursor = oSheet.createCursor()
ocursor.gotoStart()
ocursor.gotoEndofUsedArea(false) 'letzte Zelle des Bereiches
letzteSpalte = ocursor.getRangeAddress.endColumn 'index letzte Spalte des Bereichs
letzteZeile = ocursor.getRangeAddress.endRow 'index letzte Zeile des Bereichs
oQuelleRange=oSheet.getCellRangeByPosition(0,0,letzteSpalte,letzteZeile)
oQuellRangeAddresse = oQuelleRange.getRangeAddress
oZiel = oSheet.getCellByPosition(0,0)
oZielCellAdresse=oZiel.getCellAddress
oSheet.copyRange(oZielCellAdresse,oQuellRangeAddresse)
end sub
Der zweite Schritt macht noch keinen Sinn weil ich noch keine Möglichkeit gefunden habe die bestehenden Inhalte nur mit den zuvor kopierten Werten zu überschreiben.
Bei Dannenhöfer konnte dazu nichts passendes finden.
Wie kann man nur die Werte der zuvor kopierten Daten einfügen, oder wie macht man es richtig mit viel weniger Code?
Viele Grüße
Ich Bins
Re: VBA: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 12:58
von Helmut_S
Hallo, eigentlich ist es mir peinlich dir meine Lösung vorzuschlagen, denn die ist so einfach, dass ich annehmen muss, ich habe alles falsch verstanden
Ich riskiere einfach mal die Blamage.
Also: markiere die gesamte Tabelle oder den bearbeiteten Bereich und kopiere diesen in die Zwischenablage mit der bei "Doktoranden" beliebten Tastenkombination "Strg+C"
In der neuen Tabelle oder Datei fügst du diesen Inhalt mit der (standardmäßig eingestellten) Tastenkombination
Strg+Umschalten+V ein. Im aufpoppenden Dialog - siehe Screenshot - wählst du "Werte und Formatierungen"
und drückst mutig Enter.
Die in diesem Dialog vorgegebene und ziemlich selbsterklärenden Optionen kannst du natürlich nach Herzenslust ausprobieren.
Gruß Helmut
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 13:08
von Mondblatt24
Hallo,
was ist mit

- Screenshot_ 2021-11-15 13 03 49.png (13.58 KiB) 2460 mal betrachtet
Wenn die Tabelle kopiert ist, das gesamte Tabellenblatt markieren und über
Daten → Berechnen ► Formeln in Wert umwandeln, die Formeln entfernen.
Gruß
Peter
re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 13:11
von karolus
Hallo
VBA ist der Basic-dialekt der von M$ für Excel, Word etc. kreiert wurde.
Glücklicherweise benutzt du den aber gar nicht, sondern zeigst einigermassen sauberen StarBasic-code mit API-methoden.
Wenn du einfach nur ein Arbeitsblatt kopieren willst, dann tu das auch einfach:
Code: Alles auswählen
sub copySheet
doc = thisComponent
sheets = doc.Sheets
sheets.copyByName("Tabelle1", "CopyName", 0)
' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
end sub
wg. Verknüpfungen rauslöschen müsste ma erst mal klären,
was für Verknüpfungen das sind!
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 13:35
von Ich Bins
Hallo Helmut_S,
vielen Dank. Wie man das manuell erreichen kann ist mir bekannt.
Weil ich diese Vorgänge automatisieren möchte benötige ich Unterstützung in StarBasic.
Sinnvollerweise hätte ich meine Anfrage in " LibreOffice Programmierung" einkippen und nicht den Begriff "VBA" im Betreff verwenden sollen.
Viele Grüße
Ich Bins
Re: VBA: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 13:42
von Ich Bins
Hallo Peter,
vielen Dank, aber ich möchte die Aktion automatisieren und hätte für meine Anfrage das Forum "LibreOffice Programmierung" und nicht den Begriff "VBA" im Betreff verwenden sollen.
Ist es Dir möglich meine Anfrage nach "LibreOffice Programmierung" zu verschieben?
Viele Grüße
Ich Bins
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 13:53
von Ich Bins
Hallo Karolus,
Sorry habe das falsche Forum und die falsche Begrifflichkeit "VBA" verwendet.
Mit meinen ersten beiden Code-Zeilen ist das Duplizieren ja bereits erledigt.
Vermutlich ist Deine Variante etwas "sauberer".
In meiner Calc-Datei befinden sich viele Blätter und ich muss einige davon an unterschiedlichen Positionen ohne Verknüpfungen duplizieren.
Die Verknüpfungen existieren nur zwischen den Blättern dieser Calc-Datei und sehen alle etwa so aus:
=$Tabellenname.B66
Viele Grüße
Ich Bins
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 14:00
von Mondblatt24
Hallo Ich Bins,
Ich Bins hat geschrieben: ↑Mo 15. Nov 2021, 13:42
Ist es Dir möglich meine Anfrage nach "LibreOffice Programmierung" zu verschieben?
Nein, bin kein Moderator.
Gruß
Peter
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 14:25
von karolus
Hallo
Also gehts nur um die Formelverknüpfungen die ncht benötigt werden, am Stück:
Code: Alles auswählen
sub copySheet_withoutFormulas
doc = thisComponent
sheets = doc.Sheets
sheets.copyByName("Tabelle1", "CopyName", 0)
' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
sheet = sheets.getByName("CopyName")
formula_query = sheet.queryContentCells(16)
for each cellrange in formula_query
cellrange.FormulaArray = cellrange.DataArray
next
end sub
Die etwas "magische" 16 kommt aus
https://api.libreoffice.org/docs/idl/re ... Flags.html
Re: Arbeitsblatt nur mit Werten und Formaten duplizieren
Verfasst: Mo 15. Nov 2021, 15:15
von Ich Bins
Hallo karolus,
genau das wars - vielen Dank!
Nur noch die Werte und die Formatierungen sind vorhanden. Keine Verknüpfungen und auch kein Summen-Funktionen sind auf den ersten Blick übrig geblieben. Damit kann ich jetzt gut weiterpfriemeln.
Jetzt sieht der Code so
Code: Alles auswählen
sub copySheet_withoutFormulas
doc = thisComponent
sheets = doc.Sheets
copyName = "OriginalTabelle_"& Year(Date)-1
sheets.copyByName("OriginalTabelle",CopyName,5)
' 0 kopiert in die erste Position , … 'sheets.Count' ins letztes Tabellenblatt
sheet = sheets.getByName(CopyName)
formula_query = sheet.queryContentCells(16)
for each cellrange in formula_query
cellrange.FormulaArray = cellrange.DataArray
next
end sub
aus.
Viele Grüße
Ich Bins