Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Eigenes Ribbon-Control im Editiermodus disabled
zurück: Klassenprogrammierung: Klasse serialisieren weiter: VBA verwendet lokale Spracheinstellungen bei bed.F.-Forme Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Information Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
10. Apr 2014, 13:01
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Eigenes Ribbon-Control im Editiermodus disabled - Eigenes Ribbon-Control im Editiermodus disabled

Nach oben
       Version: Office 2007

Hallöchen,

die exceleigenen Controls auf den Ribbons reagieren darauf ob du im Eingabemodus von Excel bist oder nicht. Die meisten Controls werden im Editiermodus disabled. Dieses Verhalten können wir natürlich nachbauen. Dazu benötigen wir nur einen API-Timer und RibbonControls mit einer getEnabled-Prozedur um die Controls zur Laufzeit zu steuern.

Im Timer nutzen wir die Tatsache, dass wir die Enabled-Eigenschaft eines Ribbon-Controls abfragen können. Wir picken uns irgendein Control heraus und fragen alle 500 Millisekunden dessen aktuellen Status ab.

Starten und Stoppen des Timer erfolgt wie immer im Modul "DieseArbeitsmappe":

Code:
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not Saved Then
        Select Case MsgBox("Sollen Ihre Änderungen in '" & Name & _
            "' gespeichert werden", vbExclamation Or vbYesNoCancel)
            Case vbYes
                Save
            Case vbNo
                Saved = True
            Case vbCancel
                Cancel = True
        End Select
    End If
    If Not Cancel Then Call TimerStop
End Sub

Private Sub Workbook_Open()
    Call Application.OnTime(EarliestTime:=Now, Procedure:="TimerStart")
End Sub


Im Standardmodul "basTimer" wird alle 500 Millisekunden der Status eines Controls abgefragt und bei einer Änderung im Vergleich zur letzten Abfrage ein Flag gesetzt und das entsprechende Ribboncontrol invlidiert. Nach einem Hinweis von Case ( http://www.office-loesung.de/viewprofile130733.php ) konnte ich auch den Beep der erzeugt wird wenn das Control im Editiermodus disabled wird abschalten. Vielen Dank für den Tipp.

Code:
Option Explicit

Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Public Declare Function SystemParametersInfoA Lib "user32.dll" ( _
    ByVal uAction As Long, _
    ByVal uParam As Long, _
    ByVal lpvParam As Any, _
    ByVal fuWinIni As Long) As Long

Public Const SPI_SETBEEP As Long = 2
Public Const SPIF_UPDATEINIFILE As Long = &H1

Public Sub TimerStart()
    Call SetTimer(Application.hWnd, 0&, 500&, AddressOf TimerRun)
End Sub

Public Sub TimerStop()
    Call KillTimer(Application.hWnd, 0&)
End Sub

Private Sub TimerRun(ByVal pvlngHwnd As Long, ByVal pvlngEventID As Long, _
    ByVal pvlngElapse As Long, ByVal pvlngTimerFunction As Long)

    Static sblnLastMode As Boolean

    On Error Resume Next

    If sblnLastMode <> IsEditMode Then

        sblnLastMode = Not sblnLastMode

        gblnRibbonButtonDisable = Not gblnRibbonButtonDisable

        Call SystemParametersInfoA(SPI_SETBEEP, 0&, 0&, SPIF_UPDATEINIFILE)

        Call gobjRibbon.InvalidateControl("Button_01")

        Call Application.OnTime(EarliestTime:=Now, Procedure:="BeepOn")

    End If
End Sub

Private Function IsEditMode() As Boolean

    IsEditMode = Application.CommandBars.GetEnabledMso("FileNewDefault") = False

End Function

Private Sub BeepOn()

    Call SystemParametersInfoA(SPI_SETBEEP, 1&, 0&, SPIF_UPDATEINIFILE)

End Sub


Im Standardmodul "basRibbon" befindet sich die Routine "getEnabled" für unseren Button der je nach Modus enabled oder disabled wird.

Code:
Option Explicit

Public gobjRibbon As IRibbonUI

Public gblnRibbonButtonDisable As Boolean

Private Sub Load_Ribbon(ByRef probjRibbon As IRibbonUI)
    Set gobjRibbon = probjRibbon
End Sub

Private Sub Button_01_onAction(ByRef probjControl As IRibbonControl)
    Call MsgBox("Hallo")
End Sub

Private Sub Button_01_getEnabled(ByRef probjControl As IRibbonControl, ByRef prvntEnabled As Variant)
    prvntEnabled = Not gblnRibbonButtonDisable
End Sub


Ich habe euch mal eine Mustermappe hochgeladen.

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%



RibbonControl_Editmode.xlsm
 Beschreibung:

Download
 Dateiname:  RibbonControl_Editmode.xlsm
 Dateigröße:  22.31 KB
 Heruntergeladen:  21 mal


RibbonControl_Editmode.xlsm
 Beschreibung:
Neue Version ohne Beep

Download
 Dateiname:  RibbonControl_Editmode.xlsm
 Dateigröße:  23.57 KB
 Heruntergeladen:  20 mal

Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Excel Hilfe: *T*Re: Eigenes Ribbon-Control im Editiermodus disabled 1 Case 49 10. Apr 2014, 14:21
Isabelle :-) *T*Re: Eigenes Ribbon-Control im Editiermodus disabled
Keine neuen Beiträge Excel VBA (Makros): ControlTipText bei disabled Buttons 3 praktikant156 94 12. Jul 2013, 11:34
Case ControlTipText bei disabled Buttons
Keine neuen Beiträge Excel Hilfe: Makroeinstellungen sind Gesperrt /Disabled 2 barosgerd 276 18. Sep 2012, 21:57
barosgerd Makroeinstellungen sind Gesperrt /Disabled
Keine neuen Beiträge Excel VBA (Makros): RibbonControl 0 rib61 147 14. Apr 2010, 14:04
rib61 RibbonControl
Keine neuen Beiträge Excel VBA (Makros): Schrift in Textbox trotz disabled und locked schwarz darst. 15 bbox 2034 14. Jun 2009, 19:55
bbox Schrift in Textbox trotz disabled und locked schwarz darst.
Keine neuen Beiträge Excel Hilfe: Im gesamten Registerblatt "Daten" alle Befehle dis 1 LichtiMC 303 08. Jun 2009, 16:59
LichtiMC Im gesamten Registerblatt "Daten" alle Befehle dis
Keine neuen Beiträge Excel VBA (Makros): Listview Anzeige wenn State = Disabled 3 maninweb 920 28. Jul 2007, 08:17
maninweb Listview Anzeige wenn State = Disabled
Keine neuen Beiträge Excel VBA (Makros): Textbox locked u.disabled Schriftfarbe ändern 2 Ingmar 2512 07. März 2007, 11:59
Alderlan Textbox locked u.disabled Schriftfarbe ändern
Keine neuen Beiträge Excel Hilfe: Checkbox unsichtbar oder disabled wenn Blatt geschützt wird 0 Todi 777 15. Dez 2005, 11:13
Todi Checkbox unsichtbar oder disabled wenn Blatt geschützt wird
Keine neuen Beiträge Excel VBA (Makros): CommandBar und EditierModus der Zelle 25 Olaf Gerecke 2407 07. März 2005, 18:19
Thomas Ramel CommandBar und EditierModus der Zelle
Keine neuen Beiträge Excel VBA (Makros): Editiermodus der Zelle per VBA aktivieren 2 efa7ld 1133 20. Jan 2005, 15:47
efa7ld Editiermodus der Zelle per VBA aktivieren
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft Excel-Formeln