这行代码有什么问题?
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/