• ベストアンサー

Excel VBAでファイル オープン時のイベント

Excelファイルを開く際、イベントを発生したいのですが可能でしょうか? 通常だと、開くファイルにイベントを記述するとおもいますが、ExcelファイルAを 起動しておくと、ファイルB、ファイルCを開いた際に、ファイルB、ファイルCを 開いたイベントを取得したいのです。 イベントは、ファイルAに記述することになります。 Excel上にハイパーリンクで他のExcelファイルをリンクしています。 リンクを開くとハイパーリンクのあるファイルが下になってしまい、次のファイル が開きにくいため、開いたファイルのサイズ、位置を修正したいためです。 以上 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

他サイト様へ回答を丸投げだと申し訳ないのでサンプルを用意しました。 最下のVBAコードをAブックの「ThisWorkbook」に記述してください。 Aブックのには以下の二つのファイルがリンクされています。(画像参照) 「test1ブック」として「U:\test1.xlsx」 →以下Bブックとします 「test2ブック」として「U:\test2.xlsx」 →以下Cブックとします (リンクの存在するシート及びセルの位置はどこでも構いません) リンクがクリックされると (1)1つ目に開かれたリンクは「Select Case」により   「Case 2」で記述しているサイズ及び位置に設定されます。 (2)2つ目に開かれたリンクは「Select Case」により   「Case 3」で記述しているサイズ及び位置に設定されます。 注) 「Select Case」で開かれているワークブックの数「Workbooks.Count」を条件分岐としていますので A.xlsmが開かれている時点で「Workbooks.Count」の値は1になりますので、 BやCが開かれると「2」や「3」になります。 このあたりは適当に対応してください。 ■VBAコード Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) Dim tar_book As Workbook Set tar_book = Workbooks(Dir(Target.Address)) ActiveWindow.WindowState = xlNormal With tar_book.Windows(1)   '現在のブックの数をチェック   Select Case Workbooks.Count   Case 2     '1つめに開かれたブックの処理     .Width = 200     .Height = 100     .Left = 0     .Top = 0   Case 3     '2つめに開かれたブックの処理     .Width = 200     .Height = 100     .Left = 0     .Top = 100   End Select End With End Sub

tate1943
質問者

お礼

丁寧にソースなどを記載頂き、ありがとうございます。 無事解決できそうです。 ありがとうございました。

その他の回答 (2)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1です。 そもそも・・・・ Aブックのハイパーリンクでマクロを起動し、 http://www.excel-wing.com/study/jitumu/941 起動したマクロからB・Cブックを開いて http://officetanaka.net/excel/vba/file/file05.htm ウィンドウ位置を調整すればいいかと。 http://www.happy2-island.com/excelsmile/smile03/capter00307.shtml

tate1943
質問者

お礼

ありがとうございます。FollowHyperlinkでイベントとして取得できたのですね。 リンクをHyperlink関数を使っていたため、動作しないものと勘違いしていました。ハイパーリンク(関数でないほう)では使用できました。 ありがとうございます。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

BやらCのOpenイベントに自身のウィンドウ位置を調整するコードを入れればいいだけなきがしますが。 どうしても管轄をAブックで統括したいのであれば、 BやらCやらのブックのOpenイベントに Aのブックに記述したプロシージャを呼びに行くようにしてから Aブック内のプロシージャでBやらCのウィンドを操作すればよいのでは? 以下でA.xlsmを開いた状態でB.xlsmを開けば、A.xlsmのa_testが実行されます。 ■「A.xlsm」ブックの標準モジュールに記述 Sub a_test() MsgBox "aが実行されました" End Sub ■「B.xlsm」ブックのThisWorkbookに記述 Private Sub Workbook_Open() Application.Run "A.xlsm!a_test" End Sub

tate1943
質問者

お礼

BやCのファイルには、マクロを導入したくないため、Aブックにのみの記載でできないか検討していました。 アドバイスありがとうございます。

