次の方法で共有

VBA、意図しないタイミングでFORMのActivateイベントが起きる

Anonymous
2017-04-19T07:41:04+00:00

次のようなVBAを実行すると、

FORMのActivateイベントが起きるようです。

コード記述の問題なのか、VBAの仕様の問題なのかを知りたく、投稿(質問します)

1.フォームを用意してコンポーネントを配置

UserFormを2つ(UserForm1、UserForm2)用意します。

UserForm1にListBoxを1つ、CommandButtonを2つ配置し

UserForm2にCommandButtonを1つ配置します。

2.次のようなコードを書き込みます。

ThisWorkbookに以下を。

'----------------

Private Sub Workbook_Open()

  Application.WindowState = xlMinimized

  UserForm1.Show

End Sub

'----------------

UserForm1に以下を。

'----------------

private Sub CommandButton1_Click()

  UserForm1.ListBox1.AddItem "エントリー1"

End Sub

'--

Private Sub CommandButton2_Click()

  UserForm2.Show

End Sub

'--

Private Sub UserForm_Activate()

  MsgBox ("Activateイベントが起きたよ")

 End Sub

'----------------

UserForm2に以下を。

'----------------

Private Sub CommandButton1_Click()

  Me.Hide

End Sub

'----------------

・このマクロブックを開く

・課題イベントが起きる。(つまり、  MsgBox ("Activateイベントが起きたよ") が実行される)

 むろん、これは、期待した動作です。

・UserForm1の CommandButton1をクリック

・UserForm1の CommandButton2をクリック

・これにより開くUserForm2をUserForm2の CommandButton1をクリックして閉じる

・UserForm1のListBox1の"エントリー1"をクリック ※

 (つまり、FocusをListBox1の"エントリー1"に当てる)

・Windowsのスタートボタンからメモ帳を開き

・メモ帳を閉じる

・この直後、課題イベントが起きる。

 (つまり、  MsgBox ("Activateイベントが起きたよ") が実行される)

 これが疑問視している動作です。

一方、上記※を行わなければ、疑問視している動作は起きません。

また、私が確認する限り、Office2013でもOffice2016でも同じ動作が起きます。

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

2 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-04-20T11:24:51+00:00

    ありがとうございます。

    助言に従い、[VBA フォーラム] に引っ越します。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2017-04-20T06:15:25+00:00

    ​n.hojo さん、こんにちは。

    マイクロソフト コミュニティをご利用いただき、ありがとうございます。

    Excel 2013、2016 両方で書き込んでいただいた VBA を実行すると、意図しないタイミングでイベントが起こるのですね。

    調べたのですが、この動作についてご案内できそうな情報が見つかりませんでした...。

    また、この内容については専用のカテゴリがある [VBA フォーラム] にも質問を投稿して情報を集められてはいかがでしょうか。

    よろしければご活用くださいね。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません