Wen es interessiert:
Der Vollständigkeit halber anbei das Makro zu Andreas' Problemstellung,
welches er nun verwendet.
Mich persönlich würde interessieren, ob es da auch noch einen
einfacheren und/oder eleganteren Lösungsansatz gibt.
Grüße
Hans-Werner :-))
Sub InsertRowByMovingRange
' Bei dem normalen Einfügen einer neuen Zeile in einer Tabelle hat
diese
' Zeile immer die (Format-) Eigenschaften der vorherigen Zeile, was
zu
' Problemen führen kann, wenn man direkt nach der Überschriftszeile
eine
' Leerzeile einfügen will, welche die (Format-) Eigenschaften der
folgenden
' Datenzeilen haben soll. Das Makro fügt nach der Überschriftszeile
eine
' Leerzeile ein, wobei diese die (Format-) Eigenschaften der
folgenden
' Datenzeilen hat. Zellverweise in den Datenzeilen bleiben erhalten.
' [0] Das Tabellenblatt bestehe aus einer Überschriftszeile und
beliebig
' vielen nachfolgenden Datenzeilen.
' [1] Der Bereich der Datenzeilen wird um 1 Zeile nach unten
verschoben,
' so dass zwischen Überschriftszeile und Datenzeilen eine
Leerzeile
' entsteht.
' [2] Der Inhalt der ersten Datenzeile wird in diese Leerzeile
kopiert.
' [3] Bestimmte Zellinhalte
' + nummerischer Wert
' + Datum/Uhrzeit
' + Text
' + Funktionen (beispielsweise Zellverweis)
' werden gelöscht - kann angepasst werden (s.u.). Alles andere
bleibt
' erhalten.
'
+-----------------------------------------+--------------------+------+
' | Konstante | Inhalt |
Zahl |
'
+-----------------------------------------+--------------------+------+
' | com.sun.star.sheet.CellFlags.VALUE | nummerischer Wert |
1 |
' | com.sun.star.sheet.CellFlags.DATETIME | Datum/Uhrzeit |
2 |
' | com.sun.star.sheet.CellFlags.STRING | Text |
4 |
' | com.sun.star.sheet.CellFlags.ANNOTATION | Notizen |
8 |
' | com.sun.star.sheet.CellFlags.FOMULA | Funktionen |
16 |
' | com.sun.star.sheet.CellFlags.HARDATTR | Harte Formatierung |
32 |
' | com.sun.star.sheet.CellFlags.STYLES | Formatvorlagen |
64 |
' | com.sun.star.sheet.CellFlags.OBJECTS | Zeichenobjekte |
128 |
'
+-----------------------------------------+--------------------+------+
Dim oCellRange as Object
Dim oCursor as Object
Dim oDocument as Object
Dim oSheet as Object
Dim oSourceRange as Object
Dim oSourceRangeAddress as Object
Dim oTargetCell as Object
Dim oTargetCellAddress as Object
Dim Xmax as Long
Dim Ymax as Long
' [0] VORARBEITEN
' Tabellenblatt initialisieren:
oDocument = ThisComponent
oSheet = oDocument.Sheets(0)
' Tabellenblattgröße bestimmen:
oCursor = oSheet.createCursor
oCursor.GotoEndOfUSedArea(False)
Xmax = oCursor.getRangeAddress().endColumn
Ymax = oCursor.getRangeAddress().endRow
' [1] ZELLBEREICH VERSCHIEBEN
' Quellbereich zum Verschieben festlegen:
oSourceRange = oSheet.getCellRangeByPosition(0,1,Xmax,Ymax)
oSourceRangeAddress = oSourceRange.getRangeAddress
' Zielzelle (linke obere Ecke des Zielbereichs) zum Verschieben
festlegen:
oTargetCell = oSheet.getCellByPosition(0,2)
oTargetCellAddress = oTargetCell.getCellAddress
' Verschieben:
oSheet.moveRange(oTargetCellAddress,oSourceRangeAddress)
' [2] ZELLBEREICH KOPIEREN
' Quellbereich zum Kopieren festlegen:
oSourceRange = oSheet.getCellRangeByPosition(0,2,Xmax,2)
oSourceRangeAddress = oSourceRange.getRangeAddress
' Zielzelle (linke obere Ecke des Zielbereichs) zum Kopieren
festlegen:
oTargetCell = oSheet.getCellByPosition(0,1)
oTargetCellAddress = oTargetCell.getCellAddress
' Kopieren:
oSheet.copyRange(oTargetCellAddress,oSourceRangeAddress)
' [3] INHALTE LÖSCHEN
' Bereich zum Inhalte löschen festlegen:
oCellRange = oSheet.getCellRangeByPosition(0,1,Xmax,1)
' Inhalte löschen (Kann angepasst werden, siehe Tabelle oben !):
oCellRange.clearContents(1+2+4+16)
End Sub
--
Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org
Probleme?
https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/
Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de
Listenarchiv: https://listarchives.libreoffice.org/de/users/
Datenschutzerklärung: https://www.documentfoundation.org/privacy