【发布时间】:2018-04-05 00:11:51
【问题描述】:
所以这是我目前面临的问题。我正在使用的报告有项目符号点(wingdings)被用作复选框。我正在尝试制作一个脚本来查找并用 activex 复选框替换所有项目符号,这是我拥有的小代码:
Sub RemoveBulletsInsertCB()
Dim objParagraph As Paragraph
Dim objDoc As Document
Application.ScreenUpdating = False
Set objDoc = ActiveDocument
For Each objParagraph In objDoc.Paragraphs
If objParagraph.Range.ListFormat.ListType = WdListType.wdListBullet Then
objParagraph.Range.ListFormat.RemoveNumbers
'Call insertCB
End If
Next objParagraph
Application.ScreenUpdating = True
Set objDoc = Nothing
End Sub
Public Sub insertCB()
Set myOB = Selection.InlineShapes.AddOLEControl(ClassType:="Forms.CheckBox.1")
With myOB.OLEFormat
.Activate
Set myObj = .Object
End With
With myObj
'now you can name the field anything you want
.Name = ("CB1")
.value = False
'delete the caption, or have it say what you want
.Caption = ""
.Height = 11.5
.width = 18
End With
结束子
上面的代码很好地删除了项目符号,但我想用一个没有任何标题的 activex 复选框替换它。
另外,当我想用 activex 复选框替换项目符号时,insertCB 代码只能工作一次。
我希望我的问题可以理解,并提前感谢您。
【问题讨论】:
-
Cindy,ActiveX 复选框的原因是因为我正在运行脚本来尝试将此文档转换为数字操作程序。曾经编写过原始程序的人使用方形项目符号作为复选标记......
-
Word 中可用的复选框类型很少 - 内容控件、旧版表单、ActiveX、HTML 等,因此问题可能是关于 ActiveX 选择而不是更多“本机”选项。我建议使用 Record Macro 来查看生成的代码是否提供任何提示
-
我在问“为什么选择 ActiveX”,因为除非您需要表单功能,否则 (IMO) 有更好的选择。换一种方式:当这些复选框被选中时,文档中应该发生什么?代码应该运行吗?它只是视觉上的吗?其他代码是否应该能够轻松评估?是否应该在文档的某个时间点执行数据挖掘以提取信息?我正在尝试确定当不同类型的复选框可能更适合时,您/我们将精力投入到 ActiveX 是否有意义。
-
@BillWoodward ActiveX 也因安全问题而被劝阻。许多公司甚至将其网络策略设置为不运行它们。除非有令人信服的理由使用它们,否则请考虑使用其他控件。 Word 的内容控件现在是首选方式。
-
@CindyMeister 谢谢,除了能够显示步骤已执行之外,复选框没有其他功能。根据 ForEachLoop 所说的。最好远离 ActiveX 复选框。