In einer Zelle verschiedene Attribute

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo und Guten Morgen liebe Leute,

jetzt wird es doch mal langsam Zeit, das ich auch hier mal reinschaue. :D

Und wie sollte es auch anders sein, komme ich auch gleich mit einem Problem daher. :wink:

Ich weiss nicht die passenden Suchparameter. Hatte vorhin welche probiert, aber mit negativen erfolg. Deshalb muss ich um eure hilfe bitten.

Also, ich habe da einen "Tisch-Kalender" mit 12 Blatt und pro Blatt 3 Monate. Pro Monat sind anstatt 6 nur 5 Datumsreihen. Daraus ergibt sich, das in der 5 und letzten Reihe zwei Zellen ein Doppeldatum haben können.
In etwa so.
dd-1.jpg
dd-1.jpg (28.02 KiB) 2614 mal betrachtet
Frage:
Wie bekomme ich das mit Makro hin, das es ungefähr so aussieht?
dd-2.jpg
dd-2.jpg (27.25 KiB) 2613 mal betrachtet
Wie unschwer zu erkennen ist, soll durch die Fette Zahl ein Feiertag (in diesem Beispiel Ostermontag) angezeigt werden.
Erschwerend kommt hinzu, das so ein Doppeldatum in verschiedenen Kombinationen auftreten kann.
-> Mo = Normal & Feiertag
-> Di = Normal & Feiertag
-> Mo & Di = Feiertag & Feiertag
-> Mo = Feiertag & Normal
-> Di = Feiertag & Normal
(das müssten alle Kombis sein, falls ich keine vergessen habe :? )

Ferner müsste berücksichtigt werden, das der mittlere Monat eine größere Schrift hat, als der obere und der untere. Was vielleicht die Sache vereinfacht, ist, das nur Fett in Schwarz dargestellt werden soll. Also keine andere Farbe.

Könnt ihr mir helfen?
Ich habe von Makro ABSOLUT Null-Ahnung. :oops:

Für eure bemühungen bedanke ich mich schon mal recht herzlich :D . Auch wenn es nur für das lesen ist.



Bild
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: In einer Zelle verschiedene Attribute

Beitrag von Charly »

Hallo Balu!

Die Möglichkeit der unterschiedlichen Attribute in einer Zelle per Makro, hätte mich auch interressiert. Manuell kann man das in Calc ja ohne Schwierigkeit machen. Aber welches Steuerkennzeichen verwendet Calc dabei? Ich weiß es nicht.

Wenn ich allerdings ein Kalender-Makro schreiben müsste, würde ich mich nicht lange mit dieser Frage aufhalten. Ich würde einfach ein Hilfstabellenblatt anlegen. In diesem Tabellenblatt würde ich zunächst mit Hilfe der Funktion Ostersonntag alle beweglichen Feiertage des gewünschten Jahres ermitteln. Dazu noch die feststehenden Feiertage. Das kann man durch Formel so gestalten, dass nur die Eingabe der gewünschten Jahreszahl notwendig ist.

In weiteren Zellen würde ich alle Kombinationen der möglichen Doppeltage 23/30 und 24/31 auflisten.

Mit Hilfe der Feiertagsliste kann ich dann in meinem Makro die zutreffende Zelle finden und den Inhalt mit Copyrange an die gewünschte Stelle im Kalender kopieren. Mit CopyRange werden auch die Teilattribute mitkopiert.


Gruß
Charly
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: In einer Zelle verschiedene Attribute

Beitrag von ykcim »

Hallo,

um den Text einer Zelle per Makro unterschiedlich zu formatieren muß man den Textcursor verwenden.
Um zum Beispiel die ersten drei Buchstaben einer Zelle fett zu formartieren:

sheet = ThisComponent.CurrentController.ActiveSheet
textcur=sheet.getcellbyposition(0,0).gettext().createtextcursor()
textcur.gotostart(false)
textcur.goright(3,true)
textcur.CharWeight=com.sun.star.awt.FontWeight.BOLD

mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo Charly und Michael,

für die ideen erst einmal ein danke schön an euch beiden. :D

@Charly
Eine seperate Feiertagsliste hatte ich natürlich schon erstellt. Das mache ich immer so. :wink:
Die Idee, mit einem extra Bereich zum gestallten der Doppeltage, ist nicht schlecht. Und je nachdem wie ich weiter vorgehe, werde ich auch darauf zurückgreifen. Muss erst mal ein wenig Experimentieren.

@Michael
Das ist das, was ich mir in meinem geistigen Auge vorgestellt hatte :D . Ich habe das noch nicht Programmiert, da ich erst mal versucht habe das zu verstehen was da geschieht.

Zu deinem Code hätte ich noch ein paar fragen.
  • sheet = ThisComponent.CurrentController.ActiveSheet
  • Wird damit das Tabellenblatt, wo der Mauscursor ist, das Aktive Blatt?
  • textcur=sheet.getcellbyposition(0,0).gettext().createtextcursor()
  • Aktuelles Tabellenblatt, gehe auf den Zellenanfang, schalte um auf Textcursor? (reihenfolge nicht krrekt, aber ist ja nur wegen verständnis)
  • textcur.gotostart(false)
  • Textcursor steht am Wortanfang, bei Position 0. Wenn ich jetzt ab dem zweiten Zeichen eine Markierung beginnen will, dann müsste das textcur.gotostart(2,true) heißen. Stimmt das?
  • textcur.goright(3,true)
  • Markiere mit dem Textcursor 3 Zeichen nach rechts.
  • textcur.CharWeight=com.sun.star.awt.FontWeight.BOLD
  • Schalte um auf Schriftgrad, und wähle die Bibliothek "com.sun.star.awt.FontWeight" aus. Anschließend den Schriftgrad Fett (BOLD) setzen.
Und wenn ich das richtig sehe, ist dieser Code nur für ein Tabellenblatt. Und ferner muss eine Zelle manuell mit der Maus angewählt werden. Korrekt!?

Trifft meine Interpretation soweit zu?

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
ykcim
*****
Beiträge: 324
Registriert: Di, 29.07.2003 15:22
Wohnort: Neu-Isenburg
Kontaktdaten:

Re: In einer Zelle verschiedene Attribute

Beitrag von ykcim »

Hallo Balu,
sheet = ThisComponent.CurrentController.ActiveSheet
Wird damit das Tabellenblatt, wo der Mauscursor ist, das Aktive Blatt?


Ja, alternativ kannst Du das Blatt auch direkt auswählen:

Code: Alles auswählen

myDoc = thisComponent
sheet = myDoc.Sheets().getByName("Tabelle2")
textcur=sheet.getcellbyposition(0,0).gettext().createtextcursor()
Aktuelles Tabellenblatt, gehe auf den Zellenanfang, schalte um auf Textcursor? (reihenfolge nicht krrekt, aber ist ja nur wegen verständnis)


Mit getsellbyposition geht man nicht auf den Zellenanfang, sondern wählt sich eine Zelle aus. In diesem Fall A1. Für B2 zum Beispiel müsste man (1,1) verwenden.
textcur.gotostart(false)

Textcursor steht am Wortanfang, bei Position 0. Wenn ich jetzt ab dem zweiten Zeichen eine Markierung beginnen will, dann müsste das textcur.gotostart(2,true) heißen. Stimmt das?


Nein, gotostart setzt den Cursor an den Anfang. Weitere Parameter gehen nicht. Wenn Du mit der Markierung ab dem zweiten Zeichen beginnen willst musst Du den Cursor vorher ohne Markierung an die zweite Stelle bewegen und dann die nächsten Zeichen markieren. Um zum Beispiel die drei Zeichen ab dem zweiten Zeichen zu markieren:

Code: Alles auswählen