関連するQ&A

  • エクセル VBAについて

    初心者ですが、指導してください。 エクセルでVBA・マクロを使用して見積書を作っています。 AファイルとBファイルを順番に開いた状態で使用します。 Bファイルは見積書のテンプレートファイルになっています。 Bファイルで担当者が新しく見積書を作った場合、 ファイル保存というボタンで、指定のホルダ内に任意のファイル名で保存する事が可能になっています。 新しく保存したファイルをCファイルとします。 Cファイルを修正等する場合は、AファイルからCファイルを読み込みます。 Aファイルは、トップページ兼価格リスト表になっています。 ここで問題というか分からなくなっている部分は、 テンプレートファイルであるBファイルの時は、VBAの記述の際に、 Windows("B.xls").Activate と記載していますが、 任意のファイルであるCファイルの時は、 担当者によって、任意のファイル名で保存されているため ファイル名の取得?が必要になると思います。 その場合、どの様な記述をすればいいのでしょうか? なかなか上手に説明できませんが、よろしくお願いします。

  • EXCELでの他ファイルリンクについて

    AというEXCELファイルからBというEXCELファイルへの外部リンクを張る場合、通常は =[B.xls]Sheet1!$A$1 というように記述するかと思います。 このBやSheet1という部分を、動的に表現するには どのようにしたらよいでしょうか? (どこかのセルの値を参照し、その名前に該当する ファイルないしシートへのリンクとしたいです) できるかどうかわかりませんが、 イメージ的には =[($B$2).xls]($C$3)1!$I$1 のようにしたいのです。 説明がわかりにくくてすいませんが 宜しくご教授ください。

  • VBAでイベントを設定したいのですが…

    いつもお世話になっております。 早速ですが、VBAでイベントの処理を記述したいの ですが、イベント取得ができません。 どこでから取得すればいいのでしょうか? Excel2007を使用しています。 よろしくお願いします。

  • ファイルをドラッグした時にexcelを開く

    お世話になっています。 以下のことが実現したいのですが、まったく方法がわからず困っています。 1.サーバー上の特定のフォルダAに不特定のファイルB、C、D・・・・をドラッグする 2.ドラッグすると同時にA内にあるファイルX.xltmが開く 3.そこにB、C、D・・・のパスをハイパーリンクで順に書き込みたいのです。 (パスは\\サーバー名\A\Bとなり、Bの部分がC、D、と変わっていく感じです) やりたいことは、フォルダAにどんどん入れられていくファイルのリストを作成して、他の使用者がそこからハイパーリンクで必要なファイルを開く、ということです。 申し訳ありませんが、教えていただけると助かります。 宜しくお願いします。

  • エクセルの複数ファイルを連動して修正する方法は?

    こんにちわ。 さっそくですが質問させて頂きたいと思います。 エクセルで作成された名簿ファイルA,B,Cがあるとします。 A,B,Cのファイルに共通するのは「住所」です。 たとえば、AのファイルのNo.1の住所を修正したとき、 今はB,CのNo.1を手入力で住所を修正しています。 これを、Aを修正すると自動的にB,Cのファイルが更新されるようにすることは可能ですか? 私はエクセルは得意ではないんですけど、結構難しい作業でしょうか。 アクセスはそういうのが得意なソフトだと思うのですが、これをエクセルでやりたいのです。※エクセル2002です。 どうぞ宜しくお願い致します。

  • excel の ハイパーリンク のサブアドレス

    excel の ハイパーリンク のサブアドレス をメールで送る場合の記述について、教えてください。 社内の共有サーバーのとあるexcelファイルのハイパーリンクで送る場合、 file://C:\Users\new\Desktop\sample.XLS で送れることは、わかるのですが、これにサブアドレスを指定して、 たとえば、ワークシートのA1セルの場合、下のような記述で送ろうとするとうまくいきません。 file://C:\Users\new\Desktop\sample.XLS/Sheet3!A1 メールでサブアドレスを指定して、リンクを送る場合どういった記述をすればいいでしょうか? 当方、エクセルは2000です。

  • ハイパーリンクで開いたエクセルファイルの画面分割またはエクセル起動時にファイル指定で自動実行

    お世話になります。 イントラネットの内HPでエクセルファイルをハイパーリンクで開いて共有利用しています。大変便利なのですがブラウザー内だと画面の分割が出来ない?ようです。もし出来るようでしたら教えていただきたいのですが… それが無理ならパイパーリンクの記述にエクセル自身を記述し、実行時ファイルを指定して起動させたいのですが、記述方法がありますか?

  • ExcelのVBAについて。

    ExcelのVBAについて。 ハイパーリンクのイロハ? アクティブセルを入力して、それをリンク先にB10セルにハイパーリンクを作りたいのですが、textboxから迄しかできず、、自動的にできません。自動的に割り振り出来るようにするにはどうしたらよいでしょうか? 参考やヒントなどもよろしくお願いします。

  • Excelのハイパーリンク埋め込みを簡単に作業するには?

    Excelのハイパーリンク埋め込みを簡単に作業するには? お世話様です。EXCEL2003でつまづいて、投稿させていただきました。 セルA列に、記載されているフォルダパス、ファイル名へのハイパーリンクを、セルB列に埋め込みたいのですが、その作業が数百個あります。地道にリンクするのがひとつの選択ですが、できれば楽にしたいです。 セルA      |    セルB c:\file-1.txt |  c:\file-1.txtへのハイパーリンク c:\file-2.txt |  c:\file-2.txtへのハイパーリンク c:\file-3.txt |  c:\file-3.txtへのハイパーリンク     * c:\file-n.txt |  c:\file-n.txtへのハイパーリンク   これは、関数の類で実現できるものなのでしょうか。 それとも、VBAを紐解いて、「値の取得とハイパーリンクのメソッド、、」などをプログラミングする 術を学習すべきでしょうか。

  • EXCELでハイパーリンク先が変わってしまいます

    EXCELで別フォルダにあるファイルにハイパーリンクを貼っています。 CドライブのAフォルダにBとDというフォルダがあり、 BにEXCELファイル、Dにリンク先のファイルがあります。 社内ではわたしの席と別の人の席で正常動作を確認しているのですが、 取引先に送ったところリンク先が開かないと言われました。 現場で見たわけではないのでよくわかりませんが、 ハイパーリンクのセルにカーソルを合わせたときに出てくるリンク先が file:///C:\A\D\ファイル名 となるべきなのに file:///C:\D\ファイル名 となってしまっているようです。 クリックすると「指定されたファイルを開くことができません」というダイアログが出るとのこと。 相対パスでリンクされているはずなのですが、環境によってこのように変わってしまうことがあるのでしょうか? 解消方法がわかりましたら、是非教えてください。 よろしくお願いいたします(T-T)

専門家に質問してみよう