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 :roll: ) 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 :D :lol: :mrgreen:
Der Lunki