textcur.goright(2,false)
textcur.goright(3,true)
textcur.goright(3,true)
Markiere mit dem Textcursor 3 Zeichen nach rechts.


Richtig
textcur.CharWeight=com.sun.star.awt.FontWeight.BOLD
Schalte um auf Schriftgrad, und wähle die Bibliothek "com.sun.star.awt.FontWeight" aus. Anschließend den Schriftgrad Fett (BOLD) setzen.


com.sun.star.awt.FontWeight.BOLD ist eine Konstante und keine Bibliothek. com.sun.star.awt.FontWeight.BOLD hat den Wert 150.

Und wenn ich das richtig sehe, ist dieser Code nur für ein Tabellenblatt. Und ferner muss eine Zelle manuell mit der Maus angewählt werden. Korrekt!?
Nein die Zelle muss nicht markiert sein. Die Zelle wird mit getbyposition ausgewählt und ist unabhängig von der Maus
Wenn man die aktuelle Zelle verweden will geht das mit getCurrentSelection().

Code: Alles auswählen

zelle=oDoc.getCurrentSelection()
mfg
Michael
__
FAQ zu Starbasic -> http://www.starbasicfaq.de
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo Michael,

danke für deine erklärungen. Sie sind für mich sehr aufschlussreich. :D

Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo Leute,

ich hab mich wieder mit dieser Problematik befasst, aber ich finde keine möglichkeit mein Vorhaben zu realisieren. Ich hatte hier im Forum ein Makro gefunden das mir meine voreingestellte Formatierung überträgt, dass aber nur mit festen Adressen arbeitet. Nur ist es ja leider so, dass es im Kalender kein Festes Datum gibt da es ja immer wandert.

Ich hatte mir überlegt, wenn ich eine Liste erstelle worauf ein Makro zugreifen kann, um so leichter müsste es sein ein passendes Makro zu programmieren. Aber da habe ich mal wieder die Rechnung ohne den Wirt gemacht, sprich, mein Verstand. Ich versteh null-komma-nix :? . Ich weiss nicht wie ich das hinbekommen soll :roll: :(
Charly hat geschrieben: Ich würde einfach ein Hilfstabellenblatt anlegen.
[...]
In weiteren Zellen würde ich alle Kombinationen der möglichen Doppeltage 23/30 und 24/31 auflisten.
Das habe ich jetzt auch mittels Formeln gemacht. Dort wird automatisch pro Monat die Doppeltage-Kombinationen angezeigt. Ferner lasse ich mir dort auch noch die passende Formatvorlagennummer anzeigen. Das sieht dann z.B. so aus.

Code: Alles auswählen

Mai	1	Blatt Nr.5	23/30V5		24/31V7
-> Die Zahl neben dem Monat ist ein Hilfsindex (nur für dort zu gebrauchen)
-> Blatt Nr. ist klar, wobei da die Zählweise ab 0 beginnt.
-> Das erste Doppeldatum kommt in die Zelle B16.
-> V5 ist die Formatvorlagennummer für das erste Doppeldatum.
-> Jetzt kommt das zweite Doppeldatum, dass in die Zelle C16 kommt.
-> V7 ist die Formatvorlagennummer für das zweite Doppeldatum.

Der Inhalt dieser Zeile ist nicht immer, und auch nicht immer gleichmäßig, mit diesen Daten ausgefüllt, das ist von Jahr zu Jahr unterschiedlich. Es kann auch manchmal gar nichts drin stehen, bis auf den Monatsnamen, der steht fest verankert.

Anmerkungen:
- Die Zellen B16 und C16 stehen fest. Ein Doppeldatum kann in keine andere Zelle kommen, zumindest nicht mit der gewünschten Formatierung.
- Es stehen insgesamt 6 Formatvorlagen bereit. 4 für Feiertage, und 2 für normale Tage.


Also wie bekomme ich das hin, dass das Makro in diesem Zusatzblatt nachschaut welcher Monat welche und wieviele Doppeldatume hat, und diese anhand der Formatvorlagennummer auf dem dementsprechenden Monat überträgt?
Es können mal 2, aber auch 4 Monate sein, die solche Doppeldatume haben.

Damit ihr mich besser versteht wie das ganze in ungefähr aussieht, und aussehen soll (Tabellenblatt "Apr"), habe ich den Kalender in den Anhang getan. Er ist noch nicht fertig, und hat da auch noch kleinere Fehler die aber für das Makro uninteressant sind.


Es wäre schön wenn ihr mir helfen könnt. :)

