![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
新規にエクセルを開いたときだけマクロを自動実行するには、
personal.xlsで
Sub auto_open()
' Macro1 Macro
Range("A1").Value = "111"
End Sub
とすれば良いかと思いますが、
新規に開くどのファイルに対しても ファイル名ABC を含んでいる時だけ
マクロを自動的に実行するにはどうしたらよいでしょうか?
(ファイルを開いてから マクロボタンを押して マクロに”ファイル名を
チェックしてA1にデータを書き込む”があるのはだめです。)
(アドインでツールバーボタンを押すのもだめです。)
エクセルは2003 OSはXPです。
説明不足でしたらすみません。
No.2ベストアンサー
- 回答日時:
アプリケーションイベントを使うため、いつもより少し準備をします。
手順:
VBE画面でPersonal.xlsに挿入メニューから「クラスモジュール」を追加する
クラスモジュールに下記をコピー貼り付ける
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
If InStr(Wb.Name, "abc") > 0 Then
Wb.Worksheets(1).Range("A1") = 111
End If
End Sub
Personal.xlsのThisWorkbookに下記をコピー貼り付ける
Dim x As New Class1
Private Sub Workbook_Open()
Set x.App = Application
End Sub
エクセルを再起動する。個人用マクロブックの変更を問われたら、当然はいと答える。
新規じゃなく既存のブックを開いて動作を確認する。
さっそくのご回答ありがとうございました。
完璧です。
イベントを使うということですね。
プログラムの細かい意味は別途こちらで調べますが、
動作は確認し、OKでした。
とても助かりました。
本当にありがとうございました。
No.3
- 回答日時:
こんにちは。
お邪魔します。ちょっとしたこと、、、なのですが、
そういう目的だと、ThisWorkbook モジュールに集約して
すべてPrivateスコープに統一するのがVBAらしくて
いいかなぁ、と、思います。
好みだとは思いますし、実践例も恐らく半々程度に分かれる
と思いますが、Class モジュールの扱いも知った上で
ThisWorkbook モジュールでの実装、不足が出たならClass モジュール
というのが、私も実践している私のお奨めです。
メンテが容易というのが唯一のメリットですが、
デメリットはないと私は思います。
' ' =========PERSONAL.XLS===========
' ' ====ThisWorkbook モジュール====
Option Explicit
Private WithEvents xlApp As Application
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
Private Sub xlApp_WorkbookOpen(ByVal Wb As Workbook)
If InStr(1, Wb.Name, "abc", vbTextCompare) > 0 Then
Wb.Sheets(1).Range("A1") = 111
End If
End Sub
' ' ==============================
因みに、こういう場合はauto_openは使わない方が
簡単ですので、標準モジュールの方でauto_openが
動かないようにしておいた方が良いと思います。
以上です。
さっそくのご回答ありがとうございました。
これまた、very good でスマートなご回答ありがとうございます。
動作も確認し、完璧でした。
ありがとうございました。
とても助かりました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.OnKey:項目入力中...
-
PC2-3200(DDR2 SDRAM)搭載機にP...
-
VBA This Workbookモジュール...
-
【Excel VBA】標準モジュールに...
-
NEC ノートPC型番LL550/LGの...
-
Excel VBAで、ユーザーフォーム...
-
本当にPublicな変数(配列で)
-
VBAで別モジュールへの変数の受...
-
【vba】フォームに書いてあ...
-
どのファイルを開いた時もマク...
-
アクセスで自作関数
-
モジュールからフォームのボタ...
-
モジュールの最大数はいくつな...
-
Excel VBA マクロの実行方法に...
-
ベースモジュールって?
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 定義されたプロージ...
-
VBAを使用してWordからExcelの...
-
EXECEL VBA コマンドボタンか...
-
ArduinoのジャイロモジュールMP...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBAでリンク切れをチェッ...
-
ユーザー定義関数に#NAME?が返...
-
グラフのX,Y座標を取得したい
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
'Range'メソッドは失敗しました
-
VBでグローバル変数を宣言するには
-
モジュールの最大数はいくつな...
-
VBAで旧字体を異字体に一括で変...
-
モジュールとは何ですか
-
Excel VBAで、ユーザーフォーム...
-
【vba】フォームに書いてあ...
-
VBA This Workbookモジュール...
-
Form間の値の渡し方
-
標準モジュールを削除したい。(...
-
Excel VBA 定義されたプロージ...
-
Access VBA標準モジュールにつ...
-
Excel VBA 標準モジュール内で...
-
本当にPublicな変数(配列で)
おすすめ情報