0

マクロを使用して、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
4

1 に答える 1

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

どちらも役に立たない場合は、サンプル ファイルや現在のコードなど、さらに情報を提供してください

于 2016-05-15T18:50:25.077 に答える