gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:48:08 34 4
gpt4 key购买 nike

这行代码有什么问题?

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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com