Seite 1 von 1
Per Makro Buttons ausblenden
Verfasst: Di, 15.01.2008 16:06
von stommy7
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.
Re: Per Makro Buttons ausblenden
Verfasst: Di, 15.01.2008 17:42
von komma4
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:
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
Noch nie selbst damit gearbeitet - aber alles in 5 Minuten mit
xray rausgefunden
Das hilft Dir?
Re: Per Makro Buttons ausblenden
Verfasst: Mi, 16.01.2008 10:02
von stommy7
Dankeschön! Das funktioniert bestens!
Was ist denn eigentlich dieses Xray und was kann man damit machen?
Re: Per Makro Buttons ausblenden
Verfasst: Mi, 16.01.2008 10:21
von komma4
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:
Code: Alles auswählen
Sub XRayLaden
GlobalScope.BasicLibraries.Loadlibrary("XrayTool")
msgbox "Xray geladen / Xray loaded"
End Sub
Re: Per Makro Buttons ausblenden
Verfasst: Mi, 16.01.2008 11:11
von stommy7
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?
Re: Per Makro Buttons ausblenden
Verfasst: Mi, 16.01.2008 11:35
von komma4
Dafür benötigst Du einen
listener. Müsste mit folgendem Beispiel gehen:
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

Re: Per Makro Buttons ausblenden
Verfasst: Do, 17.01.2008 16:58
von stommy7
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
Re: Per Makro Buttons ausblenden
Verfasst: Do, 17.01.2008 17:56
von komma4
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.
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
' --------------------------------------------------
Nun?
Re: Per Makro Buttons ausblenden
Verfasst: Fr, 18.01.2008 08:57
von stommy7
hmm irgendwie verschwinden die Buttons nun auch schon, wenn ich nur scrolle.
Scheint noch ein kleiner Bug zu sein....