【问题标题】:Replacing all bullet points with check boxes in Microsoft Word用 Microsoft Word 中的复选框替换所有项目符号点
【发布时间】: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 复选框。

标签: vba ms-word


【解决方案1】:

这是用字符复选框替换项目符号的基本方法。我从插入/符号中选择 - 该对话框中有多种可能性。你可以只录制一个宏来获取你想要的信息。

如果您愿意,也可以对 ContentControl 使用类似的方法。

注意Range 对象的使用以及它是如何“折叠”到其起点以获取段落的开头的。

如果您还需要缩进,则需要将其应用于段落。我强烈建议您为此目的定义和应用 STLYE - 不要直接应用格式。

Sub RemoveBulletsInsertCB()
    Dim objParagraph As Paragraph
    Dim rng As word.Range
    Dim objDoc As Document

    Application.ScreenUpdating = False
    Set objDoc = ActiveDocument

      For Each objParagraph In objDoc.Paragraphs
       If objParagraph.Range.ListFormat.ListType = WdListType.wdListBullet Then
            Set rng = objParagraph.Range
            rng.ListFormat.RemoveNumbers

            insertCB rng
       End If
      Next objParagraph

      Application.ScreenUpdating = True
      Set objDoc = Nothing
End Sub   

Public Sub insertCB(rng As word.Range)
    rng.Collapse wdCollapseStart
    rng.InsertSymbol Font:="Wingdings", CharacterNumber:=-3842, Unicode _
        :=True
End Sub

【讨论】:

  • 太棒了!非常感谢...我知道我现在哪里出错了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多