makro aufrufen tuts nicht...

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

Moderator: Moderatoren

mikrosaft
Beiträge: 6
Registriert: So, 09.11.2003 12:57

makro aufrufen tuts nicht...

Beitrag von mikrosaft »

Hallöle,

hab hier 'n komisches Problem mit Makros.

Wenn ich ein aufgezeichnetes Makro (übrigens: OOo 1.1.0) über >Extras>Makros>Makro... auswähle, wird es einwandfrei ausgeführt.

Gebe ich aber in einem Tabellendikument in einer Zelle "=makroname" ein bekomme ich nur ein "#NAME?" als Ergebnis. Die OOo-Hilfe bringt mich da auch nicht weiter, denn der Makroname existiert ja.

Selbst geschriebene Funktionen oder Subs kann ich so einbinden, da habe ich diese Probleme nicht.

Hat da vielleicht jemand ne Idee, woran das liegen könnte?

Gruss
M
Das letzte Datenpaket kam mit 0,5 Bit/sec in Form eines Rauchzeichens...
mikrosaft
Beiträge: 6
Registriert: So, 09.11.2003 12:57

klappt auch nicht...

Beitrag von mikrosaft »

jetzt hab ich es mal folgendermassen probiert:

function farbe2(egal as string) as variant
dim Doc as object
dim Sheet as object
dim Cell as object

Doc = StarDesktop.CurrentComponent
Sheet = Doc.Sheets(0)
Cell = Sheet.getCellByPosition(0,0)
Cell.CellBackColor = RGB(255, 0, 0)
farbe2=egal
end function

Ergebnis: Die Zelle in die ich den Funktionsaufruf eintrage erhält den Wert 'egal', die Zelle A1 (= 0,0) bleibt weiss, obwohl doch die Funktion definitv sagt, dass diese Zelle Rot eingefärbt werden soll... Das bedeutet also, dass die Funktion bis zum Ende durchlaufen wird, jedoch nciht alle Anweisungen ausgeführt werden.
Ich versteh das nicht.
Und das "Basic Programmer's Guide" von Sun hilft mir da auch nicht weiter. Das hab ich hier in ausgedruckter Form neben mir liegen...
Das letzte Datenpaket kam mit 0,5 Bit/sec in Form eines Rauchzeichens...
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Moin,

also, das Makro an sich ist in Ordnung. Ich frag mich allerdings, was du eigentlich wirklich erreichen willst.
Beim Ausführen einer selbstdefinierten Funktion werden, soweit ich das noch weis, alle Zellen automatisch gesperrt. Insofern passiert auch nichts, ausser der Anzeige des Rückgabewertes.
Uns so weit funktioniert das Makro doch.
Ich glaube, du kannst dir das so vorstellen: eine selbstdefinierte Funktion kann zwar alle Basic-Sprachlösungen realisieren (Operationen, Vergleiche etc), nicht jedoch auf das Objektmodell der Anwendung zugreifen (die gestateten UNO-Services).
Wenn du die Zelle rot färben willst, so kannst du dies über Buttons bewerkstelligen oder durch bedingte Formatierung.

Oder beschreib doch mal, was du erreichen willst.
Gruss
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mikrosaft
Beiträge: 6
Registriert: So, 09.11.2003 12:57

Sinn der Übung ist...

Beitrag von mikrosaft »

... eine Art ewigen Kalender.

Mahlzeit übrigens :wink:

Ich habe einen Kalender erstellt, und prüfe durch eine Funktion ob es sich bei dem Datumswert in Zelle A5 z.B. um einen Arbeitstag handelt.
Wenn nein, dann soll diese Zelle und die Nachbarzelle B5 farblich markiert werden.
Mit bedingter Formatierung funktioniert das nicht wirklich...
Desweiteren läuft über diesen Kalender meine monatl. Spesenabrechnung.
Diese farblichen Markierungen jedes Jahr aufs neue per Hand vorzunehmen ist mir 1. zu viel Aufwand und 2. _muss_ es doch auch mit StarBAsic gehen. (Ich habe das Teil vorher auf Excel laufen gehabt, was mir nach dem Umstieg auf Linux nun nicht mehr zur Verfügung steht)
Nun ja, vielleicht gelingt es ja jemandem (Dir?) mit dieser etwas konkreteren Beschreibung mir zu helfen.

