Word (VBA)

Word VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Word 2010)
リンク元のファイル名変更
投稿日時: 21/05/29 15:38:46
投稿者: wtnb

マクロの記録では、記録されないので、
リンク元のファイル名変更を実行するマクロコマンド
を教えていただきたく、お願いいたします。
 
wordのメニューでは、
「ファイル」−「情報」−「ファイルへのリンクの編集」です。
 
 

回答
投稿日時: 21/05/29 21:11:44
投稿者: simple

>「ファイル」−「情報」−「ファイルへのリンクの編集」です。
そういう機能は無いと思います。
"ハイパーリンクの基点"ならありますけど。
もしそれなら、
ActiveDocument.BuiltInDocumentProperties.Item("Hyperlink base") = "D:\xxxxx"
です。文字列はむろん仮です。

投稿日時: 21/05/30 06:12:22
投稿者: wtnb

回答ありがとうございます。
 
説明不足の点がありました。
 
Excelファイルのセルの値をWord文書内にリンク貼り付けしたときの
リンク元ファイル名の変更をしたいと考えています。
 
現在、文書内に組み込んでいるプロセスは、下記です。
https://www.moug.net/tech/woopr/0130028.html
 
(例)
(1)同階層(フォルダ名;A)に保存しているWordファイルとExcelファイルをフォルダ名;Bにコピー(コピーは、手作業)
 
(2)フォルダBにコピーしたwordファイルを開くときにフォルダ名を取得し、リンク元ファイル名を変更したいと考えています。
 
 
 

回答
投稿日時: 21/05/30 07:39:23
投稿者: んなっと

リンク元のブックのパスの中の\Book1を\Book2に変更して自動に変更する例。
最初の質問に対する回答です。2番目で追加された内容は無視します。自分で考えてください。
 
Sub test()
  Dim Fld As Field
  Dim s As String
  For Each Fld In ActiveDocument.Fields
    With Fld
      If .Type = wdFieldLink Then '56
        s = .LinkFormat.SourceFullName
        If InStr(1, s, "\Book1") Then
          .LinkFormat.SourceFullName = Replace(s, "\Book1", "\Book2")
          .Update
          .LinkFormat.AutoUpdate = True
          DoEvents
        End If
      End If
    End With
  Next
End Sub

回答
投稿日時: 21/05/30 11:11:22
投稿者: simple

説明不足というより間違った説明でしょう?
>wordのメニューでは、
>「ファイル」−「情報」−「ファイルへのリンクの編集」です。
って結局何だったんですか。

回答
投稿日時: 21/05/30 11:53:20
投稿者: んなっと

simpleさん、こんにちは。質問文は間違っていません。
ただし、文書にリンクが含まれないと表示されないんです。
 
右下の「関連ドキュメント」の「ファイルの保存場所を開く」の下に
出現します。

回答
投稿日時: 21/05/30 12:12:33
投稿者: simple

んなっとさん、ありがとうございました。
一度保存しないとダメなんですね。
了解しました。
お騒がせ致しました。

投稿日時: 21/05/30 17:09:32
投稿者: wtnb

皆様、ありがとうございます。
リンク元のパスをWordファイルオープン時のパスに切り替えることができそうです。
 

Private Sub Document_Open()

  Dim Fld As Field
  Dim s As String
  Dim file_name As String
  
  file_name = "D:\Documents\sample0\sample.xlsm"  'リンク元のファイル
  
  Application.DisplayAlerts = False 
 
  For Each Fld In ActiveDocument.Fields
    With Fld
      If .Type = wdFieldLink Then
        s = .LinkFormat.SourceFullName
        If InStr(1, s, file_name) Then
          .LinkFormat.SourceFullName = Replace(s, file_name, ActiveDocument.Path & "\sample.xlsm")
          .Update
          .LinkFormat.AutoUpdate = True
          DoEvents
        End If
      End If
    End With
  Next

Application.DisplayAlerts = True  


End Sub