Seite 1 von 1
CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Mo 31. Mär 2025, 18:32
von akoerber
Hallo,
ich habe eine Tabelle, in welcher immer wieder Zellen leer sind.
Diese möchte ich nun mit einem Makro mit der darüber verbinden.
Konkreter.
De Cursor steht etwa auf Zelle c5. Die nächste Zelle in Spalte C mit Inhalt ist C8.
Der Makro soll nun C5-C7 verbinden.
Wie gehe ich das an?
Mein bisheriger Ansatz sieht so aus, funktioniert leider nicht.
Code: Alles auswählen
sub zus_3
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim oZelle as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "By"
args1(0).Value = 1
Do
dispatcher.executeDispatch(document, ".uno:GoDownSel", "", 0, args1())
oZelle=ThisComponent.CurrentSelection.CellAddress
Loop while ISTLEER(oZelle)
dispatcher.executeDispatch(document, ".uno:GoUpSel", "", 0, args1())
end sub
Es geht also darum, so lange einen Schritt nach unten zu gehen, bis die Zelle nicht mehr leer ist, und dann einen zurück.
"CellAddress" wird aber nicht gefunden.
ja, man könne auch vorab abfragen, ob die darunter liegende Zelle leer ist, aber auch dazu brauche ich die Adresse.
Kann jd helfen?
Dank im Voraus
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Mo 31. Mär 2025, 21:41
von mikele
Hallo,
Diese möchte ich nun mit einem Makro mit der darüber verbinden.
Was ist der trifftige Grund dafür? Verbundene Zellen lassen sich meistens schwer handhaben und verusachen im weiteren eher Probleme.
Ich würde es so machen:
Code: Alles auswählen
Sub zusammen
oDoc=ThisComponent
oZelle=oDoc.CurrentSelection
leer=oZelle.Columns(0).queryEmptyCells.rangeaddresses
for i=0 to ubound(leer)-1
if oZelle.CellAddress.Row>=leer(i).StartRow-1 and oZelle.CellAddress.Row<leer(i).EndRow then
von = leer(i).StartRow
if von>0 then von=von-1
bis = leer(i).EndRow
bereich=oZelle.Spreadsheet.getCellRangeByPosition(leer(i).StartColumn,von,leer(i).StartColumn,bis)
bereich.merge(true)
end if
next
End Sub
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 10:02
von karolus
Hallo
wie bereits von Mikele angesprochen, würde man daß nie tun! und falls doch:
Code: Alles auswählen
def merge_empties(*_):
doc = XSCRIPTCONTEXT.getDocument()
col_ = doc.CurrentSelection.Columns[0]
empties = col_.queryEmptyCells()
for empty in empties[ :-1]:
empty.merge(True)
@mikele:
Code: Alles auswählen
Sub merge_empties
column = ThisComponent.CurrentSelection.Columns(0)
empties = column.queryEmptyCells()
For Each bereich in empties
bereich.merge(True)
next
bereich.merge(False)
End Sub
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 10:43
von akoerber
Danke.
Zunächst zu Deiner Frage. Weil die Tabelle so vorliegt. Sie stammt nicht von mir. Sie ist nicht von mir. ich bin gerade dabei, sie zu "bereinigen".
Derzeit sieht sie so aus (hier nachgestellt ohne Zellenlinien):
Code: Alles auswählen
A B C D E
Nummer NACHNAME1 VORNAME1 Karriereschritt 1 Belegverweis (u.a. URL)
(leer) (leer) Karriereschritt 2 Belegverweis (u.a. URL)
(leer) (leer) Karriereschritt 2 Belegverweis (u.a. URL)
Nummer NACHNAME2 VORNAME2 Karriereschritt 1 Belegverweis (u.a. URL)
(leer) (leer) Karriereschritt 2 Belegverweis (u.a. URL)
(leer) (leer) Karriereschritt 2 Belegverweis (u.a. URL)
Man könnte natürlich die hinteren Spalten jeweils untereinander verbinden. Dann gingen aber die Bezüge zwischen Karriereschritten und den Belegen verloren.
Die Felder in Spalte A zu jedem Fall sind schon verbunden, danach kann sortiert werden. Ich möchte aber auch nach Spalte B und C sortieren können (ja, ich weiß: ohne Formate).
Ich will daher erst einmal die untereinander stehenden Zellen in den Spalten B-C zusammenfassen, , denn es sind Nummern doppelt vorhanden, auch gibt es Personen, die unter mehreren Nummern geführt werden.
Dann aber: Dein Makro tut leider gar nichts.
Es gäbe aber vielleicht einen anderen Weg:
Kann man per Makro:
- in Spalte A den FormatPaintbrush das Format aufnehmen lassen,
- dann (relativ) eine Spalte nach rechts gehen,
- das Format übertragen,
- dort wieder das Format aufnehmen lassen,
- wieder eine Spalten nach rechts gehen?
Eine makro-Aufzeichnung nutzt "dispatcher.executeDispatch(document, ".uno:FormatPaintbrush", "", 0, Array())", aber auskommentiert mit rem und zudem konkrete Zelladressen.
Dank im Voraus,
A
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 11:27
von akoerber
karolus hat geschrieben: ↑Di 1. Apr 2025, 10:02
Sorry, aber Eure Ideen tun beide nicht (gar nichts)
Kann man denn mit Makros den FormatPinsel benutzen?
Wenn ich das per Hand mache geht es:
- Ich aktiviere ihn auf der bereits zusammengefügten Zelle in Spalte A
- Ich rufe das (per Maus!) auf der obersten Zelle desselben Falls in Spalte B ab -> die darunter liegenden Zellen werden verbunden, weil das in A auch so ist.
Makros aber zeichnen zwar den Formatpinselaufruf auf, aber auskommentiert (rem). ich finde ich keine Möglichkeit, das abzurufen.
Zudem: Wenn ich das aufzeichne und zunächst in der verbundenen Spalte mit CRTL-C den Inhalt kopieren, dann (nicht mit der Maus) nach rechts in die oberste Zelle des Falles in B gehe und per Kontextmenü nur das Format übertrage, wird NICHT erweiter, weil ich ja nicht den Pinsel aktiviert hatte.
Wenn ich den Pinsel mit der Maus aktiviere, dann mit der Tastatur einen Schritt nach rechts gehe, geht das ebenso wenig.
Hmmm
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 17:12
von akoerber
Noch ein Ansatz, aber ich habe keine Ahnung, ob und das mit Makros geht:
Wenn ich in der kombinierten Zelle in Spalte A stehe, wird diese oben als "Ax:Ay" angezeigt - abhängig davon, wie viele Zeilen dort zusammengefasst sind.
Kann man nun
1. diesen String auslesen
2. aus diesem String x und y entnehmen,
3. damit entsprechende Strings bauen und Bereiche selektieren: Bx:By, Cx:Cy etc
4. Die Zellen dieser Bereiche jeweils "verbinden" lassen
??
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 18:29
von mikele
Hallo,
was heißt
Dein Makro tut leider gar nichts.
Makros sind aktiviert? Wie rufst du das Makro auf? Gibt es eine Fehlermeldung?
Welche Zelle ist beim Makroaufruf aktiv?
Ich habe mein Makro mit beigefügtem Dokument getestet. Karolus' Makros funktionieren ebenso (auch wenn wir beide die Aufgabe etwas anders verstanden haben).
Was passiert bei dir in dieser Datei?
Die Felder in Spalte A zu jedem Fall sind schon verbunden, danach kann sortiert werden.
Genau das halte ich für einen Irrtum.
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 19:08
von akoerber
Danke
1. Ja, Makros sind aktiviert. Meine eigenen Versuche "gehen" - aber brechen ab. Diese tun GAR NICHTS. Sie starten gar nicht erst.
2. Inwiefern zweifelst Du daran, dass die Felder der Spalte A schon verbunden ist? Hier ein Screenshot, aber unkenntlich gemacht wegen Datenschutz...

