Seite 1 von 1
Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Do 29. Dez 2011, 14:25
von lunki
Irgendwann ist immer das erste mal, so nun bei mir dass ich mich an ein Forum wende.
Ich habe folgendes Problem mit Calc:
Ich möchte abhängig davon, ob in einer Zelle eines Sheets (nennen wir es Deckblatt) ein bestimmter Wert steht (z. B. Analyse) dass ein Tabellenblatt z. B. mit dem Namen "Ergebnis" eingeblendet wird. Wenn irgendein anderer Wert drin steht, oder gar kein Wert, dass dieses Sheet "Ergebnis" ausgeblendet bleibt.
Folgendes hab ich in den letzten Stunden versucht:
1. Mittels einer WENN DANN Funktion, d. h wenn der Wert in der Zelle "Analyse" dann blende mit das Sheet "Ergebnis" ein, mittels isvisible = true. Kann aber die Syntax nicht, d. ich bekomme immer wieder Fehlermeldungen
2. Mittels Makro: habe ein Makro aufgezeichnet bei dem ich das Blatt ein- und eines bei dem ich das Blatt ausblende. Wie kann ich nun das Makro automatisiert so ablaufen lassen, wenn in der betreffenden Zelle "Ergebnis" steht (einblenden), bzw. etwas anderes (ausblenden)???
Ich hoffe ich habe meine Frage konkret genug gestellt und jemand kennt sich damit aus.
Ach ja: Software ist LibreOffice 3.3.4 auf Windows 7.
Viele Grüße
Der Lunki
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Do 29. Dez 2011, 14:42
von balu
Hallo Lunki,
kennst Du schon Dannenhöfer?
Kucki hier:
Arbeitsblätter
Und dann:
Wie kann Arbeitsblätter ausblenden?
Und wenn es dann noch hakt, meldest Du dich dann bite in dem dementsprechenden Unterforum: LibreOffice Programmierung.
Gruß
balu
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Do 29. Dez 2011, 22:12
von F3K Total
Hi,
wenn Du ein Tabellenblatt "Deckblatt" und eins "Ergebnis" hast und dann dieses Makro an das Tabellenereignis "Inhalt geändert" von "Deckblatt" hängst, kannst Du in Zelle "A1" von "Deckblatt" mal etwas anderes als "Ergebnis" eintippen, dann wird Tabellenblatt "Ergebnis" ausgeblendet. Gibst Du Ergebnis ein, kommt es zurück.
Code: Alles auswählen
Sub S_table_result_visible_invisible(event)
ocell=event
if event.AbsoluteName="$Deckblatt.$A$1" then
osheetErgebnis=thiscomponent.sheets.getbyname("Ergebnis")
if ocell.string="Ergebnis" then
osheetErgebnis.IsVisible = true
else
osheetErgebnis.IsVisible = false
endif
endif
End Sub
Gruß R
@Balu: wollte es ausprobieren ...
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Fr 30. Dez 2011, 09:14
von lunki
Hallo F3K Total,
da hast du mir schon mal ein gnazes Stück weitergeholfen. Vielen Dank dafür!!
Was ich jetzt aber mit meinen bescheidenen Programmierkenntnissen noch versucht habe (und natürlich gescheitert bin

) war, die entsprechende Zelle nicht nur auf einen Parameter zu Prüfen, sondern gleich auf zwei (bzw. später dann auf 10 Parameter). Fehlermeldung:
Scripting Framework Fehler, Wrong number of parameters. Hier das script (Die Tabellenblätter heissen Deckblatt und Pestizide und die zu Prüfenden Werte in Zelle C70 Pestizide-S19 und Pestizide-Quechers. Was habe ich falsch gemacht??
PS Muss ich den Eintag jetzt vielleicht in LibreOffice Programmierung verschieben??
PPS Vielen Dank für die Hilfe!!!!!
Lunki
Sub S_table_result_visible_invisible(event)
ocell=event
if event.AbsoluteName="$Deckblatt.$C$70" then
osheetPestizide=thiscomponent.sheets.getbyname("Pestizide")
if ocell.string="Pestizide-S19" then
osheetPestizide.IsVisible = true
if ocell.string="Pestizide-Quechers" then
osheetPestizide.IsVisible = true
else
osheetPestizide.IsVisible = false
endif
endif
endif
End Sub
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Fr 30. Dez 2011, 09:48
von F3K Total
Hi,
zunächst hast Du in der Logik einen Fehler, kann so nicht funktionieren:
Sub S_table_result_visible_invisible(event)
ocell=event
if event.AbsoluteName="$Deckblatt.$C$70" then
osheetPestizide=thiscomponent.sheets.getbyname("Pestizide")
if ocell.string="Pestizide-S19" then
osheetPestizide.IsVisible = true
if ocell.string="Pestizide-Quechers" then
osheetPestizide.IsVisible = true
else
osheetPestizide.IsVisible = false
endif
endif
endif
End Sub
Deine if-Abfragen sagen: Wenn Die ausgewählte Zelle C70 auf dem Deckblatt ist, und in der Zelle "Pestizide-S19" steht, dann sichtbar, und wenn dann noch "Pestizide-Quechers" drinsteht, dann auch sichtbar sonst unsichtbar.
Beides kann aber nie drinstehen.
Darum hier ein übersichtlicher Code in dem Du die Suchwörter oben eintippen kannst:
Code: Alles auswählen
Sub S_table_result_visible_invisible(event)
ocell=event
if event.AbsoluteName="$Deckblatt.$C$70" then
dim asurchwords(1) as string 'Anzahl der Suchwörter -1
asurchwords(0) = "Pestizide-S19"
asurchwords(1) = "Pestizide-Quechers"
osheetPestizide=thiscomponent.sheets.getbyname("Pestizide")
for i = 0 to ubound(asurchwords)
if ocell.string = asurchwords(i) then
osheetPestizide.IsVisible = true
exit for
else
osheetPestizide.IsVisible = false
endif
next i
endif
End Sub
Deine Fehlermeldung kann ich nich nachvollziehen, hast du
F3K Total hat geschrieben:... dieses Makro an das Tabellenereignis "Inhalt geändert" von "Deckblatt" hängst ...
???
Gruß R
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Fr 30. Dez 2011, 10:48
von lunki
Hi,
super vielen Dank für deine Hilfe. Was mich dem Paradies nun etwas näher bringen würde wäre, wenn die Suchabfrage sich nicht auf Zelle C70 beschränkt, sondern von Zelle C70 bis D79 geht (habe es mit "$Deckblatt.C70:D79" versucht, ging aber nicht).
Weiterhin sollen die entsprechenden Zellen (also C70 bis D79) auch auf den Wert Trocknungsverlust geprüft werden, und wenn der Wert da ist jeweils 2 Tabellenblätter Ein- oder augeblendet werden (Name der Blätter: TV und FB06) (ich weis es ist kurz vor Silvester und ausserdem Freitag, aber PRogrammierer werde ich wohl nicht mehr).
Cheers
Der Lunki
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Fr 30. Dez 2011, 11:39
von F3K Total
So,
nun reicht es, beim nächsten Mal schreibe ich Dir eine Rechnung.
Code: Alles auswählen
Sub S_table_result_visible_invisible(event)
ocell=event
osheetDeckblatt=thiscomponent.sheets.getbyname("Deckblatt")
oCellRange = osheetDeckblatt.getCellRangeByName("C70:D79")'aktiver Bereich in dem gesucht werden soll
oaddress=ocellrange.Rangeaddress
nSC=oaddress.StartColumn
nSR=oaddress.StartRow
nEC=oaddress.EndColumn
nER=oaddress.EndRow
if ocell.supportsService("com.sun.star.sheet.SheetCell") then
oCellsRangeAddress = ocell.RangeAddress
if oCellRange.queryIntersection(oCellsRangeAddress).count = 1 then'Es gibt ocell in oCellrange
dim asurchwordsPestizide(1) as string
asurchwordsPestizide(0) = "Pestizide-S19"
asurchwordsPestizide(1) = "Pestizide-Quechers"
dim asurchwordsTV_FB06(0) as string
asurchwordsTV_FB06(0) = "Trocknungsverlust"
osheetPestizide=thiscomponent.sheets.getbyname("Pestizide")
osheetTV=thiscomponent.sheets.getbyname("TV")
osheetFB06=thiscomponent.sheets.getbyname("FB06")
dim bfound_pestizide as boolean
dim bfound_trocknungsverlust as boolean
bfound_pestizide=false
bfound_trocknungsverlust=false
for j= nSC to nEC
for k= nSR to nER
osurchcell = osheetDeckblatt.getcellbyposition(j,k)
for i = 0 to ubound(asurchwordsPestizide)
if osurchcell.string = asurchwordsPestizide(i) then bfound_pestizide = true
next i
for i = 0 to ubound(asurchwordsTV_FB06)
if osurchcell.string = asurchwordsTV_FB06(i) then bfound_trocknungsverlust = true
next i
next k
next j
if bfound_pestizide = true then
osheetPestizide.IsVisible = true
else
osheetPestizide.IsVisible = false
endif
if bfound_trocknungsverlust = true then
osheetTV.IsVisible = true
osheetFB06.IsVisible = true
else
osheetTV.IsVisible = false
osheetFB06.IsVisible = false
endif
endif
endif
End Sub
Gruß R
Re: Tabellensheet ausblenden bei best. Wert in Zelle
Verfasst: Di 3. Jan 2012, 13:24
von lunki
Hi F3K Total,
du hast mir total geholfen, total tollen Dank dafür
Der Lunki