Eine SUB zu einer FUNCTION umbauen.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Eine SUB zu einer FUNCTION umbauen.

Re: Eine SUB zu einer FUNCTION umbauen.

von balu » Mo, 25.10.2010 18:44

Hallo Karo,
Anscheinend hab ich da Unsinn geschrieben, aber ich meine das ging mal
Nein, kein Unsinn. Denn prinzipiell geht es, wenn man das Beispielmakro aus der F1 nimmt. Was jetzt aber schlussendlich der Störfaktor in diesem Falle ist, ist mir wohl genau so schleierhaft wie dir.

Die Zellfunction funktioniert wohl, aber ich glaube das sie hier in meiner Datei bei "Bearbeiten-Rückgängig" (Strg + Z) OOo abgeschossen hat. Sprich, die Datei wird schnell mal eben zwischengespeichert, OOo verabschiedet sich, startet wieder neu und die Datei wird wieder hergestellt.
Glauben heißt ja aber nicht Wissen. Also kann ich es nicht zu 100pro bestätigen, und wollte deshalb mit einem anderen Verfahren das gegenprüfen. Kann aber natürlich auch sein, dass der Fehler mal wieder zwischen Monitor und Stuhllehne sitzt :?.

Das mit dem Listner werd ich demnächst mal testen.

Ps. Meinst du nicht, deine "Schaltjahr-prüfung" lässt sich eleganter umsetzen ?
Klar doch. Aber das war noch ein so genanntes Überbleibsel aus diesem Testverfahren
balu hat geschrieben: Ich hatte es auch mal damit versucht, dass ich bei
-> Daten: gleich
-> Wert: Tabelle1.I2:I11
und dann bei 'Fehlermeldung' das Makro angegeben hatte.
Welches ich genommen hatte, weil ich zu dem Zeitpunkt nicht mehr genau wusste wie dein Tipp mit Gültigkeit war (Forum war nicht erreichbar). Und deshalb hatte ich es so getestet. Erstaunlich war nur in diesem Zusammenhang, dass das ausgewählte Makro wohl funktionierte, aber nicht immer zuverlässig.
Ich hatte der Reihe nach die Zahlen von 2000 - 2018 eingegeben und mal funktionierte es, und mal nicht. Da war kein richtiges System zu erkennen, obwohl in der refferenzierten Zelle (zu der Zeit wars O1) ja nur 1 oder 0 drinstand. Mal wurde bei 1 ein-, und beim anderen mal wieder ausgeblendet. Und auch in diesem Falle hatte ich bei
if mycell.value = 1 then
oSpalte1.isVisible = true
else oSpalte1.isVisible = false
den Wert von 1 auf 0, sowie die Wahrheitswerte (true - False) mal getauscht. Auch hatte ich das Eingabefeld mit der Gültigkeitsprüfung von Tabelle1 nach Tabelle 2 verlegt. Aber irgendwie spielte das Makro Lotto mit mir, entweder passt oder passt nicht. Nur verwundert es mich ja so sehr, dass es bei der einen Methode sporadisch funktioniert, und bei der anderen überhaupt keine Reaktion :roll:.

WinXP - OOo 3.2.1

Also Gentleman Karo :D, danke für deine Antwort und denk dran das Du kein Unsinn geschrieben hast :wink:.


Gruß
balu

Re: Eine SUB zu einer FUNCTION umbauen.

von Karolus » Mo, 25.10.2010 15:19