Ich bedanke mich schon mal für eure Bemühungen. :D


Gruß
balu
Dateianhänge
Tischkalender_Baustelle.ods
(33.72 KiB) 50-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Karolus
********
Beiträge: 7532
Registriert: Mo, 02.01.2006 19:48

Re: In einer Zelle verschiedene Attribute

Beitrag von Karolus »

Hallo Balu
Das zentrale Problem ist doch, das du mitttels Formeln keine unterschiedlichen Schriftattribute in eine Zelle bekommst.
per Makro hab ich zu dem Thema auch nichts gefunden - - nach 2 Stunden xray kam dann forlgendes raus:

Code: Alles auswählen

sub formatwechsel
osheet = thisComponent.sheets(0)
ocell = osheet.getcellrangebyname("B16")
ocursor = ocell.createtextcursor
xray ocursor
 ocursor.gotostart(true)
' ocursor.goright(10,true)
'ocursor.collapseToStart()
ocell.insertstring(ocursor," normal ",true)
ocursor.charcolor = rgb(255,0,0)
ocursor.charweight = 150
ocell.insertstring(ocursor," fettundrot ",false)
end sub
Den Rest erledigen wir morgen !

Gruß Karo
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo Karo,

erst mal ein Danke schön an dich :D
Karolus hat geschrieben: Das zentrale Problem ist doch, das du mitttels Formeln keine unterschiedlichen Schriftattribute in eine Zelle bekommst.
Das weiss ich doch :wink:
Ich bin jetzt mal wieder zu lange mit diesem Prob beschäftigt. Die letzten Tage krampfhaft versucht mit Code-Schnipsel, die ich hier gefunden hatte, mir etwas geeignetes aufzubauen. Ich träume schon mittlerweile davon. Und da kann es natürlich durchaus vorkommen, dass ich das nicht deutlich rübergebracht habe, dass es mir darum geht ein vorhandenes Format aus dem Quellbereich per Makro auf die zutreffende Stelle (Zielbereich) zu übertragen.
Bei meinen gestrigen recherchen bin ich da wohl schon öfters auf xray gestoßen, hatte aber keine Kraft mehr gehabt mir den englischen Text durchzulesen, und zu verstehen. Und deshalb habe ich deinen Code noch nicht testen können, weil ich xray noch net installiert habe.

Hier ist der Code, mit dem ich getestet hatte wie das in echt aussieht, wenn das Format aus dem Quellbereich übertragen wird.

Code: Alles auswählen

        Sub kopiere

    dim CellRangeAddress as New com.sun.star.table.CellRangeAddress
    dim CellAddress as New com.sun.star.table.CellAddress

    Document = ThisComponent


    Rem Anfangsaddresse des Quellbereichs

    CellRangeAddress.Sheet = 14
    CellRangeAddress.StartColumn = 21
    CellRangeAddress.StartRow = 2

    Rem Endaddresse des Quellbereichs

    CellRangeAddress.EndColumn = 21
    CellRangeAddress.EndRow = 2

    Rem Anfangsaddresse des Zielbereiches

    CellAddress.Sheet = 5
    CellAddress.Column = 1
    CellAddress.Row = 15


    Rem Arbeitsblatt auswählen

    oBlatt = Document.sheets(5)


    oBlatt.copyrange(CellAddress, CellRangeAddress)


    end Sub

