none
Seltsames Verhalten im Word-Kontextmenü 'Text' RRS feed

  • Frage

  • Hallo,

    ich habe eine Word-doc mit 6 Funktionen, die dem Anwender zur Verfügung stehen sollen und zwar via Kontextmenü.

    Leider kann ich nicht über eine DOT arbeiten, sondern habe allen Programmcode in der DOC. Ferner muss ich davon ausgehen, dass die DOC unter Wortd 2003 bis 2010 benutzt wird.

    Ich habe mich zu folgender Vorgehenweise entschlossen:

    In Document_Open wird eine Routine aufgerufen die die Kontextmenüs um diese 6 Funktionen am Anfang ergänzt und zwar für die CommandBars Text, Headings, Lists, Form Fields und einigen anderen mehr. Alle so angelegten CommandBarControls erhalten ein bestimmtes Tag. Eine Löschroutine entfernt die Menüpunkte anhand dieses Tags. Diese Löschroutine wird von Document_Close aufgerufen.

    Nun klappt das im Grunde sehr gut unter Word 2003. Unter 2007 und 2010 habe ich auch keine Probleme, solange ich mich nicht im 'Text'-Bereich befinde. Bei Gliederungstext (Headings), Listen und anderen Absätzen habe ich genau, was ich will. Nur leider unter 'Text' nicht. Dort befinden sich unter 2007 keine Funktion, unter 2010 5 der 6 Mneüpunkte allerdings in völlig anderer Reihenfolge und eine Eintrag doppelt. Das seltsame ist, die Routine für die Kontextmenüs ist für alle identisch:

    Friend Sub SetContextMenuItem(ByVal FaceId As Long, ByVal Action As String, ByVal Caption As String)
       Dim cb As CommandBar
       Dim cbCtrl As CommandBarControl
       Dim vItem As Variant
       
       m_CountMenuItems = m_CountMenuItems + 1
       For Each vItem In m_ColCbs
          Set cb = CommandBars(vItem)
          Set cbCtrl = cb.Controls.Add(Type:=msoControlButton, Before:=m_CountMenuItems, Temporary:=True)
          With cbCtrl
             .Caption = Caption
             .OnAction = Action
             .FaceId = FaceId
             .Tag = "XYZ"
          End With
        Next
    End Sub

    Mit m_ fangen modulglobale Variablen der Klasse an, die diese Funktion enthält.
    m_ColCbs ist eine Collection mit den Namen der zu ändernden Kontextmenüs, darunter auch 'Text'
    m_CountMenuItems ist eine Zähler, der zu Beginn auf 0 steht.

    Die Funktion wird 6 mal mit Werten für  FaceId, Action und Caption aufgrufen.

    Gibt es irgendeine Erklärung, warum ausgerechnet in einem Fall ein völlig anderes Verhalten auftritt?

    Noch als Ergänzung: Bei sämtlichen Test war nur dies DOC geöffnet. Als Vorlage dient Normal.dot und Normal.dot enthält keine Funktionen.


    Grüße aus Köln am Rhein - Klaus Trapp

    Montag, 4. März 2013 19:43

Antworten

  • CustomizeContextmenu

    war die Lösung - in diesem Fall = ActiveDocument.

    (unverzichtbar bei allen Arbieten an Menüs)


    Grüße aus Köln am Rhein - Klaus Trapp

    • Als Antwort markiert Klaus Trapp Freitag, 8. März 2013 11:50
    Freitag, 8. März 2013 11:50

Alle Antworten

  • CustomizeContextmenu

    war die Lösung - in diesem Fall = ActiveDocument.

    (unverzichtbar bei allen Arbieten an Menüs)


    Grüße aus Köln am Rhein - Klaus Trapp

    • Als Antwort markiert Klaus Trapp Freitag, 8. März 2013 11:50
    Freitag, 8. März 2013 11:50
  • Nachtrag: Natürlich heißt es

      CustomizationContext

    und es empfiehlt sich hier

      = ThisDocument

    statt ActiveDocument zu setzen. Im vorliegenden Fall liegt der VBA-Code in der DOC-Datei selbst. Wenn man dann per Document_Open versucht das Kontextmenü zu aktivieren, kommt es zu dem Problem, dass ActiveDocument noch nicht oder nicht das richtige 'aktiv' sind. Dies wird mit ThisDocument umgangen.


    Grüße aus Köln am Rhein - Klaus Trapp

    Mittwoch, 3. April 2013 13:06