Per Makro Buttons ausblenden
Moderator: Moderatoren
Per Makro Buttons ausblenden
Hallo!
Ich bin absoluter Basicanfänger und brauche daher eine einfache Lösung die ich leicht umsetzen kann.
Ich hab 3 Buttons auf einem Tabellenblatt. Wie kann ich diese per Makro ein- und ausblenden bzw. wenigstens aktivieren und deaktivieren.
Ich bekomms einfach nicht hin.
Ich bin absoluter Basicanfänger und brauche daher eine einfache Lösung die ich leicht umsetzen kann.
Ich hab 3 Buttons auf einem Tabellenblatt. Wie kann ich diese per Makro ein- und ausblenden bzw. wenigstens aktivieren und deaktivieren.
Ich bekomms einfach nicht hin.
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Per Makro Buttons ausblenden
OK, versuchen wir es mal...
in einer Calc-Datei gibt es Tabellen, diese haben 1-n "drawpage(s)" (Container für Zeichenelemente, Diagramme, Bilder - oder Formulare)
Schaltflächen befinden sich in einem dieser Formulare
an ein solches Formular kommst Du dann mit:
Auf dieser Form befindet sich auch Deine Schaltfläche, die Du aktivieren/deaktivieren kannst:
Für "Ansichten" ist generell der Anzeige-Kontrolleur zuständig.
Und hier kannst Du die Sichtbarkeit einstellen
Noch nie selbst damit gearbeitet - aber alles in 5 Minuten mit xray rausgefunden
Das hilft Dir?
in einer Calc-Datei gibt es Tabellen, diese haben 1-n "drawpage(s)" (Container für Zeichenelemente, Diagramme, Bilder - oder Formulare)
Schaltflächen befinden sich in einem dieser Formulare
an ein solches Formular kommst Du dann mit:
Code: Alles auswählen
' erste drawpage (normal auf 1 Blatt)
' Formular normalerweise "Standard" benannt
oForm = ThisComponent.DrawPages.getByIndex(0).getForms().getByName( "Standard" )
Auf dieser Form befindet sich auch Deine Schaltfläche, die Du aktivieren/deaktivieren kannst:
Code: Alles auswählen
oForm.getByName( "PushButton" ).Enabled = FALSE
' 5 Sekunden warten
wait 5000
oForm.getByName( "PushButton" ).Enabled = TRUE
Für "Ansichten" ist generell der Anzeige-Kontrolleur zuständig.
Und hier kannst Du die Sichtbarkeit einstellen
Code: Alles auswählen
oForm = ThisComponent.DrawPages.getByIndex(0).getForms().getByName( "Standard" )
oButton = oForm.getByName( "PushButton" )
oAnsicht = ThisComponent.getCurrentController()
oButtonAnsicht = oAnsicht.getControl( oButton )
oButtonAnsicht.Visible = TRUE ' oder: FALSE
Das hilft Dir?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Per Makro Buttons ausblenden
Dankeschön! Das funktioniert bestens!
Was ist denn eigentlich dieses Xray und was kann man damit machen?
Was ist denn eigentlich dieses Xray und was kann man damit machen?
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Per Makro Buttons ausblenden
xray: ein (unerlässliches) Tool zur Untersuchung von Eigenschaften und Methoden eines Objekts.
Du musst die xray-Bibliotheken (nach der Installation) laden***, dann kannst Du ihm Objekte mitgeben
zeigt Dir (bei einem Calc-Dokument) dann eben vom aktuellen Dokument das Objekt sheets - bspw. dass es dort eine Eigenschaft .Count gibt, die den Wert 3 hat, und bei den Methoden siehst Du, dass Du .getByIndex( i ) nutzen kannst...
Unbedingt ausprobieren!
***das Laden erledige ich mit dem folgenden Code,der bei mir auf einer Schaltfläche im Basic-Editor liegt:
Du musst die xray-Bibliotheken (nach der Installation) laden***, dann kannst Du ihm Objekte mitgeben
Code: Alles auswählen
xray ThisComponent.Sheets
Unbedingt ausprobieren!
***das Laden erledige ich mit dem folgenden Code,der bei mir auf einer Schaltfläche im Basic-Editor liegt:
Code: Alles auswählen
Sub XRayLaden
GlobalScope.BasicLibraries.Loadlibrary("XrayTool")
msgbox "Xray geladen / Xray loaded"
End Sub
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Per Makro Buttons ausblenden
Mir ist grad noch ein kleiner Fehler aufgefallen. Wenn ich das Sheet wechsel und wieder zurück springe werden alle Buttons wieder angezeigt.
Wie kann ich das vermeiden bzw. wie kann ich ein Makro starten, wenn ich ein bestimmtes Sheet aktiviere?
Wie kann ich das vermeiden bzw. wie kann ich ein Makro starten, wenn ich ein bestimmtes Sheet aktiviere?
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Per Makro Buttons ausblenden
Dafür benötigst Du einen listener. Müsste mit folgendem Beispiel gehen:
Ich komme nochmal auf meinen Einwand zurück, dass Daten und Anwendung an sich getrennt gehören: Schaltflächen etc. sollte IMHO nicht in einer Calc-Tabelle untergebracht werden.... Aber: mach', was Du willst
Code: Alles auswählen
' Notifies if a view of a sheet
' is changing
' scrolling, not value change
' http://www.oooforum.org/forum/viewtopic.phtml?t=5135
' SergeM
' Posted: Sat Jan 24, 2004 3:54 pm
Global oListener As Object
Global oScalcDocument As Object
Sub SheetEventListenerOn
oScalcDocument=ThisComponent
'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub
Sub SheetEventListenerOff
oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub
Sub OOO_propertyChange(oEvent)
print("OK Current Sheet has changed")
End Sub
Ich komme nochmal auf meinen Einwand zurück, dass Daten und Anwendung an sich getrennt gehören: Schaltflächen etc. sollte IMHO nicht in einer Calc-Tabelle untergebracht werden.... Aber: mach', was Du willst

Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Per Makro Buttons ausblenden
Hmm funktioniert leider noch nicht so ganz wie erhofft. Bei jedem Sheetwechsel wird nun versucht die drei Buttons auszublenden. Es liegen aber nur auf dem Sheet "EINGABE" Buttons. Wenn ich nun auf ein anderes wechsle, kommt eine Fehlermeldung, da auf diesem Sheet keine Buttons vorhanden sind. Hier nochmal der Quelltext:
Code: Alles auswählen
Global oListener As Object
Global oScalcDocument As Object
Sub SheetEventListenerOn
oScalcDocument=ThisComponent
'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub
Sub SheetEventListenerOff
oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub
Sub OOO_propertyChange(oEvent)
'print("OK Current Sheet has changed")
oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" )
oButton = oForm.getByName( "PushButton2" )
oAnsicht = ThisComponent.getCurrentController()
oButtonAnsicht = oAnsicht.getControl( oButton )
oButtonAnsicht.Visible = FALSE
oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" )
oButton = oForm.getByName( "PushButton3" )
oAnsicht = ThisComponent.getCurrentController()
oButtonAnsicht = oAnsicht.getControl( oButton )
oButtonAnsicht.Visible = FALSE
oForm = ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" )
oButton = oForm.getByName( "PushButton4" )
oAnsicht = ThisComponent.getCurrentController()
oButtonAnsicht = oAnsicht.getControl( oButton )
oButtonAnsicht.Visible = FALSE
End Sub
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: Per Makro Buttons ausblenden
Ja - der Code reagiert auf jeden sheet-Wechsel. Du musst halt abfragen, ob gerade das Blatt mit Deinen Schaltflächen angezeigt wird ('tschuldige; ich habe Deinen Einwand "absoluter Anfänger" vergessen/verdrängt).
Und gliedere den Code noch einfach etwas; lagere die Ausschalt-Anweisungen in eine eigene Routine aus.
Nun?
Und gliedere den Code noch einfach etwas; lagere die Ausschalt-Anweisungen in eine eigene Routine aus.
Code: Alles auswählen
Global oListener As Object
Global oScalcDocument As Object
Private oAnsicht
Private oForm
' --------------------------------------------------
Sub SheetEventListenerOn
oScalcDocument=ThisComponent
'oListener = createUnoListener("OOO_","com.sun.star.lang.XEventListener")
oListener = createUnoListener("OOO_","com.sun.star.beans.XPropertyChangeListener")
oScalcDocument.CurrentController.addPropertyChangeListener("ActiveSheet",oListener)
End Sub
Sub SheetEventListenerOff
oScalcDocument.CurrentController.removePropertyChangeListener("ActiveSheet",oListener
End Sub
Sub OOO_propertyChange(oEvent)
'print("OK Current Sheet has changed")
' nur bei einem bestimmten Blatt aktiv werden
If ThisComponent.getCurrentController().getActiveSheet().Name <> "EINGABE" Then
Exit sub
End If
call ausblendenDreiButtons
End Sub
' --------------------------------------------------
Sub ausblendenDreiButtons()
' setzen FORMULAR und ANSICHT
' oForm am Anfang definiert; gilt für gesamtes Modul
oForm = _
ThisComponent.DrawPages.getByIndex(1).getForms().getByName( "Standard" )
' oAnsicht am Anfang definiert; gilt für gesamtes Modul
oAnsicht = ThisComponent.getCurrentController()
' oButton NICHT definiert; wird immer neu gesetzt
oButton = oForm.getByName( "PushButton2" )
call ausblendenRoutine( oButton )
oButton = oForm.getByName( "PushButton3" )
call ausblendenRoutine( oButton )
oButton = oForm.getByName( "PushButton4" )
call ausblendenRoutine( oButton )
End Sub
' --------------------------------------------------
Sub ausblendenRoutine( oKontrollObject as Object )
' oButtonAnsicht NICHT definiert; gilt nur in dieser SUB
oButtonAnsicht = oAnsicht.getControl( oKontrollObject )
oButtonAnsicht.Visible = FALSE
End Sub
' --------------------------------------------------
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Re: Per Makro Buttons ausblenden
hmm irgendwie verschwinden die Buttons nun auch schon, wenn ich nur scrolle.
Scheint noch ein kleiner Bug zu sein....
Scheint noch ein kleiner Bug zu sein....