我有几个包含旧的不可单击的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
答案 0 :(得分:0)
要搜索UTF = 8字符,您必须搜索
之类的Unicode。也可能会探究其他类似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专家学习
FormField
类型的组合框的情况下,无法使用简单的Find循环插入ActiveX组合框?