Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Ribbon-Tab in Excel 2007 ansteuern
zurück: Pseudo-List(Of T) in VBA weiter: Auflistungsklasse sortieren Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Tutorial Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Isabelle :-)
Menschin


Verfasst am:
26. Jan 2014, 19:29
Rufname:
Wohnort: Westlicher Spiralarm der Galaxis


Ribbon-Tab in Excel 2007 ansteuern - Ribbon-Tab in Excel 2007 ansteuern

Nach oben
       Version: Office 2007

Hallöchen,

ich habe auf der Seite von Tony Jollans einen Code gefunden mit dem sich bestimmte Tabs in Ribbons ansteuern lassen ohne die "unsichere" SendKeys-Methode zu benutzen. Der Code funktioniert natürlich auch in Excel 2010 und 2013.

http://www.wordarticles.com/Shorts/RibbonVBA/RibbonVBADemo.php

Da ich das für nützlich halte will ich euch den Code nicht vorenthalten. Ich war so frei ihn ein bisschen zu kürzen und zu ändern.

Die API und die IAccessible-Klasse können wesentlich mehr. Also ladet euch den Originalcode von der angegebenen Seite runter und testet mal mit dem Userform. Ist zwar in einem Word-Dokument aber die Funktionsweise in Excel ist identisch. Ihr könnt als das Modul und das Userform unverändert nach Excel importieren.

Im Modul "DieseArbeitsmappe":

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


In einem Standardmodul:

Code:
Option Explicit
Option Private Module

Private Declare Function AccessibleChildren Lib "oleacc.dll" ( _
    ByVal paccContainer As Object, _
    ByVal iChildStart As Long, _
    ByVal cChildren As Long, _
    ByRef rgvarChildren As Variant, _
    ByRef pcObtained As Long) As Long
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" ( _
    ByRef psa() As Any) As Long

Private Const CHILDID_SELF As Long = &H0&
Private Const STATE_SYSTEM_UNAVAILABLE As Long = &H1&
Private Const STATE_SYSTEM_INVISIBLE As Long = &H8000&
Private Const STATE_SYSTEM_SELECTED As Long = &H2&

Private Enum RoleNumber
    ROLE_SYSTEM_CLIENT = &HA&
    ROLE_SYSTEM_PANE = &H10&
    ROLE_SYSTEM_GROUPING = &H14&
    ROLE_SYSTEM_TOOLBAR = &H16&
    ROLE_SYSTEM_PAGETAB = &H25&
    ROLE_SYSTEM_PROPERTYPAGE = &H26&
    ROLE_SYSTEM_GRAPHIC = &H28&
    ROLE_SYSTEM_STATICTEXT = &H29&
    ROLE_SYSTEM_TEXT = &H2A&
    ROLE_SYSTEM_BUTTONDROPDOWNGRID = &H3A&
    ROLE_SYSTEM_PAGETABLIST = &H3C&
End Enum

Private Enum NavigationDirection
    NAVDIR_FIRSTCHILD = &H7&
End Enum

Public Sub SwitchTabMain()
    If Not SwitchTab("MyTab") Then _
        Call MsgBox("Kein Tab ''MyTab'' gefunden.", vbCritical, "Fehler")
End Sub

Private Function SwitchTab(ByVal pvstrTabName As String) As Boolean

    Dim objRibbonTab As IAccessible

    Set objRibbonTab = GetAccessible(CommandBars("Ribbon"), _
        ROLE_SYSTEM_PAGETAB, pvstrTabName)

    If Not objRibbonTab Is Nothing Then

        If ((objRibbonTab.accState(CHILDID_SELF) And (STATE_SYSTEM_UNAVAILABLE _
            Or STATE_SYSTEM_INVISIBLE)) = 0) Then

            Call objRibbonTab.accDoDefaultAction(CHILDID_SELF)

            SwitchTab = True

        End If
    End If
End Function

