Seite 1 von 1
[GELÖST] Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Di 16. Nov 2021, 17:18
von Ich Bins
Hallo zusammen,
in einem Arbeitsblatt möchte ich ab Zelle A17
15 leere Zeilen einfügen und im Anschluss das Format und die Werte von A3:S15 einfügen.
Ich versucht es mit Beispielen von Dannenhöfer.
Code: Alles auswählen
sub Zeilen
doc=thiscomponent
mysheet=doc.Sheets().getByName("MeinArbeitsblatt")
myrows=mysheet.getrows
' Und jetzt leere Zeilen einfügen: Index und Anzahl.
myrows.insertbyindex(16,15)
' Bereich kopieren
QuelleRange=mysheet.getCellRangeByPosition(0,2,18,14)
QuellRangeAddresse = QuelleRange.getRangeAddress
Ziel = mysheet.getCellByPosition(0,17)
ZielCellAdresse=Ziel.getCellAddress
' kopierten Bereich einfügen, damit die Formatierungen übernommen werden
mysheet.copyRange(ZielCellAdresse,QuellRangeAddresse)
' Bereich erneut kopieren
x = mysheet.getCellRangeByName("A3:S15").GetDataArray()
' nur die Werte des kopierten Bereichs einfügen
mysheet.getCellrangeByName("A18:S30").SetDataArray(x)
' Optimale Zeilenhöhe
mysheet.Rows(17).OptimalHeight = True
end sub
Mit diesem Code werden zuerst die leeren Zeilen eingefügt und danach die gesamten Inhalte des Bereiches A3:S15 (Damit die Formate übertragen werden). Im Anschluss werden nur die Werte des Bereiches A3:S15 noch einmal eigefügt und bei der Zeile 17 die optimale Höhe eingestellt weil die Spaltenüberschriften in A3:S3 länger als die Zellen sind und von von mir umgebrochen wurden, so dass drei Wörter untereinander in der Zelle stehen, die Zeile wurde dadurch 1,13 cm hoch. Nach dem Kopieren/Einfügen war von den Spaltenüberschriften nur das erste Wort zu sehen, weil die Zeile nur noch 0,47 cm hoch war.
Das ist zwar irgendwie "doppelt gemoppelt", aber anders wusste ich mir nicht zu helfen.
Sicherlich kann man das auch eleganter machen.
Viele Grüße
Ich Bins
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Mi 17. Nov 2021, 10:54
von karolus
Hallo
Die Zeile mit dem x = … ist tatsächlich doppelgemoppelt, lass die weg, und tausche zwei Zeilen weiter unten das x gegen QuelleRange.DataArray
Und übertreibe es nicht mit den Kommentaren… da steht jetzt eigentlich nur das was auch man auch offentsichtlich in der Code-zeile untendrunter liest.
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Mi 17. Nov 2021, 20:58
von Ich Bins
Hallo karolus,
QuelleRange.DataArray an Stelle von x funktioniert tadellos. Vielen Dank!
Bisher war ich mit Kommentaren viel zu sparsam.
Viele Grüße
Ich Bins
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 00:44
von Ich Bins
Hallo karolus,
Im weiteren Verlauf hat sich jetzt die Situation ergeben, dass ich nur die Verknüpfung benötige und nirgends etwas hilfreiches dazu finden konnte.
Im Sheet1 benötig ich in B21:B24 nur die Verknüpfungen zu Sheet2 B3:B6.
Code: Alles auswählen
sub Verknuepfung_erstellen
Doc = thisComponent
mysheet1 = Doc.Sheets().getByName("Blatt1")
mysheet2 = Doc.Sheets().getByName("Blatt2")
x = mysheet1.getCellRangeByName("B3:B6").GetDataArray()
mysheet2.getCellrangeByName("B21:B24").SetDataArray(x)
End Sub
Damit erhalte ich nur die Werte des Quellbereiches.
Viele Grüße
Ich Bins
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 06:59
von karolus
Im Sheet1 benötig ich in B21:B24 nur die Verknüpfungen zu Sheet2 B3:B6.
das wird jetzt langsam albern…meinst du oberes wortwörtlich?
Falls ja:
…
myshee
t1.getCellrangeByName("B21:B24").
setArrayFormula("Shee
t2.B3:B6")
…
falls nein, dann bemüh deinen Grips, du kennst inzwischen alles was dazu nötig ist
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 11:01
von Ich Bins
Hallo karolus,
ja, ich meine es wortwörtlich, weil meine Basic-Kenntnisse dazu noch nicht ausreichend sind.
Nach der Übernahme von Deinem Vorschlag
Code: Alles auswählen
sub Verknuepfung_erstellen
Doc = thisComponent
mysheet1 = Doc.Sheets().getByName("Blatt1")
mysheet2 = Doc.Sheets().getByName("Blatt2")
mysheet1.getCellrangeByName("B21:B24").setArrayFormula("mysheet2.B3:B6")
End Sub
erhalte ich in Blatt1

- setArrayFormula.JPG (11.39 KiB) 2856 mal betrachtet
und in jeder Zelle B21-B24 von Blatt1 wurde {=#BEZUG!.B3#BEZUG!.B6} eingetragen.
In B21 von Blatt1 benötige ich $Blatt2.B3.
Bei einem Klick in die Eingabezeile auf {=#BEZUG!.B3#BEZUG!.B6} erhalte ich die Information
i Sie können nicht nur einen Teil einer Matrix ändern.
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 11:09
von karolus
Hallo
woher soll Calc denn wissen das du mit 'mysheet2' eigentlich 'Blatt2' meinst??
Code: Alles auswählen
sub Verknuepfung_erstellen
Doc = thisComponent
mysheet1 = Doc.Sheets().getByName("Blatt1")
mysheet2 = Doc.Sheets().getByName("Blatt2")
mysheet1.getCellrangeByName("B21:B24").setArrayFormula("Blatt2.B3:B6")
End Sub
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 12:05
von Ich Bins
Hallo karolus,
nun hat es geklappt, besten Dank!
Jetzt sind in jeder Zelle B21-B24 von Blatt1 die entsprechenden Werte von Blatt2 zu sehen und in der Eingabezeile dazu ist bei jeder Zelle {=Blatt2.B3:B6} eingetragen. Ein Klick in die Eingabezeile auf {=Blatt2.B3:B6} liefert die Information:
i Sie können nicht nur einen Teil einer Matrix ändern.
Ist das unumgänglich?
Mit der Zeile
Code: Alles auswählen
mysheet1.getCellrangeByName("D21").setArrayFormula("Blatt2.D3")
kann dann auch nur die Verknüpfung zu einer Zelle von Blatt2 übergeben werden, die in der Eingabezeile von Blatt1 in Zelle D21 so {=Blatt2.D3} zu sehen ist.
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 12:18
von karolus
Ich Bins hat geschrieben: ↑Fr 19. Nov 2021, 12:05
Hallo karolus,
nun hat es geklappt, besten Dank!
Jetzt sind in jeder Zelle B21-B24 von Blatt1 die entsprechenden Werte von Blatt2 zu sehen und in der Eingabezeile dazu ist bei jeder Zelle {=Blatt2.B3:B6} eingetragen. Ein Klick in die Eingabezeile auf {=Blatt2.B3:B6} liefert die Information:
i Sie können nicht nur einen Teil einer Matrix ändern.
Ist das unumgänglich?
Wenn du hinterher noch manuell rumpfuschen willst, musst du halt alle drei Zellen selektieren!
Ich Bins hat geschrieben: ↑Fr 19. Nov 2021, 12:05
Mit der Zeile
Code: Alles auswählen
mysheet1.getCellrangeByName("D21").setArrayFormula("Blatt2.D3")
kann dann auch nur die Verknüpfung zu einer Zelle von Blatt2 übergeben werden, die in der Eingabezeile von Blatt1 in Zelle D21 so {=Blatt2.D3} zu sehen ist.
Wenn du jetzt unbedingt jede Formel einzeln möchtest

dann mach halt:
Code: Alles auswählen
mysheet1.getCellrangeByName("D21").setFormula("=Blatt2.D3")
'usw.'
Re: Leere Zeilen einfügen und kopierten Bereich nur mit Werten und Formaten einfügen
Verfasst: Fr 19. Nov 2021, 15:28
von Ich Bins
Hallo karolus,
rumpfuschen? Welch garstig Wort.
Wie sage ich's dem Vater, der Mutter, den Kinder, siebenköpf'ger Schar? (Otto)
Ich möchte nicht jede Formel einzeln, aber ich habe Arbeitsblätter mit mehreren einzelnen (eine Zelle)
Verknüpfungen zu anderen Arbeitsblättern und umgekeht.
Hin und wieder muss ich neue Arbeitsblätter hinzufügen bei denen ich bisher immer alles manuell eingerichtet habe.
Jetzt versuche ich diese Vorgänge zu automatisieren.
Wenn die mit Basic erstellten Verknüpfungen nur in dieser Ausprägung
{=Blatt2.B3:B6}
{=Blatt2.D3}
zu erstellen sind ist es halt so und ich muss damit zurecht kommen.
Viele Grüße
Ich Bins