【问题标题】:Iterate through ActiveX label with VBA使用 VBA 遍历 ActiveX 标签
【发布时间】:2019-08-07 06:45:36
【问题描述】:

我有一个包含几个顺序标签的 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

结束子

我大部分时间都收到以下错误:

我试过这个,但没用。

VBA: How to loop through labels (not on a userform)?

VBA ActiveX label in a sheet

【问题讨论】:

    标签: excel vba ms-word activex


    【解决方案1】:

    您可以尝试这样的方法来遍历 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 
    

    我在此处提供的示例打印出标签名称,但您可以将其作为示例并尝试根据需要进行修改。

    【讨论】:

      【解决方案2】:

      设置此程序时请注意以下几点。

      • Word VB EditorTools-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 等序列保留标签名称。

      • 即使是命令按钮标题也会根据 Excel 工作表单元格引用进行更改。

      • 我尝试了 5 个标签的样本,程序运行良好,从附加的快照中可以看出。我只致力于让正确的语法发挥作用,并且可以进一步改进文档外观和布局的美学措施。

      • 保存在费用 2.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
        

      【讨论】:

        猜你喜欢
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        • 2011-08-14
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多