Spalten ausblenden/einblenden mit einem Button

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

Rav
Beiträge: 6
Registriert: Fr, 12.04.2013 15:14

Spalten ausblenden/einblenden mit einem Button

Beitrag von Rav »

Hallo werte Community,

ich bin leider nicht besonders bewandert was programmiertechnische Sachen angeht und habe folgendes Problem:
Ich möchte in Open office Calc verschiedene Buttons erstellen, die je nachdem in welcher Stellung sie sich befinden, eine von mir gewünschte Spalte ein- oder ausblenden

Die Buttons sollen sich untereinander am linken Bildschirmrand befinden, z.B 5 Stück davon.
Der erste heißt "Sorte ein/aus" und blendet Spalte G ein/aus
Der zweite heißt "Zeitpunkt ein/aus" und blendet Spalte H ein/aus
Der dritte [...] blendet Spalte I ein/aus usw.


Ich habe bereits (Um-)Schaltflächen erstellt und es ist mir damit auch gelungen, Spalten auszublenden (über Makro aufzeichnen und der jeweiligen Fläche zuweisen), allerdings gelingt es mir nicht, diese mit demselben Button wieder einzublenden, weil ich nicht weiß wie man eine Wenn Funktion (?) einbaut und mit welchem Befehl man abfragen kann, in welcher Stellung sich der Button befindet. Ich habe mir seit Tagen einen Wolf gesucht und scheinbar ähnliche Themen gefunden, da ich von Visual Basic aber recht wenig verstehe und häufig den Wald vor lauter Bäumen nicht sehe, ist es einfach schwierig für mich sowas umzusetzen.

Kann jemand von euch einem absoluten Laien bei sowas weiterhelfen?
freundliche Grüße Rav.
juetho
******
Beiträge: 617
Registriert: Di, 20.04.2010 15:46
Wohnort: Berlin

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von juetho »

Hallo und willkommen im Forum,
Rav hat geschrieben:Ich habe bereits (Um-)Schaltflächen erstellt und es ist mir damit auch gelungen, Spalten auszublenden (über Makro aufzeichnen und der jeweiligen Fläche zuweisen),
Der Weg über "Makro aufzeichnen" ist leider oft nicht der beste Weg. Als erstes solltest du die Hilfsmittel durchlesen, die unter Informationen zur StarBasic-Programmierung (oberster Beitrag in diesem Unterforum) aufgeführt sind. Gerade für einfache Probleme führen Dannenhöfers FAQ oft am schnellsten zum Ziel wie bei Wie kann man Zeilen oder Spalten ausblenden.

Dazu gibt es einen winzigen programmiertechnischen Kniff, mit dem der aktuelle Zustand einfach "umgedreht" wird:

Code: Alles auswählen

currentColumn.isVisible = not currentColumn.isVisible
Rav hat geschrieben:da ich von Visual Basic aber recht wenig verstehe und häufig den Wald vor lauter Bäumen nicht sehe, ist es einfach schwierig für mich sowas umzusetzen.
Lösungen zu Visual Basic können auch nur in Grenzen helfen, da Visual Basic ein Microsoft-Produkt ist und die OO-Programme nichts mit MS zu tun haben, sondern mit einem anderen Basic-Dialekt (immer noch StarBasic genannt) arbeiten.

Viel Erfolg! Jürgen
Situation: LibO 3.6 auf Win 7 Home Premium (64-bit) mit MySQL (localhost) über JDBC
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von F3K Total »

Hallo,
ein kleiner Tip dazu:
Rav hat geschrieben:weil ich nicht weiß wie man eine Wenn Funktion (?) einbaut und mit welchem Befehl man abfragen kann, in welcher Stellung sich der Button befindet.
Wenn du in den allgemeinen Eigenschaften der Schaltfäche Umschalten ... Ja einstellst, kannst Du mit diesem Makro weiterkommen. Hänge es an das Ereignis Status geändert.

Code: Alles auswählen

Sub S_Show_State(event)
    ocmd = event.source.model
    if ocmd.state = 1 then
       ocmd.label = "gedrückt"
    else
       ocmd.label = "nicht gedrückt"
    endif
End Sub
Dabei ist
  • Code: Alles auswählen

    event
    das Ereignis (Status der Schaltfläche geändert)
  • Code: Alles auswählen

    event.source.model
    das Model der Schaltfläche
  • Code: Alles auswählen

    ocmd.state
    der aktuelle Status der Schaltfläche, 0 für nicht gedrückt, 1 für gedrückt
  • Code: Alles auswählen

    ocmd.label
    die Beschriftung der Schaltfläche
Viel Erfolg
Gruß R
Rav
Beiträge: 6
Registriert: Fr, 12.04.2013 15:14

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von Rav »

Hallo und danke für eure Hilfe,
ich habe weiterhin versucht eine Lösung zu finden und eure Tipps umzusetzen, von einem funktionierenden Makro bin ich aber erwartungsgemäß noch sehr weit entfernt. Im Moment sieht es so aus:

Code: Alles auswählen

Sub Sorte_umschalten
oSheet = thisComponent.sheets(1)
oSpalte1 = oSheet.getColumns().getByName("G")  

    ocmd = event.source.model
    if ocmd.state = 1 then
       ocmd.label = "gedrückt"
       oSpalte1.isVisible = false 
    else
       ocmd.label = "nicht gedrückt"
       oSpalte1.isVisible = true
    endif