Hallo Balu
balu hat geschrieben:Hallo Ladys and Gentleman,
Es kann wohl nur einen geben 8)
Karolus hat geschrieben: Alternativ könntest du für I2 unter ? Daten ? Gültigkeit nur ganze Zahlen grösser 1 zulassen, und bei 'Fehlermeldung' dein Makro starten lassen.
Anscheinend hab ich da Unsinn geschrieben, aber ich meine das ging mal über ...→ Gültigkeit...→ Makro
Aber wie dem auch sei - über eine Zellfunktion gehts doch eigentlich ohne Probleme, nimm die doch zu Hilfe.
Wenn du möchtest kannst du auch mal den Modifylistener ausprobieren, du musst die Registrierung des Listeners nur für eine Zelle laufen lassen und im Arbeitmakro das Ein{Ausblenden der Spalte einbauen.

Ps. Meinst du nicht, deine "Schaltjahr-prüfung" lässt sich eleganter umsetzen ?

Gruß Karo

Re: Eine SUB zu einer FUNCTION umbauen.

von balu » Mo, 25.10.2010 14:30

Hallo Ladys and Gentleman,
Karolus hat geschrieben: Alternativ könntest du für I2 unter ? Daten ? Gültigkeit nur ganze Zahlen grösser 1 zulassen, und bei 'Fehlermeldung' dein Makro starten lassen.
Und damit habe ich ein Problem.
Egal was ich auch bis jetzt versucht habe, aber mein oben zitiertes Makro kriege ich mit Gültigkeit nicht ans laufen. Ich hatte es auch mal damit versucht, dass ich bei
-> Daten: gleich
-> Wert: Tabelle1.I2:I11
und dann bei 'Fehlermeldung' das Makro angegeben hatte. Jedoch funktionierte das nur sporadisch, is aber auch egal.

Versuche ich es damit das eine Zelle auf den Wert 1 überprüpft wird, geht gar nichts. Ich weiß wirklich nicht mehr welche Kombination ich noch ausprobieren muss.
-> Daten: gleich
-> Wert: 1

-> Daten: größer als
-> Minimum: 1

-> Daten: größer oder gleich
-> Minimum: 1

etc. pp.
Natürlich habe ich auch das ganze mit der Nullprüfug (0) versucht.
Habe im Makro die richtigen sheets(0) angegeben, und für das angehängte Beispiel die Zelladressierung angepasst, aber es will einfach nicht.
Das Makro als solches funktioniert, wenn ich es direkt starte, bloß mit der Gültigkeit da haperts.

Könnt ihr mir da noch mal weiter helfen? Würd mich sehr darüber freuen :D.


Gruß
balu
Dateianhänge
makro-einaus-test-X.ods
(8.85 KiB) 28-mal heruntergeladen

Re: Eine SUB zu einer FUNCTION umbauen.

von balu » Mo, 18.10.2010 18:59

Hallo Karo,
Ja, falls die Änderung der massgeblichen Zelle in irgendeiner Weise aus dem (aktiven) Blatt initiert wird indem auch die beteiligte Spalte ist...
Genau! Das wars.
Innerhalb des gleichen Blattes geht nicht. Auf ein anders Blatt ja. In dem Augenblick wo die Benutzerdefinierte Function ausgeführt wird, ist das aktive Blatt für eine Function gesperrt (oder so ähnlich).

Danke für das Gedächtnis auffrischen.


Gruß
balu

Re: Eine SUB zu einer FUNCTION umbauen.

von Karolus » Mo, 18.10.2010 18:04

Hallo
....Da hatte ich doch hier irgendetwas mal deswegen gelesen.
Ja, falls die Änderung der massgeblichen Zelle in irgendeiner Weise aus dem (aktiven) Blatt initiert wird indem auch die beteiligte Spalte ist wird das aus- bzw. einblenden erst ausgeführt wenn man in ein anderes Blatt wechselt. (oder so ähnlich )

Gruß Karo

Re: Eine SUB zu einer FUNCTION umbauen.

von balu » Mo, 18.10.2010 17:45

Hallo Karo,

boooah :shock: !
Dat is ja der Wahnsinn, dat Funktioniert ja prächtig :lol:.

Hatte eigentlich nicht damit gerechnet, dass man mittels Function ein Makro ausführen kann. Da hatte ich doch hier irgendetwas mal deswegen gelesen. Das fiel mir aber erst nach meinem Posting ein. Na ja, eigentlich ist es ja jetzt auch kein Makro mehr. Und deshalb funktioniert das wohl.
Das muss ich mir unbedingt merken. Kann vielleicht mal Goldwert sein.

Das mit Gültigkeit ist natürlich auch ne Überlegung wert, aber so wie es jetzt ist, ist es genau richtig.

Ich Danke dir vielmals. :D


Gruß
balu

Re: Eine SUB zu einer FUNCTION umbauen.

von Karolus » Mo, 18.10.2010 17:18

Hallo Balu
Hier funktioniert aus einem anderen Tabellenblatt:

Code: Alles auswählen

function ausblenden(tabindex ,colindex ,boool )
	thiscomponent.sheets( tabindex ).columns( colindex ).isvisible = boool
	ausblenden = boool
end function
In Tabelle4 schreibst du in irgendeine leere Zelle zB.:
=AUSBLENDEN(1 ; 69 ; I2)
um in Tabelle2 (index 1) die Spalte BR (index 69 ) je nach I2_Zellwert 0 / 1 aus-/einzublenden.


Alternativ könntest du für I2 unter → Daten → Gültigkeit nur ganze Zahlen grösser 1 zulassen, und bei 'Fehlermeldung' dein Makro starten lassen.

Gruß Karo

Eine SUB zu einer FUNCTION umbauen.

von balu » Mo, 18.10.2010 16:36

Hallo Liebe Gemeinde,

ich hab mir aus diversen Code-Schnipsel eine SUB zusammengestrickt die eine bestimmte Zelle abfragt, und auf Grund dessen Wertes blendet sie eine Spalte aus. Das funktioniert bis jetzt einwandfrei. (glaub aber das ich da was zu viel drin habe)
Hier der Code.

Code: Alles auswählen

Sub FebruarAutomatik

myDoc = thisComponent
mySheet = myDoc.sheets(1)
oSheet = thisComponent.sheets(1)
mycell = mysheet.getCellRangeByName("BR1")
oSpalte1 = oSheet.getColumns().getByName("BR")

if mycell.value = 1 then
oSpalte1.isVisible = true
else oSpalte1.isVisible = false
End if

End Sub
Nun möchte ich aber das ganze als eine Benutzerdefinierte Function haben. Das dumme ist nur, da ich für so etwas zu dumm bin :?, weiss ich nicht wie ich das ganze umstricken müsste.
Könnte mir da bitte jemand helfen?

Oder wäre es vielleich einfacher diese SUB mittels Listner auszuführen?
In diesem Falle müsste er dann aber sheets(4) - getCellRangeByName("I2") überwachen, da dort eine Handeingabe getätigt wird die den Wert in sheets(1) - getCellRangeByName("BR1") ändert.

Der Hintergrund dabei ist folgender.
Im besagten Blatt Nr.2 in BR1 wird abgefragt ob das aktuelle Jahr ein Schaltjahr ist. Und dementsprechend wird dann entweder eine 1, oder 0 ausgegeben. Und bei Schaltjahren soll die Spalte BR eingeblendet werden, sonst ausblenden.

Wenn was unklar ist, bitte fragen.

Für Eure Bemühungen bedanke ich mich schon mal im voraus.
Freue mich auf Eure Antworten :) .


Gruß
balu

Nach oben