プロが教えるわが家の防犯対策術!

1.同一パソコンでリンク元エクセルとリンク先エクセルを同時に開き
  リンク元エクセルを修正するとリンク先エクセルは更新されます。

2.違うパソコンでリンク元エクセルを更新すると
  リンク先エクセルを開くと更新されるのですが
  開き直さなくても更新したいのですが
  どうしたら良いですか?
  データ→全て更新では上手く行きませんでした
3.最悪はマクロで自分自身を開き直す場合の内容も教えて下さい

宜しくお願いします

質問者からの補足コメント

  • どう思う?

    エクセルそのものはサーバーに入れてあるのでリンク切れではないです。
    リンク先のエクセルを閉じて開き直すと更新されるのですが
    マクロで開き直さなくても良い方法はないでしょうか

      補足日時:2019/10/05 14:10

A 回答 (2件)

1.そうだね。


2.別のPCに持って行ったら、リンク切れてるからね。そりゃ無理だ。
3.同じPC内に両方のBookを置くことだよ。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2019/10/05 14:11

排他的制御は確かにExcelは苦手ですね。


リンク先Bookにマクロを組んで実行するのは、可能ですが、そもそも開いて編集しているので、
その挙動で更新されないのであれば、VBAで閉じた時にもう一度自ら開いても他のブックから挙動は分からないのではないでしょうか
そう考えると、、難しいのではないでしょうか?

従って作業ブックのあるPCで参照先Bookのインスタンスを更新するしか何のでは、、と考え、、
なので、作業しているブックで何か結果を出す時に参照を更新する形にするしかないのかなと思います。
しかしながら、排他的制御、参照元が使われているとか、、問題がありますね。。
データ参照などのやり方の1つとしてBOOKリンクを設置しているなら、違う方法を考えた方が良いかと、思います。

取敢えず、VBAで更新するコードを記します。
リンク先アドレスが複数ある場合は、手を加えてください。
最低限のエラー処理(回避)のみです。必要に応じて追加してください。
NASの場合のファイルpathなのでリンクブックアドレスを適時書き換えてください。

startRefreshで実行します。
SetオブジェクトはEnd Subで解放されると認識しています。

Option Explicit
Sub startRefresh()
Dim Lbookpach As String
Lbookpach = "\\Nas名\Folder名\Test.xlsx" 'リンクブックアドレス 変更箇所
  'Lbookpach = ActiveSheet.Range("A1").Value 'セルから  IF やForでも、、
  Call Link_refresh(Lbookpach)
End Sub
Sub Link_refresh(Lbookpach As String)
Dim wb1 As Workbook, ReturnBook As Workbook
Dim FileName As String
Dim strCheck As String
  Set ReturnBook = ActiveWorkbook
  FileName = CreateObject("Scripting.FileSystemObject").GetFileName(Lbookpach)
  strCheck = Dir(Lbookpach)
  If (strCheck = FileName) Then
      Workbooks.Open FileName:=Lbookpach, UpdateLinks:=3
      Set wb1 = ActiveWorkbook
      Application.DisplayAlerts = False
      wb1.Close
      Application.DisplayAlerts = True
      ReturnBook.Activate
  Else
      MsgBox ("対象のファイルが見つかりませんでした。")
      Exit Sub
  End If
  MsgBox ("リンクを更新しました")
End Sub
    • good
    • 0
この回答へのお礼

長文ありがとうございました。
回答を参考にして試してみて
どうしても分からない時に再度、質問させて頂きます。
一応締め切らせて頂きます
回答有難うございました。

お礼日時:2019/10/08 15:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!