- ベストアンサー
エクセル新規ファイルでマクロを自動実行する方法
- エクセル新規ファイルでマクロを自動実行する方法について説明します。
- personal.xlsでSub auto_open()とすることで、新規にエクセルを開いたときにマクロを実行することができます。
- ただし、ファイル名にABCが含まれる場合にのみマクロを実行するには、どのファイルを開いてもマクロが自動的に実行される方法が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
アプリケーションイベントを使うため、いつもより少し準備をします。 手順: 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 エクセルを再起動する。個人用マクロブックの変更を問われたら、当然はいと答える。 新規じゃなく既存のブックを開いて動作を確認する。
その他の回答 (2)
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。お邪魔します。 ちょっとしたこと、、、なのですが、 そういう目的だと、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 でスマートなご回答ありがとうございます。 動作も確認し、完璧でした。 ありがとうございました。 とても助かりました。
- mac1963
- ベストアンサー率27% (841/3023)
回答ではないけど 環境設定でマクロ無効にしてある場合は無理だけど そこは良いのかしら
お礼
さっそくのご回答ありがとうございました。 グループ内の統一された設定のもとのことですので、 ご心配はいりません。 ありがとうございました。
お礼
さっそくのご回答ありがとうございました。 完璧です。 イベントを使うということですね。 プログラムの細かい意味は別途こちらで調べますが、 動作は確認し、OKでした。 とても助かりました。 本当にありがとうございました。