Как заменить UTF8-символ активируемым флажком в Word с макросами? - PullRequest
0 голосов
/ 13 июня 2019

У меня есть несколько Word-файлов, содержащих не-кликабельные флажки UTF8 в старом стиле (), и я хочу заменить их настоящими, нажимаемыми флажками. Они должны быть сняты с отметки checked и проверены на наличие другого указанного символа UTF8 (номер которого я сейчас не знаю).

Я пробовал искать, заменять и копировать из макросов, которые я нашел в Интернете. Я не пользователь слов, и это одноразовая задача, поэтому, к сожалению, у меня нет времени, чтобы достаточно хорошо изучить VBA, чтобы написать такую ​​вещь, как макрос.

Я нашел это в Интернете, но в окне макросов я даже не могу скопировать  в «строку для поиска».

For Each myStoryRange In ActiveDocument.StoryRanges
    With myStoryRange.Find
        .Text = "string to be searched"
        .Replacement.Text = "string to be replaced"
        .Wrap = wdFindContinue
        .ClearFormatting
        .Replacement.ClearFormatting
        .Replacement.Highlight = False
        .Execute Replace:=wdReplaceAll
    End With
Next myStoryRange  

1 Ответ

0 голосов
/ 17 июня 2019

Для поиска UTF = 8 символов вы должны искать Unicodes, такие как

  1. U + 2610 десятичных ☐ Не установлен флажок
  2. U + 2611 десятичных ☑ Установлен флажок
  3. 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 о

  1. Почему нельзя добавить поле со списком ActiveX с помощью простого цикла поиска, используемого вкейс FormField типа Combo Box?
  2. Как эффективно выровнять Active X Combo Box с текстом Line?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...