2016-06-22 3 views
0

У меня есть следующий код в VBA (MS Word), который предназначен для запуска после того, как я нажимаю на кнопку, названный cmdFormPreencher вставленной в моем документе:VBA: Код не работает после ToggleFormsDesign

Private Sub cmdFormPreencher_Click() 
' 
If ActiveDocument.FormsDesign = False Then 
    ActiveDocument.ToggleFormsDesign 
End If 
' 
ThisDocument.cmdFormPreencher.Select 
ThisDocument.cmdFormPreencher.Delete 

ActiveDocument.ToggleFormsDesign 

' 
UserForm2.Show 
End Sub 

Цель вышеприведенного кода - удалить эту кнопку, вставленную в мой документ. Но когда я запускаю код, выбирается только кнопка. Когда я попытался выяснить, что происходит при отладке, он показал мне, что код работает до ActiveDocument.ToggleFormsDesign и не запускает оставшийся код

Является ли это ошибкой VBA или я что-то не так? Если да, то как я могу обойти эту проблему?

Спасибо!

Примечание: кнопка ActiveX не находится в верхнем и нижнем колонтитуле. Текст Wrap установлен на В передней части текста

Edit:

Когда я пытаюсь запустить макрос, активизируя FormDesign, Выбор кнопки ActiveX и затем удалить, я получаю этот код:

Sub Macro1() 
' 
' Macro1 Macro 
' 
' 
    ActiveDocument.ToggleFormsDesign 
    ActiveDocument.Shapes("Control 52").Select 
    Selection.ShapeRange.Delete 
    ActiveDocument.ToggleFormsDesign 
End Sub 

Но когда я запускаю этот код ничего не происходит ...

+0

У вас есть 'ActiveDocument.ToggleFormsDesign' дважды здесь ... код останавливается после первого, пропуская' ThisDocument.cmdFormPreencher.Select' и '.Delete' или останавливается после второго, пропуская' UserForm2.Show'? –

+0

@ Mat'sMug После первого – tdmsoares

ответ

1

Это дизайн. Когда приложение Office находится в режиме режима разработки, код не должен запускаться на объекте ActiveX, который является частью документа.

Я понимаю, что это кнопка ActiveX, и в этом случае она является частью коллекции InlineShapes или Shapes - Word обрабатывает ее как графический объект. Этого достаточно, чтобы удалить графическое представление, которое вы можете сделать, изменив его, чтобы он отображался как значок вместо кнопки.

Например, для InlineShape:

Sub DeleteActiveX() 
    Dim ils As word.InlineShape 

    Set ils = ActiveDocument.InlineShapes(1) 
    ils.OLEFormat.DisplayAsIcon = True 
    ils.Delete 
End Sub 

Вы просто должны понять, как определить InlineShape или формы. Вы можете добавить закладку InlineShape; Форма имеет свойство Name.

EDIT: Поскольку в соответствии с последующей информации, представленной в комментариях у вас есть объект Shape, а не InlineShape следующий подход должен работать:

Dim shp As word.Shape 

Set shp = ActiveDocument.Shapes("Shape Name") 'Index value can also be used 
shp.Delete 

Обратите внимание, что слово будет автоматически назначать что-то к Shape.Name собственности, но в случае элементов управления ActiveX эти имена могут измениться на , по-видимому нет причины. Поэтому, если вы идентифицируете элемент управления, используя его имя вместо значения индекса, гораздо лучше назначить имя самостоятельно, которое Word не изменится «по прихоти».

  1. Активировать режим проектирования.
  2. Нажмите на ДУ, чтобы выбрать его
  3. Перейти к окну VB Editor
  4. Ctrl + G, чтобы поместить фокус в «Immediate Window»
  5. Введите следующую (подставляя имя, которое вы хотите), затем нажмите Enter, чтобы выполнить:

    Selection.ShapeRange (1) .Name = "Имя, чтобы назначить"

  6. Используйте этот Name в коде выше

+0

Да, это кнопка ActiveX. Часть выяснения количества InlineShape является проблемой сейчас ... Я прочитал в другом сообщении, что InlineShapes перечислены в панели выбора, но даже я обращаюсь к нему, кнопка ActiveX там не отображается ... Есть ли другой способ открыть его? – tdmsoares

+0

Я попытался назначить inlineShape как номер 1: Установить inlineShape = ActiveDocument.InlineShapes (1), но я получаю ошибку 5941 «Запрошенные члены colection не существуют» – tdmsoares

+0

Вы уверены, что это InlineShape, а не Shape? Графически это форматируется с помощью текстового переноса или как встроенный? Это ни в коем случае не в Header, Footer или что-нибудь еще? –

Смежные вопросы