Calc: Neue Zeile direkt unter Spaltenüberschrift-Zeile einfuegen

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

OoOHWHOoO schrieb:

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.

Dann gibt es nur eine Erklärung, warum es hier nicht funktioniert:

Es gibt Bugs in der LO-Version für MacOS.

> 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.

Auf diesen letzten Teil beziehe ich meine Aussage.

Du verwendest "Einfügen unterhalb".

Daraus ergibt sich dass alle Formate per Makrocode übertragen werden
müssen.

Das ist fehlerträchtig, denke ich.
Und ob die Funktionalität "Gültigkeit" auch übernommen wird, kann ich
nicht sagen, da ja das Makro bei mir gar nicht wirkt.

Uff, ist das zäh.

Gruß, Andreas