如何在Word with Macros中将UTF8字符替换为可点击的复选框?

时间:2019-06-13 17:13:08

标签: vba ms-word

我有几个包含旧的不可单击的UTF8字符复选框()的Word文件,我想用真实的可单击复选框替换它们。应该取消选中它们的并检查另一个指定的UTF8字符(我现在不知道它的数量)。

我尝试从网上找到的宏进行搜索,替换和复制。我不是文字用户,这是一项一次性的任务,所以可悲的是我没有时间充分学习VBA来编写诸如宏之类的东西。

我在网上找到了它,但是在Macros-Window中,我什至无法将copy复制到“要搜索的字符串”中。

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 :(得分:0)

要搜索UTF = 8字符,您必须搜索

之类的Unicode。
  1. U + 2610十进制&#9744未选中的复选框
  2. U + 2611十进制&#9745选中的复选框
  3. U + 2612十进制&#9746交叉复选框

也可能会探究其他类似Unicode字符的具体情况。我使用U + 2610十进制&#9744未选中复选框进行了测试。

要用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。即使在不受保护的模式下,也可以轻松单击它,但是很难与行中的文本对齐和调整大小。另外,以某种方式,我无法使用与上面的代码相同的find循环,而不得不以其他方式解决。

最终测试的代码是

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. 为什么在FormField类型的组合框的情况下,无法使用简单的Find循环插入ActiveX组合框?
  2. 如何有效地将Active X组合框与文本行对齐?