在发布商

时间:2016-05-13 13:51:26

标签: vba ms-publisher

如何使用宏自动更新Publisher中OLEObjects链接的过程?我已经找到了一些关于如何执行此操作的讨论(主要是在PowerPoint中),并且在尝试将其应用于2010 Publisher文档时遇到了一些问题。

首先,当我在消息框中显示.LinkFormat.SourceFullName时,当我通过菜单选项编辑文件链接时,对Excel工作表或对象的引用都不会像在对话框中那样显示。

其次,当我尝试简单地更改显示为.SourceFullName的文件名时,我收到一条编译错误消息,指出我无法分配给只读属性。

对此的任何帮助将不胜感激。

当我应用以下代码时,在尝试分配新链接名称时出现编译错误。如果我注释掉.SourceFullName = newlinkname行,我会收到消息框,告诉我我有Edit和Open ObjectVerbs可用,并且显示的链接名只包含“C:\ Desktop \ Projects \ old.xlsx”。当我通过功能区使用“编辑链接到文件”命令时,它不显示我看到链接到对象的工作表和图表引用。在那里,对话框实际显示:

old.xlsx!H_A_CurrStat_byYrDxBar![old.xlsx] H_A_CurrStat_byYrDxBar图表1

我想使用宏将源名称从old.xlsx更改为new.xlsx,然后更新链接的对象。

Option Explicit

Sub links()

Dim linkname As String
Dim newlinkname As String
Dim shpShape As Shape
Dim intCount As Integer

newlinkname = "C:\Desktop\Projects\new.xlsx"

    For Each shpShape In ActiveDocument.Pages(1).Shapes
       shpShape.OLEFormat.Activate

               With shpShape.OLEFormat
                    For intCount = 1 To .ObjectVerbs.count
                     MsgBox .ObjectVerbs(intCount)
                    Next
                End With

            With shpShape.LinkFormat
                linkname = .SourceFullName
                '.SourceFullName = newlinkname
                MsgBox linkname
            End With

       shpShape.LinkFormat.Update
    Next

End Sub

1 个答案:

答案 0 :(得分:0)

https://msdn.microsoft.com/en-us/library/office/ff940537.aspx?f=255&MSPPError=-2147217396

此激活所有对象的代码可能有所帮助:

    Sub ActivateOLEObjects() 
            Dim shpShape As Shape 

            For Each shpShape In ActiveDocument.Pages(1).Shapes 
                    If shpShape.Type = pbLinkedOLEObject Then 
                            shpShape.OLEFormat.Activate 
                    End If 
            Next 
    End Sub

或者甚至更好,这个用于更新链接的示例代码: https://msdn.microsoft.com/en-us/library/office/ff939544.aspx

    Sub FindOLEObjects() 
            Dim shpShape As Shape 

            For Each shpShape In ActiveDocument.Pages(1).Shapes 
                    If shpShape.Type = pbLinkedOLEObject Then 
                            shpShape.LinkFormat.Update 
                    End If 
            Next shpShape 
    End Sub

如果两者都没有帮助,请提供更多信息,例如示例文件或您当前的代码