Zum Testen hatte ich ihn so geändert, dass ich erst mal nur eine Formatzelle übertrage. Man kann aber, wie unschwer zu sehen ist, einen ganzen Bereich transferieren. Aber wie müsste ich ihn umbauen, dass er je nach Blatt-Nr: eine oder zwei Zellen kopiert. :roll:

Ich weiss das meine Formulierungen momentan nicht die besten sind, aber ich krieg meine gedanken nicht mehr so recht zu Papiere. Sorry dafür :oops:


Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: In einer Zelle verschiedene Attribute

Beitrag von Charly »

Hallo Balu!

Ich habe mich mal an der gewünschten Formatübertragung versucht. Allerdings nicht mit einer Funktion, sondern mit einem "Sub". Vor der Übertragung habe ich zunächst die alte Formatierung herstellt, indem ich in die Felder B16 und C16 deine Funktion geschrieben habe. Dann habe ich deine Hilfstabelle abgearbeitet und je nach Vorlagennummer kopiert. Die beiden Zeilen Ostermontag und Pfingssonntag habe ich dabei nicht berücksichtigt. Hier mein Ergebnis:

Code: Alles auswählen

Sub FormatKalender()

Dim Doc as Object
Dim Monate
Dim Hilfsblatt as Object
Dim Formel1 as String
Dim Formel2 as String
Dim Monatsblatt as Object
Dim Zelle as Object
Dim Suche as String
Dim Quelle as Object
Dim Ziel as Object

Doc = ThisComponent
Hilfsblatt = Doc.sheets.getByName("temp_KALENER")
Monate =Array("Dez","Jan","Feb","Mrz","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov")

'Alte Formatierungen zurücksetzen

Formel1 = "=DoMo_mitte"
Formel2 = "=DoDi_mitte"

For I = 0 to 11

Monatsblatt = Doc.sheets.getByName(Monate(I))
Zelle = Monatsblatt.getCellRangeByName("B16")
Zelle.formula = Formel1


Zelle = Monatsblatt.getCellRangeByName("C16")
Zelle.formula = Formel2

next I

'Neue Formatierungen für B16 übertragen

For I = 0 to 11

Kenn = 0
Suche = Hilfsblatt.getCellByPosition(15,I+4).string
Select Case Suche

Case "V1"
Quelle = Hilfsblatt.getCellrangeByName("T3").getRangeAddress()

Case "V2"
Quelle = Hilfsblatt.getCellrangeByName("V3").getRangeAddress()

Case "V3"
Quelle = Hilfsblatt.getCellrangeByName("X3").getRangeAddress()

Case "V4"
Quelle = Hilfsblatt.getCellrangeByName("Z3").getRangeAddress()

Case "V5"
Quelle = Hilfsblatt.getCellrangeByName("AB3").getRangeAddress()

Case "V7"
Quelle = Hilfsblatt.getCellrangeByName("AF3").getRangeAddress()

Case Else
Kenn = 1
End select

If Kenn = 0 then
Monatsblatt = Doc.sheets.getByName(Monate(I))
Ziel = Monatsblatt.getCellRangeByName("B16").getCellAddress()
Monatsblatt.copyrange(Ziel, Quelle)
End if

Next I

'Neue Formatierungen für C16 übertragen

For I = 0 to 11

Kenn = 0
Suche = Hilfsblatt.getCellByPosition(17,I+4).string
Select Case Suche

Case "V1"
Quelle = Hilfsblatt.getCellrangeByName("T3").getRangeAddress()

Case "V2"
Quelle = Hilfsblatt.getCellrangeByName("V3").getRangeAddress()

Case "V3"
Quelle = Hilfsblatt.getCellrangeByName("X3").getRangeAddress()

Case "V4"
Quelle = Hilfsblatt.getCellrangeByName("Z3").getRangeAddress()

Case "V5"
Quelle = Hilfsblatt.getCellrangeByName("AB3").getRangeAddress()

