Hi Leute
Ich habe mir eine Erweiterung für MS-Word gebaut (VBA-Projekt in Dokumentvorlage (.dot)). Das Addin beinhaltet ein Hauptformular (hauptsächlich bestehend aus einem TreeView) und in diesem Hauptformular verwende ich ein Kontextmenu. Ich habe nun das Problem, dass irgendwie das Kontextmenu nicht richtig im Addin gespeichert wird. Deshalb lasse ich als Workaround bei jedem Start des Hauptformulars das Kontextmenu löschen und neu erstellen. Dies führt aber dazu, dass bei der Verwendung des Addins Word meint, das Addin sei geändert worden und fragt deshalb nach, ob die Änderungen an der Dokumentvorlage gespeichert werden sollen. Diese Rückfrage verunsichert die User und ausserdem ist die Rückfrage störend. Deshalb wäre es mir eigentlich am liebsten, wenn die Sache von Anfang an richtig gelöst wäre und nicht per workaround.
Hier mal der relevante Code im Ereignis Initialize des Hauptformulars:
und hier noch ein anderer Code-Ausschnitt:
Hat irgendwer eine Idee, was hier das Problem sein könnte und wo ein allfälliger Lösungsansatz zu suchen wäre? Für jeden Hinweis bin ich dankbar.
Ich habe mir eine Erweiterung für MS-Word gebaut (VBA-Projekt in Dokumentvorlage (.dot)). Das Addin beinhaltet ein Hauptformular (hauptsächlich bestehend aus einem TreeView) und in diesem Hauptformular verwende ich ein Kontextmenu. Ich habe nun das Problem, dass irgendwie das Kontextmenu nicht richtig im Addin gespeichert wird. Deshalb lasse ich als Workaround bei jedem Start des Hauptformulars das Kontextmenu löschen und neu erstellen. Dies führt aber dazu, dass bei der Verwendung des Addins Word meint, das Addin sei geändert worden und fragt deshalb nach, ob die Änderungen an der Dokumentvorlage gespeichert werden sollen. Diese Rückfrage verunsichert die User und ausserdem ist die Rückfrage störend. Deshalb wäre es mir eigentlich am liebsten, wenn die Sache von Anfang an richtig gelöst wäre und nicht per workaround.
Hier mal der relevante Code im Ereignis Initialize des Hauptformulars:
Visual Basic-Quellcode
- ' ContextMenu erstellen
- ' ContextMenu muss zuerst gelöscht und dann wieder neu erstellt werden, weil ansonsten jeweils zur Laufzeit der Fehler:
- ' "Automatisierungsfehler -2147467259 (80004005): unbekannter Fehler" auftritt. Dies muss offenbar damit zu tun haben, dass
- ' das Contextmenu nicht korrekt dauerhaft gespeichert wird.
- ' Allenfalls schafft die Verwendung von: Application.CustomizationContext Abhilfe.
- For lngCounter = 1 To Application.CommandBars.Count
- If Application.CommandBars.Item(lngCounter).Name = strTBContextMenu Then
- Call DeleteContextMenu
- Call DeleteContextMenu
- Exit For
- End If
- Next
- Call CreateContextMenu
und hier noch ein anderer Code-Ausschnitt:
Visual Basic-Quellcode
- Private Sub CreateContextMenu()
- On Error GoTo Err_CreateContextMenu
- Dim objMenu As CommandBar
- Dim objME As CommandBarButton
- Dim objTemplate As Template
- Dim objOldTemplate As Template
- Dim intCounter As Integer
- ' 1. CustomizationContext ändern
- Set objOldTemplate = Application.CustomizationContext
- Set objTemplate = Nothing
- For intCounter = 1 To Application.Templates.Count
- If Application.Templates(intCounter).Name = strTBFileName Then
- If objTemplate Is Nothing Then
- Set objTemplate = Application.Templates(intCounter)
- End If
- End If
- Next
- If objTemplate Is Nothing Then
- Application.CustomizationContext = Application.ActiveDocument
- Else
- Application.CustomizationContext = objTemplate
- End If
- ' 2. Menu aufbauen
- Set objMenu = Application.CommandBars.Add(Name:="TBContextMenu", Position:=msoBarPopup, MenuBar:=False, Temporary:=True)
- Set objME = objMenu.Controls.Add(Type:=msoControlButton, ID:=1, Temporary:=True)
- With objME
- .Caption = "Eintrag neu"
- .Parameter = "NewEntry"
- .FaceId = 1589
- .OnAction = "ContextMenuHandler"
- End With
- Set objME = objMenu.Controls.Add(Type:=msoControlButton, ID:=1, Temporary:=True)
- With objME
- .Caption = "Ordner neu"
- .Parameter = "NewFolder"
- .FaceId = 1660
- .OnAction = "ContextMenuHandler"
- End With
- Set objME = objMenu.Controls.Add(Type:=msoControlButton, ID:=1, Temporary:=True)
- With objME
- .Caption = "Eintrag ändern"
- .Parameter = "EditEntry"
- .FaceId = 1552
- .OnAction = "ContextMenuHandler"
- End With
- Exit_CreateContextMenu:
- Application.CustomizationContext = objOldTemplate
- Set objOldTemplate = Nothing
- Set objTemplate = Nothing
- Set objME = Nothing
- Set objMenu = Nothing
- Exit Sub
- Err_CreateContextMenu:
- If Err.Number = 0 Then
- GoTo Exit_CreateContextMenu
- Else
- LogError "MainForm::CreateContextMenu", Err
- Resume Exit_CreateContextMenu
- End If
- End Sub
Hat irgendwer eine Idee, was hier das Problem sein könnte und wo ein allfälliger Lösungsansatz zu suchen wäre? Für jeden Hinweis bin ich dankbar.