excel - 使用变量按名称选择 ActiveX 控件复选框(在 Word 或 Excel 中)?

标签 excel vba checkbox ms-word

这行代码有什么问题?

WordDoc.CheckBoxNum.Value = CheckBoxVal

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

如果它们是表单字段...这有效--

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

最佳答案

遗憾的是,我们无法使用 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

关于excel - 使用变量按名称选择 ActiveX 控件复选框(在 Word 或 Excel 中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24088721/

相关文章:

java - 使用apache poi在excel中将图像高度与行高相匹配

excel - 无法在 VbScript 中复制 Excel 中的大量数据

jsf - 绑定(bind)h :selectBooleanCheckbox value to int/Integer instead of boolean/Boolean

c# - 从 DataGrid WPF C# 中的选定行获取特定单元格的数据

php - 复选框 css 仅适用于第一个循环项

excel - 如何从 Outlook 邮件正文复制带有超链接的文本并以正确的格式保存到 Word 文档中

vba - 删除范围内的空白或零列

sql - 从 ADODB 命令/记录集更新 ACCESS 时出错

vba - 使用 VBA 查找

excel - VBA:从集合创建数据透视表或使用更好的算法?