Verschachteltes Ein- und Ausblenden von Zeilen/Spalten?

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Verschachteltes Ein- und Ausblenden von Zeilen/Spalten?

Beitrag von Mr.Ioes »

Hallo,

ich habe eine Tabelle mit mehreren Stufen von "Wichtigkeit". Dass heißt, grundsätzlich brauche ich für den Ausdruck nur jede ca. 4 Spalte (das vareiert). Selten wünsch ich mir aber einen genaueren Ausdruck, bei dem zu dieser mindestens eine weitere Zeile eingeblendet ist. Es bleiben allerdings ständig noch Zeilen übrig, die ich nicht mit ausdrucken will.

Jetzt wünsche ich mir eine Klickmöglichkeit, bei der ich zum einen mehrere Zeilen auf einmal Ein- und Ausblenden kann und noch besser wäre es, wenn ich sogar die Möglichkeit hätte vorzugeben, mit dem einen Klick (nur) diese und mit dem anderen Klick zusätzlich auch noch jene Zeilen mit einzublenden.

Gibt´s so was?

Gruß - Mr.Ioes
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

Das wurde im Prinzip hier diskutiert:
viewtopic.php?t=1903

Denke Dir ein für Deine Belange geeignetes Kriterium aus und passe das Makro an.


Gruß
Stephan
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

zunächst heißt demnach die Antwort auf meine Frage: Ein- und Ausblenden kann man nur (hintereinander) einzelne Zeilen und nicht eine Gruppe von Zeilen (jdedenfalls nicht mit Boardmitteln, sondern allenfalls per Basic-Programmierung). Ok das habe ih mir eingetlich schon gedacht.

Dann meine ich nach dem Überfliegen des anderen Threads, dass es da nicht genau um meine Problemstellung geht (auch wenn man mit den dortigen Überlegungen wohl auch diesem Problem näher kommt).

Also wenn man mehrere Zelen per Makro ausblenden kann, dann bräuchte ich wohl folgende beiden Programme:

1. Programm
Für die Zeilen x bis y (am besten wäre: x = 1 Zeile des Druckbereichs und y = letzte Zeile des Druckbereichs)
Wenn in Spalte Salte F ein bestimmtes Datum ist (nämlich =T$3+V$3)
dann ausgeblendet lassen
sonst einblenden
Ende

2. Programm
Für die Zeilen x bis y (am besten wäre: x = 1 Zeile des Druckbereichs und y = letzte Zeile des Druckbereichs)
Wenn in Spalte D Inhalt ist (Inhalt = Zahlen)
dann eingeblendet lassen
sonst ausblenden
Ende


Ich mag Dich auch, wenn Du Dir nicht die Mühe machst! :wink:

Gruß - Mr.Ioes
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

zunächst heißt demnach die Antwort auf meine Frage: Ein- und Ausblenden kann man nur (hintereinander) einzelne Zeilen und nicht eine Gruppe von Zeilen (jdedenfalls nicht mit Boardmitteln, sondern allenfalls per Basic-Programmierung). Ok das habe ih mir eingetlich schon gedacht.
Warum testest Du das nicht mal ich hätte das jetzt beinahe geglaubt. Ich kann z.B.:
(a) Zeile 1 ,3 ,5 markieren und gleichzeitig ausblenden
(b) Zeile 1, 3-5, 7 markieren und gleichzeitig ausblenden
(c) Zeile 1-10 markieren und gleichzeitig ausblenden

Ich habe Dir das jetzt so hingeschrieben wie Du es wolltest:

Code: Alles auswählen

Sub programm_1
'die Spalte in welcher die zu prüfende Zelle steht 
'hier eintragen. Spalte 1 (Spalte A) entspricht 0 
vorgabe = 5 
'Druckbereich eintragen
anfang = 1 'Zeilennummer angeben
ende = 15 'Zeilennummer angeben
x1 = ThisComponent.Sheets.GetByName("Tabelle1").getCellRangeByName("$T$3").Value
x2 = ThisComponent.Sheets.GetByName("Tabelle1").getCellRangeByName("$V$3").Value
xg = x1 + x2
min_zeile = anfang - 1
max_zeile = ende - 1 
For x = min_zeile to max_zeile 
   If ThisComponent.Sheets.GetByName("Tabelle1").getCellByPosition(vorgabe, x).Value <> xg Then 
       ThisComponent.Sheets.GetByName("Tabelle1").Rows(x).isVisible = True 
   End if 
