vba не может очистить содержимое слова ContentControl

Содержимое contentcontrol не может быть отредактировано, флажок снят, и я использую код для установки

LockContets = False

, но даже в этом случае по-прежнему возникает ошибка. Вам не разрешено редактировать этот выбор, потому что он защищен

код выглядит следующим образом:

Sub Test()
  Dim CC As ContentControl  
  For Each CC In ActiveDocument.ContentControls
      Debug.Print CC.Type
      Debug.Print CC.Range.Text
      CC.LockContentControl = True
      CC.LockContents = False
      CC.Range.Text = ""    <--error here


  Next CC
End Sub

почему это произойдет? как это решить?


person user1169587    schedule 13.04.2021    source источник
comment
docs.microsoft.com/en-us/office/ vba/api/word.range.text   -  person user1169587    schedule 13.04.2021
comment
Нет, range.text доступен в Word   -  person user1169587    schedule 13.04.2021


Ответы (2)


Вы не можете удалить текст из раскрывающегося списка, флажка или элементов управления содержимым изображения, поскольку они не имеют редактируемого свойства текста.

Попробуйте что-нибудь вроде:

Sub Test()
Dim CC As ContentControl
For Each CC In ActiveDocument.ContentControls
  With CC
    .LockContentControl = True
    .LockContents = False
    Select Case .Type
      Case wdContentControlRichText, wdContentControlText, wdContentControlComboBox, wdContentControlDate
        .Range.Text = ""
      Case wdContentControlDropdownList
        .Type = wdContentControlText
        .Range.Text = ""
        .Type = wdContentControlDropdownList
      Case wdContentControlCheckBox: .Checked = False
      Case wdContentControlPicture: .Range.InlineShapes(1).Delete
    End Select
  End With
Next CC
End Sub
person macropod    schedule 13.04.2021

Существует много типов элементов управления контентом, все, что вам нужно, это добавить условие if, чтобы проверить, является ли тип контента текстовым.

Sub Test()
  Dim CC As ContentControl
  For Each CC In ActiveDocument.ContentControls
      CC.LockContents = False
      If CC.Type = wdContentControlRichText Or CC.Type = wdContentControlText Then
        CC.Range.Text = ""
      End If
  Next CC
End Sub
person abdullah    schedule 13.04.2021