将变量从XLSM传递到嵌入式DOCM

时间:2017-08-28 09:18:25

标签: excel vba excel-vba ms-word word-vba

我的Excel工作表中有一个嵌入的Word文档(*.docm)

Word文档包含table,其与Excel Table中相应的WorkSheet之间存在关联。

我希望嵌入式Word文档中的表行数已在Document_Open事件中动态设置,其值低于其涉及的工作表:

ThisWorkbook.Worksheets("Sheet1").ListObjects("Salary").ListRows.Count

如何在Excel(宏容器文档)及其嵌入式宏容器word文档之间传递值? - 如果它是上述大胆问题的正确答案 - 或其他解决方案?

如果有其他解决方案的答案,请注意需要:

填充目标表(在嵌入的Word文档中)具有来自源数据的相应值的单元格在Worksheet?中的父表中,而不是使用来自宏容器嵌入的word文档的Document_Open事件的自动生成字段。

1 个答案:

答案 0 :(得分:1)

我建议嵌入.docx文档以避免每次打开时禁用宏警报,并将所有代码放在Excel VBA Project中。下面是一个示例,显示如何从Excel VBA更改嵌入式Word文档中的行数:

Sub ChangeRowsCount()

    Dim n As Long

    With ThisWorkbook.Worksheets("Sheet1")
        n = .ListObjects("Table1").ListRows.Count
        With .Shapes("Object 1")
            Select Case True
                Case .Type <> msoEmbeddedOLEObject
                    MsgBox "Invalid OLE Object type"
                Case InStr(1, .OLEFormat.progID, "Word.Document", vbTextCompare) <> 1
                    MsgBox "Invalid Application"
                Case Else
                    .OLEFormat.Object.Verb xlVerbOpen
                    With .OLEFormat.Object.Object.Parent ' Word.Application
                        With .ActiveDocument.Tables(1).Rows
                            Do While .Count <> n
                                If .Count > n Then .Item(.Count).Delete Else .Add
                            Loop
                        End With
                        .Quit
                    End With
                    .Select
                    MsgBox "Success"
            End Select
        End With
    End With

End Sub