2016-01-19 1 views
-1

Я занят некоторыми автоматизациями слов и столкнулся с проблемой, когда контекстное меню внутри документа содержит элементы, которые я хочу удалить.эквивалент VB.Net для (CustomizationContext) в VBA

Как только документ открыт, через vba я могу удалить эти элементы, выполнив следующий код;

[VBA]

Dim oContextMenu As CommandBar 
Dim oContextMenuItem As CommandBarControl 

'Make changes to the ActiceDocument only (this is needed to make any changes to this document). 
CustomizationContext = ActiveDocument 

For Each oContextMenu In ActiveDocument.CommandBars 

    If oContextMenu.Type = MsoBarType.msoBarTypePopup Then 'Loop through all the context menus of type (msoBarTypePopup) 

     For Each oContextMenuItem In oContextMenu.Controls 

      If (InStr(oContextMenuItem.Caption, "Smokeball")) Then 
       oContextMenuItem.Delete 
      End If 

     Next 

    End If 

Next 

Если я выполняю этот код и проверить документ, все элементы суб Контекстное, которые содержат текст «smokeball» удаляются.

Когда я пытаюсь переместить этот код в мое решение VB.NET (у меня нет выбора языка, поэтому VB это), я получаю ошибки на линии CustomizationContext = ActiveDocument (эта строка должна быть там, чтобы она влияла на текущий документ).

Ошибки я получаю CustomizationContext' is not a by reference property.

Кто-нибудь знает, как получить только, что одна линия эквивалент vb.net?

Заранее спасибо.

EDIT: В случае, если вам нужно, чтобы увидеть vb.net суб:

 Private Sub RemoveUnwantedContextMenuItems() 

      Dim oContextMenu As CommandBar 
      Dim oContextMenuItem As CommandBarControl 

      'Make changes to the ActiceDocument only (this is needed to make any changes to this document). 
      WordApplication.CustomizationContext = WordApplication.ActiveDocument 'This is the error. 

      For Each oContextMenu In WordApplication.CommandBars 

       If oContextMenu.Type = MsoBarType.msoBarTypePopup Then 'Loop through all the context menus of type (msoBarTypePopup) 

        For Each oContextMenuItem In oContextMenu.Controls 

         If (InStr(oContextMenuItem.Caption, "Smokeball")) Then 
          oContextMenuItem.Delete() 
         End If 

        Next 

       End If 

      Next 

     End Sub 

PS - я тоже уже пробовал использовать .AttachedTemplate, а также .Normal/.NormalTemplate

+0

Мне бы очень хотелось, чтобы кто-нибудь задал этот вопрос -1, чтобы дать объяснение ... Было близко к полуторадневным исследованиям для этой темы. – Hexie

+0

был инициализирован и открыт WordApplication? – Jules

+0

@Jules Да, я уже использую его в других областях на данном этапе. – Hexie

ответ

0

Жюль указал мне в вправо с его примером кода. После многих игр вокруг я заметил, что где-то в решении, [TYPE] WordApplication менялся на динамический тип сортировки, следовательно, он не мог использовать CustomizationContext.

Мое решение было это:

Я изменил эту линию;

WordApplication.CustomizationContext = WordApplication.ActiveDocument 

Для этого:

CType(WordApplication, Microsoft.Office.Interop.Word.Application).CustomizationContext = WordApplication.ActiveDocument 

Принуждение типов, чтобы быть правильным.

Простое решение, но потребовалось некоторое время.

Спасибо Жюлю за то, что указали мне в правильном направлении. (Очки должны идти к вам).