Case "V7"
Quelle = Hilfsblatt.getCellrangeByName("AF3").getRangeAddress()

Case Else
Kenn = 1
End select

If Kenn = 0 then
Monatsblatt = Doc.sheets.getByName(Monate(I))
Ziel = Monatsblatt.getCellRangeByName("C16").getCellAddress()
Monatsblatt.copyrange(Ziel, Quelle)
End if

Next I

End Sub
Ich hoffe es funktioniert in allen Fällen. Zu einem umfangreichen Test hatte ich keine Zeit mehr.

Gruß

Charly
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo Charly,

Du glaubst gar nicht wie Glücklich Du mich gemacht hast :lol: :D

Der Kalender trägt nicht umsonst den Beinamen "Baustelle", da ich selber noch einige Formeln umprogrammieren muss. Und dann ist das mit den Feiertagen auch kein Thema, da sie jetzt als nächstes mit in die anderen Formeln einfließen werden.

Meine bisherigen Tests zauberten mir ein glückliches Lächeln in mein Gesicht. :D
Merci! Merci! Merci!


Eine Frage habe ich da aber noch.
Sehe ich das richtig, dass "Kenn" ein Patzhalter (Variable) ist, die also den Indexzähler aufnimmt? Oder wie verhält sich das?



Gruß
balu
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: In einer Zelle verschiedene Attribute

Beitrag von Charly »

Hallo Balu!

Es freut mich, dass dir das Programm hilft. :D

"Kenn" ist nur eine Hilfsvariable für die Select Case Abfrage und die folgende If-Abfrage. Ich starte in die Abfrage mit dem Wert = 0. Wird V1 bis V7 gefunden bleibt der Wert 0, wird kein Sonderformat gefunden, erhält die Variable den Wert = 1. Die IF-Abfrage wird nur bei Wert = 0 durchlaufen, bei Wert 1 brauche ich sie ja nicht.

Gruß

Charly
Benutzeravatar
balu
********
Beiträge: 3812
Registriert: Fr, 24.08.2007 00:28
Wohnort: Warstein

Re: In einer Zelle verschiedene Attribute

Beitrag von balu »

Hallo liebe Freunde,

ich bin wirklich seeeeehr glücklich und zufrieden mit dem Ergebnis :lol:
Und ich möchte mich hiermit noch mal bei allen bedanken die mir mit Rat und Tat zur Seite standen. Danke :D

Der Kalender hat jetzt ein sehr gutes Beta-Stadium erreicht. Und Beta deshalb, weil da noch ein paar kleine Anderungen "unter der Motorhaube" zu erledigen sind, die aber mit der Hauptfunktion nichts zu tun haben.

Ich habe es sogar geschafft, dass Makro mit dem Drehfeld für die Jahresauswahl zu kombinieren. So braucht man nur noch das Jahr auszuwählen, und schwupp-di-wupp ist alles erledigt :D

Wer will kann ihn sich ja mal anschauen, er ist im Anhang.



Mir war bei meinen Tests etwas aufgefallen, was wahrscheinlich mit .getCellByPosition() zu tun hat. Ist nichts schlimmes, nur im ersten moment hatte es mich doch etwas verwirrt. Ich konnte jedoch das Problem selber herausfinden und beseitigen.

Um was ging es!?
In der Datei, die ich hier auch angehängt hatte, gab ich den Code von Charly ein. Er funktionierte auf anhieb einwandfrei! Aber als ich die Formeln, die in den Spalten "Vorlage" drin waren, in die anderen integrierte, gabs Probleme. Ich musste manchmal das Makro zweimal hintereinander aufrufen, damit alle definierten Felder ordnungsgemäß ausgefüllt wurden. Das war aber vorher nicht der Fall gewesen. Ich konnte im ersten Augenblick nicht herausfinden warum das so war. Es hatte sich eigentlich durch die integration nicht sehr viel geändert. Das einzige was offensichtlich war, das war jetzt die Optische Darstellung der anzuwendende Vorlage.
Vorher stand in der "Vorlagenspalte" z.B. V1
Und jetzt stand da auch wieder V1, nur mit dem einzigen unterschied das die Schrift Weiß, und der Hintergrund Blau war. Nun, das kam durch folgende Formel, hier der Reduzierte ausschnitt, zu stande.

