質問: 【excel-vba】アクティブセルが参照しているブックを開くには? いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:a1に =[book2.xls]sheet1!$a$3 が入力されている) そこで、そのセルが参照しているブックをvbaで自動的に開く方法を考えています。 つまり、例で言えば、book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。
回答: こんばんは。 >対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 通常、リンクしているセルが正しい値にならない場合は、 メニュー-編集-リンクの編集 ---値の更新 をすればよいと思います。よほど、数が多くなければ、以下のようなマクロは必要ないと思います。 sub linkupdatemacro() dim ar as variant dim v as variant ar = activeworkbook.linksources(xlexcellinks) if not isempty(ar) then for each v in ar activeworkbook.updatelink v, xlexcellinks next v end if end sub ひとつのブックを開くなら、 メニュー-編集-リンクの編集 ---リンク元を開く で開ければよいと思うのです。リンクしているブックのひとつを、マクロという手段で開けなくてはならないのか、理由が良く分かりません。かなり、複雑なのでしょうか? たとえば、ダブルクリックして、開くというなら以下のようなコードになります。つまり、ハイパーリンクと同じ役割をしています。 'シートモジュール private sub worksheet_beforedoubleclick(byval target as range, cancel as boolean) dim i as integer dim j as integer dim n as integer dim k as string cancel = true if target.hasformula = false then exit sub k = target.formula i = instr(k, "[") j = instr(i, k, "]") n = instr(k, "\") application.screenupdating = false if i > 0 and j > 0 and n > 0 then k = mid$(k, 3, j - 3) k = replace(k, "[", "") on error resume next workbooks.open k on error goto 0 end if application.screenupdating = true k = target.formular1c1 if i > 0 and j > 0 then application.goto k end if end sub