Для поиска UTF = 8 символов вы должны искать Unicodes, такие как
- U + 2610 десятичных ☐ Не установлен флажок
- U + 2611 десятичных ☑ Установлен флажок
- U + 2612 десятичный ☒ Crossed Checkbox
Другие подобные символы Юникода также могут быть изучены для того, что именно в вашем случае.Я тестировал с десятичным числом U + 2610 Check Не установлен флажок.
Для замены на FormField
тип ComboBox
Я успешно использовал приведенный ниже код
Sub TestFormFieldCB()
Dim Rng As Range, cb As FormField
ActiveDocument.Content.Select
With Selection.Find
.Text = ChrW(9744)
Do While .Execute
Set Rng = Selection.Range
ht = Rng.Font.SizeBi
Rng.Delete
Set cb = Rng.FormFields.Add(Rng, wdFieldFormCheckBox)
cb.CheckBox.Size = ht
Loop
End With
'ActiveDocument.Protect wdAllowOnlyFormFields
End Sub
Недостаток этого типа ComboBox
документ должен быть защищен, чтобы ComboBox можно было нажимать.
В качестве второго варианта я попытался использовать ActiveX Type ComboBox.Его легко кликнуть даже в незащищенном режиме, но его трудно выровнять и сопоставить с текстом в строке.Кроме того, каким-то образом я не смог использовать тот же цикл поиска, что и в приведенном выше коде, и мне пришлось обходиться другим способом.
Окончательный проверенный код:
Sub testActiveXCB()
Dim Rng As Range, cb As InlineShape, Fnd As Boolean
ActiveDocument.Content.Select
With Selection.Find
.Text = ChrW(9744)
.Execute
Do While Selection.Find.Found
Set Rng = Selection.Range
ht = Rng.Font.SizeBi
Rng.Delete
Set cb = Rng.InlineShapes.AddOLEControl(ClassType:="Forms.CheckBox.1")
Debug.Print cb.OLEFormat.Object.Name & "-" & cb.Height
cb.Width = cb.Height
cb.Width = ht
cb.OLEFormat.Object.Caption = ""
cb.OLEFormat.Object.PicturePosition = 2
'Use next Line when replacing Checked Unicode Char mat be U+2611 or U+2612
'cb.OLEFormat.Object.Value = True
ActiveDocument.Content.Select
Selection.Find.Execute
Loop
End With
End Sub
(Все тесты выполняютсятолько в Word 2007)
Я прошу больше ответов и хочу узнать от экспертов Word VBA о
- Почему нельзя добавить поле со списком ActiveX с помощью простого цикла поиска, используемого вкейс
FormField
типа Combo Box? - Как эффективно выровнять Active X Combo Box с текстом Line?