Code: Alles auswählen

WENN(überprüfung;"V1"&T(V_1);sonst)
Mit &T(V_1) wies ich die eben erwähnte Farbvorlage zu.
Und erst als ich diesen Teil aus der Formel entfernte, funktionierte alles wieder einwandfrei.
Also muss sich wahrscheinlich aus irgendwelchen Gründen .getCellByPosition() an der Umwandelung einer Zahl in einen leeren Textstring stören.
Nun, das war ja auch nicht weiter schlimm, da ja dieses Tabellenblatt in diesem zustand für mich nur eine Programmier- und Vergleichshilfe war. Und in der jetzigen Version habe ich dieses Blatt von unnützen Ballast befreit. Es sind jetzt nur noch Sachen dort, die auch dahin gehören.

Ob das Problem jetzt aber auch wirklich an .getCellByPosition() gelegen hat, kann ich nicht mit gewissheit sagen. Ist mehr eine Laienvermutung meinerseits. Aber ich dachte mir mal, dass ich davon berichte.


@Charly
Danke für deine Erklärung bezüglich "Kenn", jetzt verstehe ich es :D
Ja ja! Die Zeiten als ich auf meinen Atari 800XL in Turbo-BASIC programmierte sind lange vorbei, und nicht mit diesem Basic hier zu vergleichen. Aber Spaß hatte es dennoch gemacht :lol:



Gruß
balu
Dateianhänge
Tischkalender_Beta.ods
(33.17 KiB) 43-mal heruntergeladen
Sei öfter mal ein Faultier, sag öfter mal "Ach was!" Dann kriegst du keinen Herzinfarkt, und hast ne menge Spass.

wehr rächtschraipfähler findet khan si behalden :D
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: In einer Zelle verschiedene Attribute

Beitrag von Charly »

Hallo Balu!

Dein Kalender schaut gut aus. Meine Gratulation.
Mir war bei meinen Tests etwas aufgefallen, was wahrscheinlich mit .getCellByPosition() zu tun hat.
Das Problem hat nichts damit zu tun, sondern damit

Code: Alles auswählen

Case "V1"
Hier frägt das Makro nach dem Inhalt der Zelle ab. Ist dieser nicht identisch mit "V1", durch
Mit &T(V_1) wies ich die eben erwähnte Farbvorlage zu.
ignoriert das Makro den Wert.

Gruß
Charly
Charly
*****
Beiträge: 450
Registriert: Di, 20.01.2004 13:14
Wohnort: München

Re: In einer Zelle verschiedene Attribute

Beitrag von Charly »

Hallo Balu!

Ich habe mir noch mal Gedanken gemacht, über deinen Wunsch, der Vorlagenzellen eine Zellvorlage zuzuweisen.
Das kann auch über das Makro geschehen.

Ändere das Makro vor dem Befehl "select Case suche" wie folgt:

Code: Alles auswählen

Zelle = Hilfsblatt.getCellByPosition(4,I+4)
Suche = Zelle.string
Select Case Suche
Ordne jeder Auswahl, die gewünscht Vorlage folgendermaßen zu:

Code: Alles auswählen

Case "V1"
Quelle = Hilfsblatt.getCellrangeByName("K3").getRangeAddress()
Zelle.cellstyle = "V_1"
Mache auch noch eine neutrale Zellvorlage für die nicht betroffenen Zellen und ordne diese bei "Case Else" zu.

Code: Alles auswählen

Case Else
Kenn = 1
Zelle.cellstyle = "V_0"
Gruß
Charly
Antworten