Seite 1 von 1

Calc: Zeilen mit Makro ausblenden

Verfasst: Do, 10.03.2011 21:19
von Bratlord
Hallo Leute,

ich habe folgendes vor:

Ich möchte mit einem Markierefeld ein Makro ausführen, welches eine Reihe von zusammenhängenden Zeilen in einem anderen Tabellenblatt ausblendet, sodass diese, etwa beim PDF-Export, nicht gedruckt werden. Leider bin ich absoluter Anfänger was StarBasic angeht. Hat hier vielleicht irgend jemand einen funktionierenden Code, welcher die oben genannte Funktion ausführt?

Gruß, Bratlord

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Do, 10.03.2011 21:25
von Karolus
Hallo
Den funktionierenden Code findest du hier

Gruß Karo

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Fr, 11.03.2011 08:06
von clag
Hallo Bratlord,

da ich selbst "OOo BASIC Lehrling" bin, weiß ich genau wie schwer es manchmal am Anfang ist, darum habe ich mal eine Beispieldatei erstellt,
in der das "ab bzw anhaken" eines Markierfeld, ein Makro startet welches Zeilen in einer anderen Tabelle ein oder ausblendet.
zeilen_ausblenden_47343.ods
(10.34 KiB) 513-mal heruntergeladen

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Fr, 11.03.2011 08:50
von Karolus
Hallo
@Clag: Eine "if...then..." zeile ist dort überflüssig, es geht schlicht mit:

Code: Alles auswählen

...visible = not ....state
Zweimal "if..then" an der Stelle ist noch überflüssiger - es gibt "else"

Karo

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Fr, 11.03.2011 11:31
von clag
Hallo Karolus,

an Codeoptimierung und Korrektur bin ich immer interessiert, aber deinen Hinweis versteht ich nicht so recht,
kannst du bitte etwas konkreter werden und mir den Code der dir da vorschwebt aufzeigen?

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Fr, 11.03.2011 12:56
von Karolus
Hallo

Code: Alles auswählen

myRange.isvisible = not cbool ( MF1.state)
Ich bin etwas überrascht das man dort explizit mit cbool konvertieren muss, ich meine das war in früheren Ooo-versionen nicht nötig ?!

Wenn es zu einer If-abfrage nur zwei Alternativen gibt dann:

Code: Alles auswählen

if bedingung then
  tu das eine
else
  tu das andere
end if
Gruß Karo

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Fr, 11.03.2011 16:51
von clag
Hallo Karo,

ja nun habe ich verstanden wie die erst von dir vorgeschlagene Variante funktioniert

Code: Alles auswählen

myRange.isvisible = not cbool ( MF1.state)
es wird der Wert 1 bzw 0 aus der Abfrage MF1.state direkt als true bzw false Ersatz übergeben ahhh ! :lol:
aber das ist doch bestimmt so eine Insider Variante oder?


die if else Variante scheint mir doch die sicherste zu sein

Code: Alles auswählen

if MF1.state = 1 then 
myRange.isvisible = false
else
myRange.isvisible = true
end if 
weil wirklich nur bei 1 die Zeilen ausgeblendet werden und alles Andere führt zum einblenden


diese Variante sah am übersichtlichsten aus und ich hatte sie deshalb zuerst genommen

Code: Alles auswählen

'if MF1.state = 0 then myRange.isvisible = true
'if MF1.state = 1 then myRange.isvisible = false 
aber was ist, wenn mal etwas Anderes wie 1 oder 0 übergeben wird?
Das kommt vermutlich nicht vor aber ausschließen kann man es auch nicht .....

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Mi, 16.03.2011 12:29
von DPunch
Aloha
clag hat geschrieben: aber was ist, wenn mal etwas Anderes wie 1 oder 0 übergeben wird?
Das kommt vermutlich nicht vor aber ausschließen kann man es auch nicht .....
Doch, das kann sogar in diesem konkreten Fall auftreten, nämlich wenn die Option "Dreifacher Status" des Markierfeldes aktiviert wird (Rückgabewert 2).
Davon abgesehen kannst Du Dir sicher sein, dass ein nicht markiertes Markierfeld immer den Status False bzw den dazu äquivalenten numerischen Wert zurückliefern wird und ein markiertes entsprechend den Status True bzw einen dazu äquivalenten numerischen Wert.
Karolus hat geschrieben:Hallo

Code: Alles auswählen

myRange.isvisible = not cbool ( MF1.state)
Ich bin etwas überrascht das man dort explizit mit cbool konvertieren muss, ich meine das war in früheren Ooo-versionen nicht nötig ?!
Das ergibt sich nur durch die Verwendung von "NOT". Ein numerischer Wert wird dadurch um 1 erhöht und ins negative verkehrt. (Interner numerischer Wert für FALSE = 0, TRUE = -1)
"State" eines Markierfeldes gibt die Werte 0,1 oder 2 zurück. Die Verwendung von "NOT" macht daraus -1,-2 oder -3, was wiederum durch die implizite Typkonvertierung bei der Zuweisung immer als TRUE ausgewertet wird.
Ohne die Verwendung von "NOT" ist keine Konvertierung nötig, 0 wird immer als FALSE ausgeweret, alles andere als TRUE.

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Mi, 16.03.2011 12:55
von Karolus
Hallo
@Dpunch
Danke für die Erläuterung, mein Fehler war die falsche Annahme daß MF1.state 'true' oder 'false' zurückgibt.

Ps. Wahrscheinlich bin ich auch schon Python-geschädigt, dort wird mit "not" das übergergebene Argument implizit in einen Bool gewandelt:
not 2
not "foo"
not True
ergeben alle False
not 0
not ""
not False
ergeben True

Gruß Karo

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Mo, 21.03.2011 20:07
von Bratlord
Hallo Leute,

erst einmal vielen Dank für all die hilfreichen Beiträge. Da ich wie gesagt blutiger Anfänger in StarBasic bin, habe ich natürlich am Ende nicht so ganz begriffen, was nun der "beste Code" sein soll. Also die Version von clag funktioniert soweit. Muss man da noch was ändern,wenn es eh nur 2 Varianten gibt: AN & AUS

Ein nächstes Problem stellt sich nun aber: In den auszubelnden Zeilen befinden sich auch Diagramme, die beim ausblenden ebenfalls verschwinden sollten. Wie auch beim Ausblenden "von Hand" werden die Diagramme mit dem hier besprochenen Makro nicht ausgeblendet. Gibt es da eine Lösung?

Vielen Dank für Eure Hilfe

Gruß Bratlord

Re: Calc: Zeilen mit Makro ausblenden

Verfasst: Mo, 21.03.2011 23:04
von Bratlord
Hallo Leute,

vielleicht sollte ich doch noch einmal erklären was das eigentliche Endziel ist. Eventuell ist das Ausblenden gar nicht der Königsweg.

Ich möchte mit dem Ausblenden die druckbaren Bereiche in einer Tabelle bestimmen.

Beispiel:

Markierfeld 1:Haken gesetzt = Es wird in Tabelle2 der Druckbereich Zeile 1 bis 10, Spalte A bis E als Druckbereich festgelegt.
Markierfeld 2:Haken gesetzt = Es wird in Tabelle2 der Druckbereich Zeile 11 bis 20, Spalte A bis E als Druckbereich festgelegt.
...

Ist ein Haken nicht gesetzt so wird der jeweilige Bereich nicht gedruckt.

Vielleicht ist das der sinnvollere Weg?!

Gruß Bratlord