web-dev-qa-db-ja.com

MS Word2010でプログラムによる画像へのリンクを解除

リンクされた画像を含むWord文書があります。それらをWord文書に埋め込みたいのですが、手動で埋め込みたくありません。

手動で移動:[ファイル]-> [ファイルへのリンクを編集]-> [リンクを解除]を選択して押すと、まさに私がやりたいことが実行されます。

フィールドへのリンクを解除するためのVBAコードをいくつか見つけましたが、それは私の写真へのリンクを解除するのに役立ちません。これが私が試したコードです:

For Each objField In ActiveDocument.Fields
  If Not objField.LinkFormat Is Nothing Then
    objField.LinkFormat.Update
    objField.LinkFormat.BreakLink
    ActiveDocument.UndoClear
  End If
Next

ヒットしたとき AltF9 私のドキュメントでは、フィールドを表示するために私の写真には何も起こりませんが、他のフィールド(リンクなど)は展開/表示されます。したがって、これらの画像リンクは「フィールド」以外のものであると思います。

VBAでこれらの画像リンクを解除するにはどうすればよいですか?

メモの編集 Word文書は基本的にhtmlファイルです。これは、Wordで.htmlファイルを開くことで得られるものです。

3
exalt

Word文書は実際にはWordで開かれたhtml文書であったため、フィールドを識別するためのWord固有のマークアップは含まれていませんでした。その結果、GUI機能は機能しましたが、質問で詳しく説明されているvbaソリューションは機能しませんでした。解決策は、最初にWord文書を新しい名前で保存し(したがって、Wordマークアップを生成し)、次にbreakLinksマクロを実行することでした。

ドキュメントを保存するためのマクロ:

Sub saveAsDoc()
    Dim newName As String
    newName = ActiveDocument.Path & "\" & "fix_" & ActiveDocument.Name
    ActiveDocument.SaveAs2 FileName:=newName, FileFormat:=wdFormatDocument
End Sub

リンクを解除するためのマクロ:

Sub breakLinks()
For Each objField In ActiveDocument.Fields
  If Not objField.LinkFormat Is Nothing Then
    objField.LinkFormat.Update
    objField.LinkFormat.BreakLink
    ActiveDocument.UndoClear
  End If
Next
End Sub

外部スクリプトから実行する必要があるメインマクロ。 displayAlertsは、ポップがないことを確認するためのものです。

Sub theTrick()
    Application.DisplayAlerts = False
    Call saveAsDoc
    Call breakLinks
    ActiveDocument.save
    Application.DisplayAlerts = True
End Sub
1
exalt