我有一个word文档,其中包含几个顺序标签(目前是ActiveX控件,对建议开放,见下图),标记为label1,label2等。
我想使用VBA使用excel中的数据为这些标签添加标题。
到目前为止,我已经基于这篇文章的方法,但是想要添加一个循环来获得每个标签(我有大约40个)没有40行代码。
https://www.makeuseof.com/tag/integrate-excel-data-word-document/
我使用ActiveX控件的原因是因为教程建议了它。由于它们被称为“遗产”,我认为有更好的选择。
这是我目前的代码:
Private Sub LoadText1_Click()
Dim objExcel As New Excel.Application
Dim exWb As Excel.Workbook
Dim cnt As Integer
Set exWb = objExcel.Workbooks.Open("D:\...\content.xlsx")
For cnt = 1 To 40
ThisDocument.ContentControls("label" & cnt).Caption = exWb.Sheets("Sheet1").Cells(cnt, 1)
'Alternative methods tried:
ThisDocument.OLEObjects("label" & cnt).Object.Caption = exWb.Sheets("Sheet1").Cells(cnt, 1)
ThisDocument.Controls("label" & cnt).Caption = exWb.Sheets("Sheet1").Cells(cnt, 1)
ThisDocument.Shapes("label" & cnt).OLEFormat.Caption = exWb.Sheets("Sheet1").Cells(cnt, 1)
Next cnt
exWb.Close
Set exWb = Nothing
结束子
我大部分时间都得到以下错误:
我试过这个,但它没有用。
设置此程序时请注意以下几点。
Word VB Editor
中的Tools-References
包含对应于您的版本的Microsoft Excel对象库的引用。Excel
实例未正确关闭然后Excel
文件被锁定以进行编辑。您可以保存新版本的文件并在Word程序中进行相应的更改,也可以重新启动系统以保留相同的程序版本。for loop
限制为有限数量的字段的其他变体对我来说不起作用并且引起语法错误。如果您愿意,可以尝试其他变体。
For Each fld In ThisDocument.Fields
fld.OLEFormat.Object.Caption = exWb.Sheets("Sheet1").Cells(i, 1) & exWb.Sheets("Sheet1").Cells(i, 2)
i = i + 1
Next
Private Sub CommandButton1_Click()
Dim objExcel As New Excel.Application
Dim fld As Field
Dim exWb As Excel.Workbook
Dim i As Integer
Set exWb = objExcel.Workbooks.Open("C:\mydirb\expenses2.xlsx") 'Change path as per your requirement
i = 2
For Each fld In ThisDocument.Fields
fld.OLEFormat.Object.Caption = exWb.Sheets("Sheet1").Cells(i, 1) & exWb.Sheets("Sheet1").Cells(i, 2)
i = i + 1
Next
For Each fld In ThisDocument.Fields
Debug.Print fld.OLEFormat.Object.Caption
Next
exWb.Close
Set exWb = Nothing
End Sub
你可以尝试这样的东西来循环word文档中的ActiveX对象:
For Each AX_Controls In ActiveDocument.InlineShapes
If AX_Controls.OLEFormat.ProgID = "Forms.Label.1" Then
MsgBox AX_Controls.OLEFormat.Object.Name
End If
Next AX_Controls
我在这里提供的示例打印出标签名称,但您可以将其作为示例,并尝试根据您的需要进行修改。