Hallo alle zusammen
Ich bin neu auf dem Gebiet Macroprogrammierung. Leider komme ich aus beruflichen Gründen nun nicht darum.
Ein paar Kleinigkeiten habe ich bereits hinbekommen.
Nun stehe ich vor einem Problem.
Es geht um ein Spreadsheat mit mehreren Arbeitsblättern (Zum Beispiel "A" und "B")
Nun will ich das Arbeitsblatt "B" ausblenden. Dies geht ja noch relativ einfach.
Dafür habe ich sogar ein kleines Macro erstellt ("Es lebe die Macro aufzeichnung")
Nun will ich allerdings verhindern dass man diese Versteckte Tabelle über
Menüleiste-->Format-->Tabelle-->Einblenden
Arbeitsblatt B wieder einblenden kann.
Im Klartext, suche ich nach einem Weg die Funktion "Einblenden" zu deaktivieren.
Dies müsste denke ich mit einem Macro machbar sein allerdings sind meine Macrokenntnisse relativ miserabel.
Wenn jemand eine bessere Idee hat und ich somit um macros rumkomme bin ich dafür gerne offen.
Vielleicht kann mir jemand helfen.
Zum Abschluss noch ein kleines Java Beispiel zur verdeutlichung nach was ich suche.
Angenommen das Menüfeld heißt "MenueFeldABC"
Dann wäre der Java Befehl für das was ich machen will
MenueFeldABC.setEnabled(false);
Menü deaktivieren
Moderator: Moderatoren
Re: Menü deaktivieren
Wie das direkte Abfangen von Menubefehlen funktioniert, ist in Andrew Pitonyaks Makro-Dokument zu finden:
http://www.pitonyak.org/AndrewMacro.odt
( 4.4. Intercept menu commands using Basic)
Ansonsten kannst Du das Ganze auch per PropertyChangeListener regeln, indem Du einfach die Tabelle direkt wieder ausblendest, sobald sie jemand eingeblenden will:
sTableToStayHidden muss in Deinem Fall natürlich nicht "Tabelle2" sein, sondern entsprechend "B" (oder wie auch immer das Tabellenblatt heisst)
Bei >>Extras -> Anpassen -> Ereignisse -> Dokument öffnen<< die Prozedur "StartMyPropertyListener" zuweisen
Bei >>Extras -> Anpassen -> Ereignisse -> Dokument wird geschlossen<< die Prozedur "StopMyPropertyListener" zuweisen
Willst Du zwischenzeitlich selber an dem Tabellenblatt arbeiten, musst Du die sozusagen-Sperre manuell entfernen (>>Makro ausführen -> "StartMyPropertyListener"<<).
http://www.pitonyak.org/AndrewMacro.odt
( 4.4. Intercept menu commands using Basic)
Ansonsten kannst Du das Ganze auch per PropertyChangeListener regeln, indem Du einfach die Tabelle direkt wieder ausblendest, sobald sie jemand eingeblenden will:
Code: Alles auswählen
Option Explicit
Global propsObject as Object
Global oListener as Object
Const sProperty as String = "IsVisible"
'**********************************************
Const sTableToStayHidden as String = "Tabelle2" 'Hier muss Dein Tabellenname stehen
'**********************************************
Sub StartMyPropertyListener
Dim sListenerName as string, sProperty as string
sListenerName = "com.sun.star.beans.XPropertyChangeListener"
If IsNull(propsObject) Then
oListener = CreateUnoListener( "myChangeListener_", sListenerName )
propsObject = ThisComponent.CurrentController
propsObject.addPropertyChangeListener(sProperty, oListener)
End If
End Sub
Sub StopMyPropertyListener
If NOT IsNull(propsObject) Then
propsObject.removePropertyChangeListener(sProperty,oListener)
propsObject = Nothing
oListener = Nothing
End If
End Sub
Sub myChangeListener_disposing(oEvt As Object)
propsObject = Nothing
oListener = Nothing
End Sub
Sub myChangeListener_propertyChange(oEvt As Object)
Dim oSheet as Object
oSheet = oEvt.Source.ActiveSheet
If oSheet.Name = sTableToStayHidden Then
If oSheet.isVisible Then
thisComponent.Sheets.getByName(sTableToStayHidden).isVisible = False
End If
End If
End Sub
Bei >>Extras -> Anpassen -> Ereignisse -> Dokument öffnen<< die Prozedur "StartMyPropertyListener" zuweisen
Bei >>Extras -> Anpassen -> Ereignisse -> Dokument wird geschlossen<< die Prozedur "StopMyPropertyListener" zuweisen
Willst Du zwischenzeitlich selber an dem Tabellenblatt arbeiten, musst Du die sozusagen-Sperre manuell entfernen (>>Makro ausführen -> "StartMyPropertyListener"<<).
Re: Menü deaktivieren
Hallo DPunch
Erst einmal Danke für deine Antwort.
Irgendwie bekomme ich den Teil von Andrew Pitonyak nicht zum laufen. Ist aber auch egal, da ich ja nicht die Auswirkung abfangen will, sondern lediglich das Menü deaktivieren.
Deine Lösung bringt mich leider auch nicht weiter, da ich diese relativ leicht umgehen kann, wenn ich einfach makros deaktiviere.
Also habe ich weiter gesucht und gesucht, da ich überzeugt war, es muss einen einfacheren Weg geben. In der OpenOfficeApi bin ich dann schließlich fündig geworden.
Dort ist unter com.sun.star.awt.xMenu eine Funktion "enableItem" gestolpert. http://api.openoffice.org/docs/common/r ... enableItem
Diese müsste eigentlich genau das bewirken was ich will, wenn ich ihr als MenuItem die richtige ID übergebe. Eine ID liste habe ich hier gefunden http://framework.openoffice.org/files/d ... 1beta.html
Jetzt kommen wir zu meinem Problem. Ich bekomme das irgendwie nicht zum laufen, da ich wie gesagt bisher nie mit Makros arbeiten musste.
Ich habe mir ein funktionierendes aufgezeichnetes Makro gezogen und dieses verändert.
Hier ist mein Code
Vielleicht kann mir jemand hier helfen und mir sagen, was ich falsch mache. Für die Zeile oXMenu.enableItem(...) erhalte ich immer die Fehlermeldung Objektvariable nicht belegt.
Was genau heißt das eigentlich?
Erst einmal Danke für deine Antwort.
Irgendwie bekomme ich den Teil von Andrew Pitonyak nicht zum laufen. Ist aber auch egal, da ich ja nicht die Auswirkung abfangen will, sondern lediglich das Menü deaktivieren.
Deine Lösung bringt mich leider auch nicht weiter, da ich diese relativ leicht umgehen kann, wenn ich einfach makros deaktiviere.
Also habe ich weiter gesucht und gesucht, da ich überzeugt war, es muss einen einfacheren Weg geben. In der OpenOfficeApi bin ich dann schließlich fündig geworden.
Dort ist unter com.sun.star.awt.xMenu eine Funktion "enableItem" gestolpert. http://api.openoffice.org/docs/common/r ... enableItem
Diese müsste eigentlich genau das bewirken was ich will, wenn ich ihr als MenuItem die richtige ID übergebe. Eine ID liste habe ich hier gefunden http://framework.openoffice.org/files/d ... 1beta.html
Jetzt kommen wir zu meinem Problem. Ich bekomme das irgendwie nicht zum laufen, da ich wie gesagt bisher nie mit Makros arbeiten musste.
Ich habe mir ein funktionierendes aufgezeichnetes Makro gezogen und dieses verändert.
Hier ist mein Code
Code: Alles auswählen
sub Test1
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim oXMenu as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
oXMenu = createUnoService("com.sun.star.awt.xMenu")
oXMenu.enableItem(5301, false)
rem ----------------------------------------------------------------------
end sub
Was genau heißt das eigentlich?
Re: Menü deaktivieren
Aloha
Wie das ganze mit deaktivierten Makros funktioneren soll, da habe ich ehrlich gesagt keine Ahnung.
Könnte daran liegen, dass "com.sun.star.awt.xMenu" ein Interface ist, kein Service.
Wie das ganze mit deaktivierten Makros funktioneren soll, da habe ich ehrlich gesagt keine Ahnung.
Das heisst, dass die Variable oXMenu nicht belegt (Null) ist.Für die Zeile oXMenu.enableItem(...) erhalte ich immer die Fehlermeldung Objektvariable nicht belegt.
Was genau heißt das eigentlich?
Könnte daran liegen, dass "com.sun.star.awt.xMenu" ein Interface ist, kein Service.
Re: Menü deaktivieren
Hallo,
Hab mittlerweile einen relativ einfachen Weg gefunden, wie ich das erreichen kann was ich will.
Sobald ich das gesammte "Workbook" speere ist alles so wie ich es will.
Das geht relativ einfach über ein Makro.
Trotzdem vielen Dank nocheinmal für die Mühen und die Hilfe
Hab mittlerweile einen relativ einfachen Weg gefunden, wie ich das erreichen kann was ich will.
Sobald ich das gesammte "Workbook" speere ist alles so wie ich es will.
Das geht relativ einfach über ein Makro.
Code: Alles auswählen
Sub sperren (passwort as String)
ThisComponent.protect(passwort)
End Sub