次の方法で共有


EXCEL、VBEにてマクロの実行(F5)、ステップイン(F8)が出来ない

質問

2020年2月9日日曜日 13:36

EXCELのVBEでF5やF8が使えなくなってしましました。

戻し方を教えて頂きたい。

通常であれば、VBEに記述したコードに対して、F5で実行、F8でステップイン出来るはずなのですが

システム通知音だけ鳴って、全く動作しなくなりました。

プログラム自体は動作し、Workbook_openやCommandButton1_Clickなどからのプログラムは正常に動作します。

困っているのはデバッグ時のみです。

今の状況としては

・F5 → システム通知音だけ鳴る

・F8 → システム通知音だけ鳴る

・ツールバーの三角ボタン「Sub/ユーザーフォームの実行(F5)」を押すと、マクロウィンドウが開く

・ブレイクポイントを設定して実行すると正常にステップイン状態でプログラムは止まり、その後はF8はプログラム終了まで正常に機能する

環境はWindows10、EXCEL2016です。

修復や再インストールなどは実施しましたが、変わりません。

よろしくお願いします。

すべての返信 (3)

2020年2月10日月曜日 1:30 | 1 票

以前はそのコードはデバッグでステップイン出来ていたのでしょうか?
もし出来ていないかったのであれば、クラスモジュールにそのコードを書かれていませんか?
検索しただけで私も詳しくないのですが、以下のようなことではないでしょうか?

How to step through VBA code in a class module
https://social.msdn.microsoft.com/Forums/office/en-US/6a5622fc-4fa6-4cdb-8d11-bd39816231b7/how-to-step-through-vba-code-in-a-class-module?forum=accessdev

クラスモジュールではなく普通のモジュールにコードを移すということです。

★良い回答には質問者は回答済みマークを、閲覧者は投票を!


2020年2月11日火曜日 3:30

ご返信ありがとうございます。

今までステップイン出来ていたコードですし、クラスでもありませんでした。

クラスモジュールの件は興味深いですね、ありがとうございます。

で、自己解決しました。

本日キーボードを新しい物を購入して交換してみたところ、ステップイン出来る様になりました。

ステップイン等が出来ない以外は何の不具合もありませんでしたし、ハードの問題とは気づきませんでした。

切り分けとしてキーボードの電源をOFFにして(ワイヤレスでしたので)症状変わらずでしたので、キーボードは問題から外してました。レシーバも外して再起動でもしてれば早期発見できたかも。

数か月悩んだ自分がバカみたいです。。。

という事で、お騒がせしました。


2020年2月16日日曜日 6:20

自己解決その2?

別のVBAを記述していて、ステップイン出来ない症状が再現しました。

で、わかったことがあります。

CommandButtonのMouseDownでコードを記述していたのですが、

MouseDownの場合、マウスの位置情報などの引数が取得出来なくてステップインが実行出来ないのではないか?

同じコードで、引数を必要としないClickとMouseDownを比較してみたところ

Clickはステップイン出来て、MouseDownはステップイン出来ないという状況を確認できました。

というわけで**「引数の見落とし」**が一番の原因ではないかと思います。

なんとも初歩的な見落としですね。。。

↓↓検;で使用したコードサンプル

Private Sub CommandButton3_Click()
'ステップイン可
    Dim i As Long
    Dim row_max As Long
    row_max = Cells(Rows.Count, 21).End(xlUp).Row
    
    For i = 2 To row_max
        If Cells(i, 20).Value = 1 Then
            Cells(7, 13).Value = Cells(i, 21).Value
            ActiveSheet.PrintOut
        End If
    Next

End Sub

Private Sub CommandButton3_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'ステップイン不可
    Dim i As Long
    Dim row_max As Long
    row_max = Cells(Rows.Count, 21).End(xlUp).Row
    
    For i = 2 To row_max
        If Cells(i, 20).Value = 1 Then
            Cells(7, 13).Value = Cells(i, 21).Value
            ActiveSheet.PrintOut
        End If
    Next
    
End Sub