重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Workbook_Open()でファイルを開いた際に
ある様々なファイル名が書かれたテキストを読み込み、
そのテキストファイルと同じ名前があったら、マクロを起動する。

というのを試しているのですが、
Workbook_Open()の時点で
ActiveWorkbook.Nameや
ThisWorkbook.Nameを指定してもアドインのファイル名しか取得できません。

どうにか開いたファイル名を取得する方法はないでしょうか?

A 回答 (3件)

まず最初にこの回答は、end-uさんの回答の丸写しです。



thisworkbookのモジュールで実行します。

Private WithEvents xlApp As Application

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Set xlApp = Nothing
End Sub

Private Sub Workbook_Open()
  Set xlApp = Application
End Sub

Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
''ファイルから新規作成を選んだとき実行
  MsgBox "NewWorkbook=" & " " & Wb.Name
End Sub

Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
''他のブックを開いたとき実行
  MsgBox "OpenBookName=" & " " & Wb.Name
End Sub
    • good
    • 2

>ファイルを開いた際にWorkbook_Open()で


このイベントは、自分のファイルが開かれたときにマクロを実行します。
ほかのファイルが開かれたときにマクロを実行する機能ではありません。

>エクセルの仕様的に無理なんでしょうか……。
エクスプローラや、エクセルの「開く」からブックを開いた時にマクロを実行する方法は、私には分かりません。
ただ、Excelの起動と同時にブックを開き、そのブックにあるマクロから開いたファイル名を取得することはできます。

この回答への補足

なるほど…
強制的にマクロを実行する事は可能なので、
それに条件付けして起動するか否かだけだと思ったのですが、
本来の使い方ではないので、やはり難しそうですね。

ありがとうございます。

補足日時:2011/03/07 02:19
    • good
    • 0

こんばんは



Workbook_Open()の時点では、自分のブックがActiveWorkbookになっています。
ここで、ActiveWorkbook.Nameを使っても自分自身のブック名しか取得できません。
(ThisWorkbook.Nameはマクロがおいてあるブック名を取得するので、常に自分自身のブック名しか取得できません。)

Workbooks.Openを使ってブックを開いた直後ならばこの命令で開いたブックがActiveWorkbookになっていますのでActiveWorkbook.Nameでブック名を取得できます。

また、補足要求です
>ある様々なファイル名が書かれたテキストを読み込み、
>そのテキストファイルと同じ名前があったら、マクロを起動する。
「同じ名前があったら」というのはどこにあった場合でしょうか?「すでに開いている」と「あるフォルダの中にある」とで処理が違います。

具体的状況が分からないので、外しているかもしれませんが、以下はすでに開いているブック名を順次表示するマクロです。
sumple()
 dim i as long
 
 for i = 1 to workbooks.count
  msgbox workbooks(i).name
 next i
end

この回答への補足

ご回答ありがとうございます。

ちょっと言葉が足りませんでした。

ExcelVBAのアドインで
ファイルを開いた際にWorkbook_Open()で
様々なファイル名が書かれたtxtファイルを読み込み、
開いたファイル名が、そのテキストファイルにあったら、マクロを起動する。
というのを試しています。

要はファイルを開いた際に、マクロも自動で起動しますよ~という
のをやりたいわけなんですが、
エクセルの仕様的に無理なんでしょうか……。

補足日時:2011/03/07 01:29
    • good
    • 0

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