Gruss
M.
Das letzte Datenpaket kam mit 0,5 Bit/sec in Form eines Rauchzeichens...
Toxitom
********
Beiträge: 3768
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Beitrag von Toxitom »

Hey "Mikrosaft",

also, ich würde das mit "bedingter Formatierung" lösen.
Annahme: das laufende Datum steht in Spalte A, beginnend z.B.bei A4.
Ich wähle eine Zusatzspalte (z.B.) in der ich eine Formel eingebe und prüfe, ob es sich bei dem Datum um einen Wochentag oder um einen Sonntag bzw. Samstag handelt.
Formel:

Code: Alles auswählen

=WENN(ODER(WOCHENTAG(A4)=1;WOCHENTAG(A4)=7);1;0)
d.h. wenn Sonntag/Samstag, der Wert ist 1, sonst 0
Jetzt gehe ich in Zelle A4 und gebe als bedingte Formatierung ein:
Formel -> und wähle dann als Bezug B4. Diese bekommt dann eine Formatvorlage (z.B. "rot" , die die Zelle rot einfärbt - vorher definieren!)
Jetzt ändere ich noch die Formel in "bedingte Formatierung" auf relative Adressen ($-Zeichen entfernen) und kopiere die markierte Zelle A$ in die Zwischenablage.
Dann markiere ich beispielsweise die Zellen a5bis a500 und wähle "Inhalte einfügen" und hier nur "Format". Die Formel aus B4 kopiere ich ebenfalls auf b5bis b500.
Jetzt schreibe ich ein zweites Datum in Zelle a5 und verlängere die beiden Daten bis zu A500. Alle Wochenenden werden rot eingefärbt.
Und da ich die Spalte "B" ja nur als Hilfsspalte eingefügt habe, kann ich sie auch noch ausblenden. Dann stört sie nicht. Fertig.

Das wäre eine Lösung.

Eine andere wäre, den kompletten Kalender per Makro erstellen zu lassen und dabei die Färbungen direkt mit vorzunehmen.
Platz zum experimentieren.

Gruß
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
mikrosaft
Beiträge: 6
Registriert: So, 09.11.2003 12:57

Beitrag von mikrosaft »

n'Abend,

hmm, wenn ich nur die Wochenenden Markieren müsste, wäre "bedingte Formatierung" tatsächlich eine Alternative. Da es jedoch auch Feiertage gibt die auf normale Wochentage fallen und es auch noch andere Branchenspezifische "Nicht-Arbeitstage" gibt, hilft mir das nicht wirklich weiter...

... und wenn ich schon daran scheitere, eine einzelne Zelle farblich zu markieren, wie soll ich denn da per Makro/Script nen ganzen Kalender (incl. Markierungen) erstellen...? :oops:

Gruss

M (aka Mikrosaft aka Mario) 8)

--
[edit]
Bin gerade am Basteln und scheine _eine_ Lösung gefunden zu haben:
Angenommen, in Zelle A1 steht das Datum 1.1.2003 und in Zelle A2 die Formel "A1 + 1" (Wert: 2.1.2003) und in Zelle An die Formel A(n-1)+1, dann brauche ich die Formel in Zelle An im Falle A6 nur erweitern auf folgendes:
=A5+1+VORLAGE(WENN(ISTARBEITSTAG(AKTUELL())=" ";"Standard";"Feiertag"))
wenn das Datum in der Zelle durch die Funktion "ISTARBEITSTAG()" als "Nicht-Arbeitstag" erkannt wird, bekommt die Zelle die Vorlage "Feiertag" zugewiesen.
Allerdings ist das eine Lösung über viele Ecken und Winkel...
Falls es also jemand Einfacher weiss, immer her mit den Vorschlägen...

Gruss
M
[/edit]
Das letzte Datenpaket kam mit 0,5 Bit/sec in Form eines Rauchzeichens...
Antworten