Hallo Andreas,
ich habe eben Deine Testdatei heruntergeladen und das Makro manuell gestartet
[Extras]>[Makros]>[Makro ausführen]: + test-zeile-einfügen.ods +Standard +Module1 => InsertRow
und es macht genau das, was es soll.
Der Makro-Code ist völlig in Ordnung.
Ich sende Dir den Makro-Code als Dateianhang (InsertRow.txt) mit einer 2. Mail an Deine private Mail-Adresse, dann kannst Du selbst vergleichen.
Zum Code:
Gibt es denn wirklich keine einfachere Möglichkeit?
"Gehe zum Anfang der Tabelle"
"Gehe eine Zeile nach unten"
"Füge eine Zeile oberhalb ein"
Genau das macht diese eine Code-Zeile im Makro: oRow.insertByIndex(iRowIns,1)
"iRowIns": Die Zeilennummer der einzufügenden Zeile.
Im Makro hat iRowIns den Wert 1. Das heißt, es wird nach der Zeile mit dem Index 0 (das ist die erste Zeile der Tabelle) eine Zeile eingefügt.
"1": Das ist die Anzahl der einzufügenden Zeilen.
Nach dem Einfügen haben die Zellen der eingefügten Zeile (automatisch) die Eigenschaften der Zellen der Zeile darüber (Deine Überschriftszeile). Damit sie die Eigenschaften der Zellen der Zeile unter der eingefügten Zeile haben, sind die Aktionen in der Schleife notwendig.
Gruß
Hans-Werner
Sub InsertRow
' A c h t u n g
' iColMax muss an die Anzahl Spalten der aktuellen Tabelle angepasst werden:
' iColMax = 'Anzahl Spalten' - 1
' Der Spalten-Index beginnt bei 0, weswegen man von der 'Anzahl Spalten' 1
' abziehen muss.
Dim oDoc as Object ' object Document
Dim oSheet as Object ' object Sheet
Dim oRow as Object ' object Row
Dim iCol as Long ' index Column (i=0 => 1st Column)
Dim iColMax as Long ' index Column Maximum
Dim iRowIns as Long ' index Row Insert (i=0 => 1st Row )
oDoc = ThisComponent
oSheet = oDoc.Sheets(0)
oRow = oSheet.getRows
iRowIns = 1
iColMax = 4
' Zeile einfügen:
oRow.insertByIndex(iRowIns,1)
For iCol=0 To iColMax Step 1
' Zell-Typ übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).NumberFormat = oSheet.getCellByPosition(iCol,iRowIns+1).NumberFormat
' Zell-Inhalt Schriftattribut "Name" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CharFontName = oSheet.getCellByPosition(iCol,iRowIns+1).CharFontName
' Zell-Inhalt Schriftattribut "Größe" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CharHeight = oSheet.getCellByPosition(iCol,iRowIns+1).CharHeight
' Zell-Inhalt Schriftattribut "Farbe" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CharColor = oSheet.getCellByPosition(iCol,iRowIns+1).CharColor
' Zell-Inhalt Schriftattribut "fett" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CharWeight = oSheet.getCellByPosition(iCol,iRowIns+1).CharWeight
' Zell-Inhalt Schriftattribut "kursiv" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CharPosture = oSheet.getCellByPosition(iCol,iRowIns+1).CharPosture
' Zell-Hintergrund "Farbe" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).CellBackColor = oSheet.getCellByPosition(iCol,iRowIns+1).CellBackColor
' Zell-Inhalt "vertikale Ausrichtung" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).VertJustify = oSheet.getCellByPosition(iCol,iRowIns+1).VertJustify
' Zell-Inhalt "horizontale Ausrichtung" übernehmen:
oSheet.getCellByPosition(iCol,iRowIns).HoriJustify = oSheet.getCellByPosition(iCol,iRowIns+1).HoriJustify
Next iCol
End Sub