使用一个variables来select一个ActiveX控件checkbox的名称(在Excel中的Word)?

这行代码有什么问题?

WordDoc.CheckBoxNum.Value = CheckBoxVal 

要清楚,我正在使用ActiveX控件“checkbox”。 我有值(真/假)和checkbox名称保存在Excel文件中。 代码打开我的Word文档,并自动循环checkbox,设置它们的值。 我从Excel控制单词的事实可能会改变我的对象?

如果他们是forms领域…这个作品 –

 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)名称来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 

AFAIK,你可以使用:

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