【问题标题】:Use a variable to select an ActiveX control Checkbox by name (in Word from Excel)?使用变量按名称选择 ActiveX 控件复选框(在 Excel 中的 Word 中)?
【发布时间】:2014-07-28 03:08:05
【问题描述】:

这行代码有什么问题?

WordDoc.CheckBoxNum.Value = CheckBoxVal

明确地说,我正在使用 ActiveX 控件“复选框”。我将值(真/假)和复选框名称保存在 Excel 文件中。代码打开我的word文档并自动循环检查复选框,设置它们的值。我从 Excel 控制字的事实可能会改变我的对象?

如果它们是表单域...这行得通--

CheckBoxNum = "Check1"
CheckBoxVal = "True"
WordDoc.FormFields(CheckBoxNum).CheckBox.Value = CheckBoxVal

这是我的全部代码

Sub Doit()
    Dim WordApp As Object
    Dim WordDoc As Object
    Dim filepath As String
    Dim CheckBoxNum As String
    Dim CheckBoxVal As String
    Dim i As Integer, k As Integer

    'Open Word
    filepath = "C:\test.docx"
    Set WordApp = CreateObject("word.application")
    WordApp.Visible = True
    Set WordDoc = WordApp.Documents.Open(filepath)

    'Editing
    Range("a1").Select 'first value
    i = 0
    For i = 0 To 6 ' number of rows in table 
          'get from excel
          CheckBoxNum = ActiveCell.Offset(i, k + 1).Value
          CheckBoxVal = ActiveCell.Offset(i, k).Value

           'put to word
           WordDoc.CheckBoxNum.Value = CheckBoxVal '<-- HELP!
    Next i

    '// CLEAN UP //
    WordDoc.Application.ActiveDocument.Save
    WordDoc.Close
    WordApp.Quit
    Set WordDoc = Nothing
    Set WordApp = Nothing
End Sub

【问题讨论】:

    标签: excel vba checkbox ms-word


    【解决方案1】:

    AFAIK,你可以使用:

    WordDoc.InlineShapes(CheckBoxNum).OLEFormat.Object.Value = CheckBoxVal
    

    【讨论】:

      【解决方案2】:

      很遗憾,我们不能使用 WordDoc.InlineShapes(CheckBoxNum) 直接通过名称来引用 ActiveX 控件,这只有在我们知道它的索引号时才有效:WordDoc.InlineShapes(1)

      这意味着您必须遍历所有控件,将其 OLEFormat.Object.Name 与您要查找的名称进行比较:

      Dim obj As Object
      
      For i = 0 To 6 ' number of rows in table
          'get from excel
          CheckBoxNum = ActiveCell.Offset(i, k + 1).Value
          CheckBoxVal = ActiveCell.Offset(i, k).Value
      
          For Each obj In WordDoc.InlineShapes
              If obj.OLEFormat.Object.Name = CheckBoxNum Then
                  obj.OLEFormat.Object.Value = CheckBoxVal
              End If
          Next obj
      Next i
      

      【讨论】:

      • 非常有帮助,谢谢。我最终将 For Each 循环移动到一个函数中以获得更干净的代码 - 但这个解决方案真的为我钉上了它
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      相关资源
      最近更新 更多