- Tabelle_1.jpg (84.04 KiB) 1346 mal betrachtet
Wie gesagt - so übernommen, nicht mein Tabellendesign.
Es soll letztlich alles so aussehen wie in den Zeilen 2161 bis 2163
Bei 2165-2166 müssten also die Felder der Spalten C-E zusammengeführt werden (F und H sind hier schon), G ist eine leere Spalte, die ich für Zwischenkopien bei Korrekturen eingefügt habe. Die kommt wieder fort.
Es gibt aber eben auch 1-zeilige Einträge, wie etwa 2160, 2164, 2169
(wie) kann man nun
1. (Von B:2161 kommend) einen Schritt hinunter gehen (zu B2161:B2163)
2. Feststellen, OB das ein Zellenbereich oder eine Einzelzelle ist
3. DA Zellbereich
3a. in B2165:2166 stehend, diesen Wert auslesen,
3b. Ihn zerlegen
3c. daraus C2165:C2166 machen und einer Variable zuweisen (etwa zellen1)
3d. Dann im Makro einen Befehl bauen merge(zellen1)
3e. Das gleiche für Spalten D und E
6. sicherstellen dass man noch in Spalte B ist, und das Ganze wiederholen
Dank im Voraus
Das würde vielleicht schon helfen
Re: CALC Makro: Zelle mit leeren darunter verbinden?
Verfasst: Di 1. Apr 2025, 20:12
von mikele
Hallo,
zu 1) Woran erkennst du, dass das Makro nicht startet? Dafür muss es einen Grund geben. Ich gehe mal davon aus, dass du das Makro in deiner Datei gespeichert hast. Wie rufst du es aus.
zu 2) Ich zweifle nicht daran, dass die Zellen verbunden sind. Das ist schon offensichtlich. Ich zweifle daran , dass die Tabelle sich dann sinnvoll sortieren lässt.
Das, was du als Makrofunktionalität beschreibst, macht mein Makro bereits. Allerdings (!) nur für einen Bereich und zwar den, in dem sich die aktive Zelle befindet. Das müsste also z. B. C2165 sein.
Wenn die aktive Zelle, wie in deiner Abbildung, E2165 ist und diese Spalte leer ist, macht mein Makro nichts.