Hallo Andreas,

ein letzter Vorschlag - mir fällt sonst nichts weiter ein ...

Das Makro (s.u.) erzeugt aus diesem


A    B    C     (Überschriftszeile)
1    2    3     (Datenzeile 1)
4    5    6     (Datenzeile 2)
7    8    9     (Datenzeile 3)

das:

A    B    C     (Überschriftszeile)
                  (neue leere Zeile mit Zellformaten der Datenzeile 1)
1    2    3     (Datenzeile 1)
4    5    6     (Datenzeile 2)
7    8    9     (Datenzeile 3)

Das Makro (s.u.)

[1] fügt nach der 2. Zeile eine Zeile ein.
[2] kopiert die Inhalte der 2. Zeile in die neu eingefügte Zeile.
[3] löscht die Inhalte der 2. Zeile.
[4] positioniert den Cursor auf die 1. Spalte der 2. Zeile.

Einen einfachen COPY-Befehl für Zeilen gibt es offensichtlich nicht in Makro Basic ( http://www.dannenhoefer.de "7.4.5 Wie kann man Zeilen oder Spalten kopieren ?" ).

Die Anzahl der Spalten (1. Spalte = Index 0)kannst Du gegebenenfalls noch anpassen: SourceColMax = ?

Was alles gelöscht werden soll kannst Du gegebenenfalls noch erweitern: oCell.clearContents(1+2+4+?)

Gruß
Hans-Werner :-))

  Sub InsertRow

     Dim oCell              as Object
     Dim oCursor            as Object
     Dim oCursorCell        as Object
     Dim oDocument          as Object
     Dim oRow               as Object
     Dim oSheet             as Object
     Dim oSourceAdress      as Object
     Dim oSourceRange       as Object
     Dim oSourceRangeAdress as Object
     Dim oTargetAdress      as Object
     Dim oTargetCell        as Object
     Dim SourceCol          as Long
     Dim SourceColMax       as Long
     Dim SourceRow          as Long
     Dim TargetRow          as Long

'    KONSTANTE                               | ZELL-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

     oDocument  = ThisComponent
     oSheet     = oDocument.Sheets(0)
     oCursor    = oDocument.CurrentController

     SourceRow    = 1 ' Zeile  "2" (Index = Y = 1)
     TargetRow    = 2 ' Zeile  "3" (Index = Y = 2)
     SourceColMax = 2 ' Spalte "C" (Index = X = 2)

'    Eine neue Zeile ("TargetRow") nach der "SourceRow" einfügen
     oRow=oSheet.getRows
     oRow.insertByIndex(TargetRow,1)

'    Inhalt der "SourceRow" in die neue Zeile ("TargetRow") kopieren:
oSourceRange = oSheet.getCellRangeByPosition(0,SourceRow,SourceColMax,SourceRow)
     oSourceRangeAdress  = oSourceRange.getRangeAddress
     oTargetCell         = oSheet.getCellByPosition(0,TargetRow)
     oTargetAdress       = oTargetCell.getCellAddress
     oSheet.copyRange(oTargetAdress,oSourceRangeAdress)

'    Inhalte der "SourceRow" löschen:
     For SourceCol=0 To SourceColMax Step 1
         oCell = oSheet.getCellByPosition(SourceCol,SourceRow)
oCell.clearContents(1+2+4) ' Gegebenenfalls durch weitere "Lösch"-Zahl erweitern !
     Next SourceCol

'    Cursor in Spalte "A" der "SourceRow" positionieren:
     oCursorCell = oSheet.getCellByPosition(0,SourceRow)
     oCursor.Select(oCursorCell)

  End Sub

--
Liste abmelden mit E-Mail an: [email protected]
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

Antwort per Email an