Private Function GetAccessible( _
    ByRef probjElement As IAccessible, _
    ByVal pvenmRoleWanted As RoleNumber, _
    ByVal pvstrNameWanted As String, _
    Optional ByVal opvblnGetClient As Boolean) As IAccessible

    Dim avntChildrenArray() As Variant
    Dim objChild As IAccessible, objReturnElement As IAccessible
    Dim ialngChild As Long
    Dim strNameComparand As String, strName As String, strValue As String

    On Error Resume Next

    strValue = probjElement.accValue(CHILDID_SELF)

    On Error GoTo 0

    strName = probjElement.accName(CHILDID_SELF)

    Select Case strValue

        Case "Ribbon", "Quick Access Toolbar", _
            "Ribbon Tabs List", "Lower Ribbon", "Status Bar"

            strNameComparand = strValue

        Case vbNullString, "Ribbon Tab", "Group"

            strNameComparand = strName

        Case Else

            strNameComparand = strName

    End Select

    If probjElement.accRole(CHILDID_SELF) = pvenmRoleWanted And _
        strNameComparand = pvstrNameWanted Then

        Set objReturnElement = probjElement

    Else

        avntChildrenArray = GetChildren(probjElement)

        If CBool(SafeArrayGetDim(avntChildrenArray)) Then

            For ialngChild = LBound(avntChildrenArray) To UBound(avntChildrenArray)

                If TypeOf avntChildrenArray(ialngChild) Is IAccessible Then

                    Set objChild = avntChildrenArray(ialngChild)

                    Set objReturnElement = GetAccessible(objChild, _
                        pvenmRoleWanted, pvstrNameWanted)

                    If Not objReturnElement Is Nothing Then Exit For

                End If
            Next
        End If
    End If

    If opvblnGetClient Then Set objReturnElement = objReturnElement.accNavigate( _
        NAVDIR_FIRSTCHILD, CHILDID_SELF)

    Set GetAccessible = objReturnElement

    Set objReturnElement = Nothing
    Set objChild = Nothing

End Function

Private Function GetChildren(ByRef probjElement As IAccessible) As Variant()

    Const FIRST_CHILD As Long = 0&

    Dim lngChildCount As Long, lngReturn As Long
    Dim avntChildrenArray() As Variant

    lngChildCount = probjElement.accChildCount

    If lngChildCount > 0 Then

        ReDim avntChildrenArray(lngChildCount - 1)

        Call AccessibleChildren(probjElement, FIRST_CHILD, _
            lngChildCount, avntChildrenArray(0), lngReturn)

    End If

    GetChildren = avntChildrenArray

End Function

_________________
LG Isi

Die Mitgliedschaft im Forum erhöht deine Chance auf eine Antwort von mir um 99,999%
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 Formeln: Excel 2007 - Zahlen aus Zelle extrahiern und in neue Zelle s 5 k02c271 1028 05. März 2010, 10:41
Gast Excel 2007 - Zahlen aus Zelle extrahiern und in neue Zelle s
Keine neuen Beiträge Excel Formeln: Ausschalten alternative Formelberechnung in Exel 2007 1 angelika_wimmer 1821 22. Feb 2010, 13:08
neopa Ausschalten alternative Formelberechnung in Exel 2007
Keine neuen Beiträge Excel Formeln: Excel 2007 Anwesenheitslistse 1 OrdH 388 16. Feb 2010, 09:15
LittleSqlFreak Excel 2007 Anwesenheitslistse
Keine neuen Beiträge Excel Formeln: Namensverweis in Excel 2007 1 Dante0809 582 09. Feb 2010, 18:06
urs Namensverweis in Excel 2007
Keine neuen Beiträge Excel Formeln: Excel 2007 mehrere Wenns in einer Zelle 7 langnoppe 1346 15. Jan 2010, 13:38
Patrico12 Excel 2007 mehrere Wenns in einer Zelle
Keine neuen Beiträge Excel Formeln: EXCEL 2007 Bedingteformatierung 3 AUDIA8 2130 12. Jan 2010, 22:11
madin EXCEL 2007 Bedingteformatierung
Keine neuen Beiträge Excel Formeln: excel 2007 externe Daten filtern Ergebnis in einer Zelle 2 engelmann 401 14. Dez 2009, 22:48
engelmann excel 2007 externe Daten filtern Ergebnis in einer Zelle
Keine neuen Beiträge Excel Formeln: Plusfelder und Minusfelder im Excel 2007 3 maxmax 809 15. Nov 2009, 09:19
Thomas Ramel Plusfelder und Minusfelder im Excel 2007
Dieses Thema ist gesperrt, du kannst keine Beiträge editieren oder beantworten. Excel Formeln: Excel 2003 --> 2007 Wahnsinnig langsam! 6 elsr 2219 01. Sep 2009, 13:17
< Peter > Excel 2003 --> 2007 Wahnsinnig langsam!
Keine neuen Beiträge Excel Formeln: Exel 2007 Lotto Auswertungs Formel gesucht. 1 fridu 1717 21. Mai 2009, 12:22
Gast Exel 2007 Lotto Auswertungs Formel gesucht.
Keine neuen Beiträge Excel Formeln: Excel 2000-Dateien mit Verknüpfungen in 2007 öffnen 1 ToBo 1023 06. Apr 2009, 08:47
Gast Excel 2000-Dateien mit Verknüpfungen in 2007 öffnen
Keine neuen Beiträge Excel Formeln: Outlook 2007 Wochenenddarstellungen 1 akromi 309 28. März 2009, 19:11
shift-del Outlook 2007 Wochenenddarstellungen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Expression Web Forum