- 締切済み
ExcelVBAでワークブックを開いた時の処理
Workbook_Open()でファイルを開いた際に ある様々なファイル名が書かれたテキストを読み込み、 そのテキストファイルと同じ名前があったら、マクロを起動する。 というのを試しているのですが、 Workbook_Open()の時点で ActiveWorkbook.Nameや ThisWorkbook.Nameを指定してもアドインのファイル名しか取得できません。 どうにか開いたファイル名を取得する方法はないでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- ki-aaa
- ベストアンサー率49% (105/213)
まず最初にこの回答は、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
- rukuku
- ベストアンサー率42% (401/933)
>ファイルを開いた際にWorkbook_Open()で このイベントは、自分のファイルが開かれたときにマクロを実行します。 ほかのファイルが開かれたときにマクロを実行する機能ではありません。 >エクセルの仕様的に無理なんでしょうか……。 エクスプローラや、エクセルの「開く」からブックを開いた時にマクロを実行する方法は、私には分かりません。 ただ、Excelの起動と同時にブックを開き、そのブックにあるマクロから開いたファイル名を取得することはできます。
- rukuku
- ベストアンサー率42% (401/933)
こんばんは 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ファイルを読み込み、 開いたファイル名が、そのテキストファイルにあったら、マクロを起動する。 というのを試しています。 要はファイルを開いた際に、マクロも自動で起動しますよ~という のをやりたいわけなんですが、 エクセルの仕様的に無理なんでしょうか……。
補足
なるほど… 強制的にマクロを実行する事は可能なので、 それに条件付けして起動するか否かだけだと思ったのですが、 本来の使い方ではないので、やはり難しそうですね。 ありがとうございます。