Next x
End sub

Sub programm_2
'die Spalte in welcher die zu prüfende Zelle steht 
'hier eintragen. Spalte 1 (Spalte A) entspricht 0 
vorgabe = 3 
'Druckbereich eintragen
anfang = 1 'Zeilennummer angeben
ende = 10 'Zeilennummer angeben
'Vorgabe für Zahlenwert
xg = 123
min_zeile = anfang - 1
max_zeile = ende - 1 
For x = min_zeile to max_zeile 
   If ThisComponent.Sheets.GetByName("Tabelle1").getCellByPosition(vorgabe, x).Value <> xg Then 
       ThisComponent.Sheets.GetByName("Tabelle1").Rows(x).isVisible = False 
   End if 
Next x
End sub

Ich verstehe nur nicht was die Summe zweier Datumswerte praktisch für einen Sinn machen soll? Denn die Summe zweier Daten ist die Summe der Zeitwerte also 23.08.03 + 12.09.03 = 06.05.07 und was soll das sein?

Gruß
Stephan
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Stephan hat geschrieben:... Warum testest Du das nicht mal
Schande über mich und Asche auf mein Haupt. :oops:
Es handelt sich bei mir allerdings um so viele nicht zusammenhänge Zeilen (> 15), dass ich sie gerne gespeichert hätte, um nicht immer markieren zu müssen. Aber für die allermeisten Fälle reicht das Markieren völlig.
Stephan hat geschrieben:... Ich verstehe nur nicht was die Summe zweier Datumswerte praktisch für einen Sinn machen soll? Denn die Summe zweier Daten ist die Summe der Zeitwerte also 23.08.03 + 12.09.03 = 06.05.07 und was soll das sein?
Komplizierte Geschichte: Also meine Tabellen sind immer auf ein bestimmtes Jahr bezogen. Um das zu "initialisieren" schreibe ich per Hand außerhalb des Druckbereichs den 1. Januar und den 31. Dezember des Jahres in zwei Zellen. Die unmittelbar dahinterliegene Zelle (= "V$3") rechnet die Tage aus.

Geprüft wird ob der 1. Januar des Folgejahres in der Zelle steht. Dazu kommt es weil ich sich um ein Einzugsdatum handelt, das mit der Formel Auszugsdatum + 1 Vorbelegt ist.

Ich komme erst gleich dazu die Programme auszuprobieren. Schon mal vielen, vielen Dank!

Gruß - Mr.Ioes
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Hallo Stephan,

zum zweiten Programm: Was ich vergleichen will ist, ob in der jeweiligen Zelle überhaupt ein Inhalt ist und nicht, ob da eine bestimmte Zahl steht (zumal ich jezt doch lieber eine andere Spalte nehmen möchte, in der gewöhnlich Zeichenketten stehen).

Mit x = NULL geht´s nicht.

Du weißt das doch bestimmt wie ich das hinkriegen kann. Bütte. :roll:

Gruß - Mr.Ioes

Verständnisnachfrage: Was heißt:
min_zeile = anfang - 1
max_zeile = ende - 1
bzw. was bedeutet das "- 1" dabei?
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Beitrag von Stephan »

ob in der jeweiligen Zelle überhaupt ein Inhalt ist und nicht

Code: Alles auswählen

ThisComponent.Sheets.GetByName("Tabelle1").getCellByPosition(vorgabe, x).Type = com.sun.star.table.CellContentType.EMPTY
Verständnisnachfrage: Was heißt:
min_zeile = anfang - 1
max_zeile = ende - 1
Du solltest als Zeilen die Nummern angeben die Du siehst, erste Zeile ist also 1. Die Zählung in Basic beginnt jedoch immer bei Zeile 0. -1 berücksichtigt das als Korrektur.

Gruß
Stephan
Mr.Ioes
******
Beiträge: 524
Registriert: Fr, 12.03.2004 10:02

Beitrag von Mr.Ioes »

Danke Stephan - hat prima geklappt! :D
Antworten