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

  • 質問

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

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

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

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

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

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

    今の状況としては

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

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

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

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

    環境はWindows10、EXCEL2016です。

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

    よろしくお願いします。

    2020年2月9日 13:36

すべての返信

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

    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月10日 1:30
    モデレータ
  • ご返信ありがとうございます。

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

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

    で、自己解決しました。

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

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

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

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

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

    2020年2月11日 3:30
  • 自己解決その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
    


    • 編集済み sin1nk 2020年2月16日 6:21
    2020年2月16日 6:20