我有一个Word文档,其中包含多个顺序标签(目前为ActiveX控件,可以打开建议,请参见下图),分别标记为label1,label2等。
我想使用VBA使用来自excel的数据为这些标签加上标题。
到目前为止,我的方法基于本文,但是我想添加一个循环来获得每个标签的标题(我大约有40个),而没有40行代码。
https://www.makeuseof.com/tag/integrate-excel-data-word-document/
我使用ActiveX控件的原因是因为本教程建议这样做。由于它们被称为“传统”,我想有更好的选择。
这是我当前的代码:
def func_a(link):
request = requests.get(link)
soup = bs4.BeautifulSoup(request.text, 'lxml')
soup = soup.find('a', {'class': 'mva_item'})
result = soup['href']
return result
结束子
我大多数时候会遇到以下错误:
我确实尝试过,但是没有用。
答案 0 :(得分:0)
您可以尝试这样的操作来循环遍历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
我在此处提供的示例将打印出标签名称,但您可以将其作为示例,然后尝试根据需要进行修改。
答案 1 :(得分:0)
设置此程序时,请注意以下几点。
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
我使用Label1,Label2,Label3等顺序保留Label名称。
甚至每个Excel按钮的标题都根据Excel工作表单元格引用进行了更改。
我尝试了5个Label的示例,并且程序运行正常,如所附快照所示。我只是致力于使适当的语法起作用,并且可以对文档外观和布局的美学措施进行进一步的改进。
此示例代码保存在expense2.docm文件中对我有用:
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