End Sub
Ich habe jetzt versucht, diese Wenn Funktion mit dem Befehl zum ausblenden der Spalten zu kombinieren, das habe ich einer Schaltfläche zugewiesen, Umschalten Ja eingestellt und wie beschrieben "Status geändert" zugewiesen.
Die Meldung, die ich bekomme lautet: "Objectvariable nicht belegt", wobei sich das wohl auf das "event.source.model" bezieht.
Was genau muss ich tun, um diese Variable zu belegen, bzw. muss ich einen zusätzlichen Begriff angeben, um ihm klar zu machen, dass es sich um eine Schaltfläche mit Umschaltfunktion handelt (das ist ja wahrscheinlich mit Modell gemeint)?

Entschuldigt bitte, wenn die Frage recht unbedarft daherkommt, aber ich bin wie gesagt ein Laie und habe noch nie irgendwas programmiert.
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von F3K Total »

Sieht doch schon gut aus,
ändere mal

Code: Alles auswählen

Sub Sorte_umschalten
oSheet = thisComponent.sheets(1)'Zeigt auf Tabelle2
in

Code: Alles auswählen

Sub Sorte_umschalten (event)
oSheet = thisComponent.sheets.getbyname("Tabelle1")
Gruß R
Rav
Beiträge: 6
Registriert: Fr, 12.04.2013 15:14

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von Rav »

Prima, jetzt funktioniert alles einwandfrei. :)
Danke euch beiden...
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von Karolus »

Hallo
Du kannst auch über das 'Columns'-objekt eines Zellbereichs arbeiten
(Der Zellbereich muss dann lediglich die gewünschten Spalten enthalten)

Code: Alles auswählen

Sub Sorte_umschalten ()
    oSheet = thisComponent.sheets.getbyname("Tabelle1")
    range = oSheet.getCellRangebyPosition(0,0,1,0)
    columns = range.getColumns()
    columns.isVisible = Not (columns.isVisible)
end sub
Reicht das Beispiel?

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von F3K Total »

Hi,
ich habe alternativ eine Variante, in der der Index der Spalten (A=0, B=1 ...) in ein Array geschieben wird, dann kann man frei wählen:

Code: Alles auswählen

Sub Sorte_umschalten (event)
    dim arows
    arows() = array(0,1,3,5) 'entsprechen Spalte A,B,D,F
    oSheet = thisComponent.sheets.getbyname("Tabelle1")
    ocolumns = oSheet.Columns
    ocmd = event.source.model
    if ocmd.state = 1 then
        ocmd.label = "Side By Side"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = false
        next i
    else
        ocmd.label = "Single Row"
        for i = 0 to ubound(arows)
            ocolumns(arows(i)).isVisible = true
        next i
    end if
End Sub
Gruß R
Zuletzt geändert von F3K Total am Sa, 11.05.2013 08:11, insgesamt 1-mal geändert.
Karolus
********
Beiträge: 7533
Registriert: Mo, 02.01.2006 19:48

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von Karolus »

Hallo
@Rik
Dem Basic-interpreter ist das egal, aber den Leser könnte die Bezeichnung 'nRows' für ein Array von Spaltenindexen etwas verwirren.

Karolus
LO7.4.7.2 debian 12(bookworm) auf Raspberry5 8GB (ARM64)
LO25.2.3.2 flatpak debian 12(bookworm) auf Raspberry5 8GB (ARM64)
F3K Total
********
Beiträge: 3724
Registriert: Mo, 28.02.2011 17:49

Re: Spalten ausblenden/einblenden mit einem Button

Beitrag von F3K Total »

Jo,
hier was Neues, geht auch, wenn der Button nicht auf Umschalten steht, und Fokussieren bei Klick ausgeschaltet ist.
Der Status wird alternierend in die Zusatzinformation (.tag) geschrieben.

Code: Alles auswählen

Sub Sorte_umschalten (event)
    dim arows1
    dim arows2
    arows1() = array(0,1,3,5) 'entsprechen Spalte A,B,D,F
    arows2() = array(2,4,6,7) 'entsprechen Spalte C,E,G,H
    oSheet = thisComponent.sheets.getbyname("Tabelle1")
    ocolumns = oSheet.Columns
    ocmd = event.source.model
    if ocmd.tag = 1 then
        ocmd.label = "zu A,B,D,F wechseln"
        ocmd.tag = 0
        for i = 0 to ubound(arows1)
            ocolumns(arows1(i)).isVisible = false
        next i
        for i = 0 to ubound(arows2)
            ocolumns(arows2(i)).isVisible = true
        next i
    else
        ocmd.label = " zu C,E,G,H wechseln"
        ocmd.tag = 1
        for i = 0 to ubound(arows1)
            ocolumns(arows1(i)).isVisible = true
        next i
        for i = 0 to ubound(arows2)
            ocolumns(arows2(i)).isVisible = false
        next i        
    end if
End Sub
Mit einem zweiten Button blendest Du alle Spalten ein:

Code: Alles auswählen

Sub S_alle_einblenden
    oSheet = thisComponent.sheets.getbyname("Tabelle1")
    ocolumns = oSheet.Columns
    ocolumns.IsVisible = true
End Sub
Gruß R
PS: Auf die Idee ein zweites Array zu verwenden hättest Du auch selbst kommen können, oder?
Antworten