dポイントプレゼントキャンペーン実施中!

新規にエクセルを開いたときだけマクロを自動実行するには、
personal.xlsで
Sub auto_open()
' Macro1 Macro
Range("A1").Value = "111"
End Sub
とすれば良いかと思いますが、
新規に開くどのファイルに対しても ファイル名ABC を含んでいる時だけ
マクロを自動的に実行するにはどうしたらよいでしょうか?
(ファイルを開いてから マクロボタンを押して マクロに”ファイル名を
チェックしてA1にデータを書き込む”があるのはだめです。)
(アドインでツールバーボタンを押すのもだめです。)
エクセルは2003 OSはXPです。
説明不足でしたらすみません。

A 回答 (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

エクセルを再起動する。個人用マクロブックの変更を問われたら、当然はいと答える。
新規じゃなく既存のブックを開いて動作を確認する。
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました。
完璧です。
イベントを使うということですね。
プログラムの細かい意味は別途こちらで調べますが、
動作は確認し、OKでした。
とても助かりました。
本当にありがとうございました。

お礼日時:2013/04/14 23:21

こんにちは。

お邪魔します。
ちょっとしたこと、、、なのですが、
そういう目的だと、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が
動かないようにしておいた方が良いと思います。

以上です。
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました。
これまた、very good でスマートなご回答ありがとうございます。
動作も確認し、完璧でした。
ありがとうございました。
とても助かりました。

お礼日時:2013/04/14 23:25

回答ではないけど


環境設定でマクロ無効にしてある場合は無理だけど
そこは良いのかしら
    • good
    • 0
この回答へのお礼

さっそくのご回答ありがとうございました。
グループ内の統一された設定のもとのことですので、
ご心配はいりません。
ありがとうございました。

お礼日時:2013/04/14 22:06

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