CALC: auf ausgewählte Zeilen anwenden
Moderator: Moderatoren
CALC: auf ausgewählte Zeilen anwenden
Hallo,
derzeit versuche ich ein Makro, das ich gerade eben erstellt habe, auf mehrere Zeilen, die ich auswähle, in meinem Calc-Dokument zu formatieren. Könnt ihr mir dabei womöglich helfen? Wenn ich das Makro ausführe, dann wird die Formatierung ausschließlich in der Zeile gemacht, in der ich die Aufzeichnung des Makros genutzt hatte. Allerdings soll das Makro auf die Zeilen angewendet werden, die ich auswähle.
Zusätzliche Frage: Edit: Bei meiner Formatierung erscheint als Beispiel dieses Fenster mit der Meldung:
"Soll der Inhalt der verdeckten Zellen in die erste Zelle verschoben werden?"
Kann man dieses Fenster in das Makro aufzeichnen, dass es nicht immer wieder auftaucht und die bestimmten Zellen richtig verbindet?
Vielen Dank vorab für Rückmeldungen und hilfreiche Antworten.
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
derzeit versuche ich ein Makro, das ich gerade eben erstellt habe, auf mehrere Zeilen, die ich auswähle, in meinem Calc-Dokument zu formatieren. Könnt ihr mir dabei womöglich helfen? Wenn ich das Makro ausführe, dann wird die Formatierung ausschließlich in der Zeile gemacht, in der ich die Aufzeichnung des Makros genutzt hatte. Allerdings soll das Makro auf die Zeilen angewendet werden, die ich auswähle.
Zusätzliche Frage: Edit: Bei meiner Formatierung erscheint als Beispiel dieses Fenster mit der Meldung:
"Soll der Inhalt der verdeckten Zellen in die erste Zelle verschoben werden?"
Kann man dieses Fenster in das Makro aufzeichnen, dass es nicht immer wieder auftaucht und die bestimmten Zellen richtig verbindet?
Vielen Dank vorab für Rückmeldungen und hilfreiche Antworten.
Moderation,4: verschoben in BASIC-Unterbereich, wo alle Makro-Fragen hin gehören; Betreff angepasst
Re: Makro auf ausgewählte Zeilen anwenden
Dann hast Du das Makro faslsch aufgezeichnet, nämlich erst die Makroaufzeichnung gestartet und dann die Zellen marrkiert, statt erst die Zellen zu markieren und danach erst die Makroaufzeichnung zu starten.Wenn ich das Makro ausführe, dann wird die Formatierung ausschließlich in der Zeile gemacht, in der ich die Aufzeichnung des Makros genutzt hatte. Allerdings soll das Makro auf die Zeilen angewendet werden, die ich auswähle.
Nein, das kann man augenscheinlich nicht aufzeichnen, das der Dialog nicht mehr erscheint. Man muss es selbst programmieren, z.B.:Zusätzliche Frage: Edit: Bei meiner Formatierung erscheint als Beispiel dieses Fenster mit der Meldung:
"Soll der Inhalt der verdeckten Zellen in die erste Zelle verschoben werden?"
Kann man dieses Fenster in das Makro aufzeichnen, dass es nicht immer wieder auftaucht und die bestimmten Zellen richtig verbindet?
http://www.dannenhoefer.de/faqstarbasic ... inden.html
z.B. kann so die aktuelle (zusammenhängende) Zellauswahl verbunden/getrennt werden:
Code: Alles auswählen
oBereich = ThisComponent.getCurrentSelection
If oBereich.getIsMerged() then
oBereich.merge( false )
Else
oBereich.merge( true )
End If
Stephan
Re: Makro auf ausgewählte Zeilen anwenden
Damit du mich nicht falsch verstehst, erkläre ich es nochmal etwas anders. Als Beispiel habe ich ein Calc-Dokument, das gewisse Daten enthält wie z. B. Projekt, Person, Datum und Zeiten. Diese sind jeweils in den Spalten A(Projekt) verbinden -->> Spalte B, Spalte C(Person),Spalte D <<-- verbinden Spalte E(Datum) und Spalte F(Zeiten) aufgeteilt. Damit ich die Formatierung, die ich brauche für die unterschiedlichen Punkte, die ich genannt habe, habe ich eine Makroaufzeichnung gestartet und z. B. bei der Zeile 17 die Formatierung korrekt erstellt. Jetzt ist es aber so, dass das Makro beim Ausführen entsprechend auch nur die Zeile 17 formatiert. Mein Ziel ist es aber meinen Auswahlbereich per Makro zu formatieren. Z. B. wähle ich die Zeile 30 mit Spalte F bis Zeile 43 auch in Spalte F aus und möchte das Makro auf diesen Auswahlbereich anwenden. Ich besitze keine Basic-, VBA-Kenntnisse, nur JavaScript, C# etc.
Hier mein Code:
Hier mein Code:
Code: Alles auswählen
Sub Main
End Sub
sub TineFormatierung
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher 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 = "ToPoint"
args1(0).Value = oRange
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "Bold"
args2(0).Value = false
dispatcher.executeDispatch(document, ".uno:Bold", "", 0, args2())
rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "ToPoint"
args3(0).Value = "$A$18:$B$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args3())
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:ToggleMergeCells", "", 0, Array())
rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args5())
rem ----------------------------------------------------------------------
dim args6(0) as new com.sun.star.beans.PropertyValue
args6(0).Name = "ToPoint"
args6(0).Value = "$A$18:$C$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args6())
rem ----------------------------------------------------------------------
dim args7(0) as new com.sun.star.beans.PropertyValue
args7(0).Name = "VerticalAlignment"
args7(0).Value = 1
dispatcher.executeDispatch(document, ".uno:VerticalAlignment", "", 0, args7())
rem ----------------------------------------------------------------------
dim args8(0) as new com.sun.star.beans.PropertyValue
args8(0).Name = "HorizontalAlignment"
args8(0).Value = com.sun.star.table.CellHoriJustify.LEFT
dispatcher.executeDispatch(document, ".uno:HorizontalAlignment", "", 0, args8())
rem ----------------------------------------------------------------------
dim args9(0) as new com.sun.star.beans.PropertyValue
args9(0).Name = "WrapText"
args9(0).Value = true
dispatcher.executeDispatch(document, ".uno:WrapText", "", 0, args9())
rem ----------------------------------------------------------------------
dim args10(0) as new com.sun.star.beans.PropertyValue
args10(0).Name = "ToPoint"
args10(0).Value = "$D$18:$E$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args10())
rem ----------------------------------------------------------------------
dim args11(0) as new com.sun.star.beans.PropertyValue
args11(0).Name = "MoveContents"
args11(0).Value = true
dispatcher.executeDispatch(document, ".uno:ToggleMergeCells", "", 0, args11())
rem ----------------------------------------------------------------------
dim args12(0) as new com.sun.star.beans.PropertyValue
args12(0).Name = "ToPoint"
args12(0).Value = "$D$18:$F$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args12())
rem ----------------------------------------------------------------------
dim args13(0) as new com.sun.star.beans.PropertyValue
args13(0).Name = "VerticalAlignment"
args13(0).Value = 1
dispatcher.executeDispatch(document, ".uno:VerticalAlignment", "", 0, args13())
rem ----------------------------------------------------------------------
dim args14(0) as new com.sun.star.beans.PropertyValue
args14(0).Name = "HorizontalAlignment"
args14(0).Value = com.sun.star.table.CellHoriJustify.RIGHT
dispatcher.executeDispatch(document, ".uno:HorizontalAlignment", "", 0, args14())
rem ----------------------------------------------------------------------
dim args15(0) as new com.sun.star.beans.PropertyValue
args15(0).Name = "ToPoint"
args15(0).Value = "$D$18"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args15())
end sub
Re: CALC: auf ausgewählte Zeilen anwenden
Ohne Programmierkenntnise wirst Du wohl nicht weiterkomnmen. Das aufgezeichnete Makro ist im Speziellen wenig hilfreich, da u.A. wegen der Anforderung das kein Dialog beim Verbinden von Zellen erscheinen soll, soviele händische Änderungen am Makro notwendig sind, das es einfacher ist das Makro gleich völlig neu zu schreiben.
Unklar sind mir einige TEile des Makros, weshalb ich annehme Du hast da selbst bereits Anpassungen vorgenommen. Ist das so?
Worum geht es?
Die Zeile:
wurde garantiert nicht aufgezeichnet und oRange ist ohne Inhalt.
Gruß
Stephan
Unklar sind mir einige TEile des Makros, weshalb ich annehme Du hast da selbst bereits Anpassungen vorgenommen. Ist das so?
Worum geht es?
Die Zeile:
Code: Alles auswählen
args1(0).Value = oRange
Gruß
Stephan
Re: CALC: auf ausgewählte Zeilen anwenden
Tatsächlich habe ich selbst versucht mittels Codeschnipseln irgendwie das hinzubekommen. Offenbar ohne Erfolg.
Das unten aufgeführte Bild zeigt, was ich mit dem Makro erreichen möchte. Zu sehen ist, dass mein Standard-Dokument eine unschöne Formatierung hat, die ich beheben möchte, da ich die gefordete Formatierung für ein bestimmtes Programm übernehmen möchte und es auch nur so übergeben kann. Mithilfe des Makros möchte ich es mir leichter machen, die Zellen zu formatieren. Speziell das Verbinden der Zellen ist eine mühsame Arbeit, da ich jede Zelle A mit der Zelle B daneben makieren und verbinden muss. Bei 1000 solcher Zellen kann das extrem viel Zeit nehmen, daher brauche ich das Makro damit das vereinfacht wird, indem ich alle Zellen A's und B's auswähle und das Makro ausführe.
Projekt:
soll...
soll...
soll...
soll...
Das unten aufgeführte Bild zeigt, was ich mit dem Makro erreichen möchte. Zu sehen ist, dass mein Standard-Dokument eine unschöne Formatierung hat, die ich beheben möchte, da ich die gefordete Formatierung für ein bestimmtes Programm übernehmen möchte und es auch nur so übergeben kann. Mithilfe des Makros möchte ich es mir leichter machen, die Zellen zu formatieren. Speziell das Verbinden der Zellen ist eine mühsame Arbeit, da ich jede Zelle A mit der Zelle B daneben makieren und verbinden muss. Bei 1000 solcher Zellen kann das extrem viel Zeit nehmen, daher brauche ich das Makro damit das vereinfacht wird, indem ich alle Zellen A's und B's auswähle und das Makro ausführe.
Projekt:
soll...
- keine Füllung haben
- Zeilenumbruch haben
- linksbündig sein und Ausrichtung "oben" haben
- kein "fettdruck" haben
- mit Spalte B verbinden
soll...
- Zeilenumbruch haben
- linksbündig sein und Ausrichtung "oben" haben
soll...
- mit Spalte D verbinden (links davon)
- rechtsbündig sein und Ausrichtung "oben" haben
soll...
- rechtsbündig sein und Ausrichtung "oben" haben
Re: CALC: auf ausgewählte Zeilen anwenden
Verständlich.Speziell das Verbinden der Zellen ist eine mühsame Arbeit, da ich jede Zelle A mit der Zelle B daneben makieren und verbinden muss. Bei 1000 solcher Zellen kann das extrem viel Zeit nehmen, daher brauche ich das Makro damit das vereinfacht wird, indem ich alle Zeilen A und B's auswähle und das Makro ausführe.
OK, dann beschränke ich mich mal auf diesen Teil, das hilft Dir dann zumindest ein Stück weiter.
Folgendes Makro verbindet die jeweils 2 horizontal nebeneinanderliegenden Zelle eines, beliebig großen, zweispaltigen Zellbereichs und übernimmt die Inhalte beider Zellen.
Code: Alles auswählen
Sub Zellen_verbinden()
sel = ThisComponent.getCurrentSelection
tc = ThisComponent
With sel(0).RangeAddress
sZ = .StartRow
eZ = .EndRow
sSp = .StartColumn
eSp = .EndColumn
blatt = .Sheet
End With
If Not(eSp-sSp = 1) Then
Msgbox "Kein zweispaltiger Zellbereich markiert.", 16, "Abbruch"
Exit Sub
End If
For i = sZ To eZ
tmp1 = tc.Sheets(blatt).getCellByPosition(sSp,i).String
tmp2 = tc.Sheets(blatt).getCellByPosition(eSp,i).String
tc.Sheets(blatt).getCellRangeByPosition(sSp,i,eSp,i).merge(true)
tc.Sheets(blatt).getCellByPosition(sSp,i).FormulaLocal = tmp1 & " " & tmp2
Next i
Msgbox "Fertig.", 64, ""
End Sub
Gruß
Stephan
Re: CALC: auf ausgewählte Zeilen anwenden
Wenn ich mir deine Screenshots so anschaue, hast du die potentiellen Helfer auf den falschen Weg gelockt. Du hast den Weg (Makro) vorgegeben, bevor dein eigentliches Ziel (Umformatieren) klar war.bitEx33 hat geschrieben: ↑Di, 16.05.2017 11:13Das unten aufgeführte Bild zeigt, was ich mit dem Makro erreichen möchte. Zu sehen ist, dass mein Standard-Dokument eine unschöne Formatierung hat, die ich beheben möchte, da ich die gefordete Formatierung für ein bestimmtes Programm übernehmen möchte und es auch nur so übergeben kann.
Zunächst frage ich mich, wieso du eine gefüllte Zelle mit einer leeren Zelle (im Spaltenbereich) verknüpfen willst, wo es doch viel einfacher wäre, die leere Spalte zu löschen und die gefüllte Spalte auf die gewünsche Breite einzustellen.
Falls ich das Standard-Dokument richtig interpretiere, wäre es besser, du würdest im Unterforum Calc deine Anfrage auf Formatierungshilfe neu stellen und als Arbeitsgrundlage einen Ausschnitt deines Standard-Dokuments als Datei mitliefern.
Hast du schon mal einen Blick in die Writer-FAQ und in die Calc-FAQ des Forums geworfen?
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Für jeden vor dem Beginn seiner Seminararbeit ein unbedingtes MUSS: http://openoffice-uni.org/
Re: CALC: auf ausgewählte Zeilen anwenden
Wow, vielen Dank, Stephan. Was wäre ich nur ohne dich? [-:
Ist es rein theoretisch möglich, alle Formatierungen in einem Makro umzusetzen oder würde das zu Fehlern führen? Ich würde mich nämlich gerne mal mit der Sprache auseinandersetzen, damit ich für die Zukunft das Wissen für solche Probleme nutzen kann.
Ist es rein theoretisch möglich, alle Formatierungen in einem Makro umzusetzen oder würde das zu Fehlern führen? Ich würde mich nämlich gerne mal mit der Sprache auseinandersetzen, damit ich für die Zukunft das Wissen für solche Probleme nutzen kann.
Re: CALC: auf ausgewählte Zeilen anwenden
Code: Alles auswählen
Sub Zellen_verbinden()
sel = ThisComponent.getCurrentSelection
tc = ThisComponent
With sel(0).RangeAddress
sZ = .StartRow
eZ = .EndRow
sSp = .StartColumn
eSp = .EndColumn
blatt = .Sheet
End With
If Not(eSp-sSp = 1) Then
Msgbox "Kein zweispaltiger Zellbereich markiert.", 16, "Abbruch"
Exit Sub
End If
For i = sZ To eZ
tmp1 = tc.Sheets(blatt).getCellByPosition(sSp,i).String
tmp2 = tc.Sheets(blatt).getCellByPosition(eSp,i).String
tc.Sheets(blatt).getCellRangeByPosition(sSp,i,eSp,i).merge(true)
tc.Sheets(blatt).getCellByPosition(sSp,i).FormulaLocal = tmp1 & " " & tmp2
Next i
Msgbox "Fertig.", 64, ""
End Sub
Hallo, Stephan, da ich gerne auch VBA lernen möchte, kannst du mir daher deinen obigen Code ein wenig erläutern, damit ich ihn besser nachvollziehen kann?
Re: CALC: auf ausgewählte Zeilen anwenden
der (Objekt-)Variable sel wird die aktuelle Selektion zugeordnet (also der markierte Bereich).
der Objekt-)Variable tc wird das Dokumentobjekt (also das gesamte aktuelle Calc-Dokument) zugeordnet
vom ersten Bereich (es gibt hier nur einen) der aktuellen SElektion werden aus dem zugehörigen Range-Objekt die werte für erste und Letzte Zeile und erste und letzte Spalte ausgelesen und Variablen zugeordnet:
Prüfen ob zweispaltiger Bereich, wenn nein dann Fehlermeldung ausgeben und abbrechen, wenn ja weitermachen.
Für jede Zeile im aktuell markierten Bereich:
-Den Inhalt der ersten Zelle in Variable tmp1 speichern
-Den Inhalt der zweitenZelle in Variable tmp2 speichern
-die erste und zweite Zelle verbinden
-den Inhalt von tmp1 und tmp2 in die veerbundene Zelle schreiben:
Fertig-Meldung anzeigen:
Gruß
Stephan
Code: Alles auswählen
sel = ThisComponent.getCurrentSelection
Code: Alles auswählen
tc = ThisComponent
Code: Alles auswählen
With sel(0).RangeAddress
sZ = .StartRow
eZ = .EndRow
sSp = .StartColumn
eSp = .EndColumn
blatt = .Sheet
End With
Code: Alles auswählen
If Not(eSp-sSp = 1) Then
Msgbox "Kein zweispaltiger Zellbereich markiert.", 16, "Abbruch"
Exit Sub
End If
-Den Inhalt der ersten Zelle in Variable tmp1 speichern
-Den Inhalt der zweitenZelle in Variable tmp2 speichern
-die erste und zweite Zelle verbinden
-den Inhalt von tmp1 und tmp2 in die veerbundene Zelle schreiben:
Code: Alles auswählen
For i = sZ To eZ
tmp1 = tc.Sheets(blatt).getCellByPosition(sSp,i).String
tmp2 = tc.Sheets(blatt).getCellByPosition(eSp,i).String
tc.Sheets(blatt).getCellRangeByPosition(sSp,i,eSp,i).merge(true)
tc.Sheets(blatt).getCellByPosition(sSp,i).FormulaLocal = tmp1 & " " & tmp2
Next i
Code: Alles auswählen
Msgbox "Fertig.", 64, ""
Stephan