プロが教える店舗&オフィスのセキュリティ対策術

タイトルどおり、エクセルの起動と同時にマクロを実行させたいと下記のようにマクロを組みました。

ThisWorkBookに
Private Sub Workbook_Open()
〇〇
End Sub

標準モジュールに
Sub 〇〇()
 実行したい処理
End Sub

試しに実行すると問題なく動くのですが、実際にファイルから起動すると実行されません。何か問題があるのでしょうか?

質問者からの補足コメント

  • GooUserラック 様

    Call をつけても、実行される時とされない時があります。
    サーバにファイルを入れてるのも関係ありますか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/05/06 12:46
  • ローカルというのは、ローカルウィンドウでいいんですよね?

    開くことはできるんですが、ステップインなどが使えない状態で、実行できないです(> <)

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/05/06 14:08

A 回答 (3件)

こんばんは。



ThisWorkBookに
>Private Sub Workbook_Open()
>〇〇
>End Sub

標準モジュールに
>Sub 〇〇()  '名称が一意であることが条件
> 実行したい処理
>End Sub

別にCall を入れようが入れまいが、呼び出される側が、同名のプロシージャ等がなければ、問題はありません。Call をつけるというのは、もともと、参照渡しの時のミスをなくすための目的なのです。

実際の実行する側の標準モジュールあるプロシージャが、ActiveSheet や 暗黙的にシートを特定しないものなどは、内容によっては失敗することもあります。

ただ、よほどのことがない限りは、ThisWorkBook_Open()で標準モジュールのプロシージャを呼び出しなどはしません。例えば、インスタンスを新たに設けるとかいう場合です。

だから、ThisWorkBook_Open()を使わないで、標準モジュール側だけで、Auto_Open を使ってしまうことが多いのです。そうすれば、一覧で見れます。

>開くことはできるんですが、ステップインなどが使えない状態で、実行できないです(> <)

ThisWorkBook_Open() は、デバッグモードが利くはずです。
最初から、F8 でステップモードにすればよいので、起動時だけではありません。
    • good
    • 0

補足コメントについて



時々実行されるというのは少し変だけど、ローカルにコピーしてテストしてみてどうなりますか?
この回答への補足あり
    • good
    • 0

念の為ですが


---------------------------------------
Private Sub Workbook_Open()
〇〇
End Sub
---------------------------------------
はもちろん
---------------------------------------
Private Sub Workbook_Open()
Call 〇〇
End Sub
---------------------------------------
ですよね
この回答への補足あり
    • good
    • 0

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