Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Excel 2016)
ステップイン(F8) 暴走
投稿日時: 19/05/15 08:55:29
投稿者: onoramen

VBAをデバッグ中にステップイン(F8キーを押下)を実行していると1行ずつの実行にならず、途中から最後まで実行されてしまう現象に困ってます。
パソコンを他のものに変えてみたり、Windows7など他のOSでも同じような現象が現れます。
ネットでも色々と調べていますが、「ブレイクポイントを入れてみれば」程度のものしか見当たらず、毎回ブレイクポイント対応も煩わしく、本来の解決方法が見つかりません。
このトラブルの回避策がおわかりになる方がいらっしゃいましたらご教示願います。

回答
投稿日時: 19/05/15 11:48:21
投稿者: 半平太

>途中から最後まで実行されてしまう現象に困ってます。
 
ちょっと考えにくいですね。
 
「最後まで」実行されたか、何を以て確認されましたか?
 
念のため、終了直前、つまりEXIT SUBの直前に
 
 MsgBox "ここまで一気に来た"
 
と書いて、そのメッセージが本当に出るか確認して頂けませんか?

投稿日時: 19/05/15 12:35:52
投稿者: onoramen

半平太さま
 
早速の返信ありがとうございます。
 
VBAデバッグ中にF8のキーで1行ずつ実行しますよね。
その際に、実行直前の行が黄色く塗りつぶされますが、途中からその塗りつぶしが
行単位にストップせずに最後まで実行されてしまします。
 
ご指摘の通り、途中途中にエラーメッセージ出すようにMsgBox “不一致データ有り”
などの行も挿入してますし、そのメッセージも確認できてます。
 
因みに、Yahoo知恵袋でも類似の質問が有りましたが、これもブレークポイント対応と
なっており、原因究明、問題解決には至っておりません。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11183884141?__ysp=ZXhjZWwgdmJhIOOCueODhuODg%2BODl%2BOCpOODsyDmraLjgb7jgonjgarjgYQ%3D

回答
投稿日時: 19/05/15 13:00:38
投稿者: 半平太

>ご指摘の通り、途中途中にエラーメッセージ出すようにMsgBox “不一致データ有り”
>などの行も挿入してますし、そのメッセージも確認できてます。
 
そうでしたか、大変失礼いたしました。
 
何十年もVBAをやっている人が、質問していると言うことは難問ですね。
 
私はその経験がないのでお役にたてませんが、使用環境に関わりなく起きるということは、
当該ブックに内包する欠陥である可能性もありそうな気がします。
 
ファイルのフルコピーでなく、データとVBAだけを新規ブックにコピーする形でも
同じトラブルが再現するのかどうか興味あるところです。

回答
投稿日時: 19/05/15 13:13:27
投稿者: はぶ

失礼します。
 
> パソコンを他のものに変えてみたり、Windows7など他のOSでも同じような現象が現れます。
 
マウスを使って「ステップ イン」メニューを選択した時、一行進むでしょうか?
もしそうなら、「F8」キー または、キーボード不良ではないでしょうか?
 
これぐらいしか、見当がつきませんが、他のパソコンでも同じ現象らしいので
関係ないかもしれませんね。

投稿日時: 19/05/15 16:35:42
投稿者: onoramen

半平太様、はぶ様
 
色々とアドバイスありがとうございます。
この現象は、3年ほど前に出現するようになり、この数ヶ月は頻繁に
起こるようになってきました。
 
Excel2003時代にVBAを作成したもの有り、データ、VBAをExcel2010
以降のものコピペして作り替えてみたりもしてますが、完璧にこの現象が
出なくなることはありませんでした。
 
また、F8を使用せず、メニューのステップインでも同じ現象です。
 
何らかの制御が掛かっているのか、または掛けるべき制御が掛かって
いないのか、その点が解明できないのが歯痒いんですよね。

回答
投稿日時: 19/05/15 18:26:10
投稿者: WinArrow
投稿者のウェブサイトに移動

一応、真面目に実行している最終コードは、どのようになっていますか?

回答
投稿日時: 19/05/15 21:05:46
投稿者: simple

私も経験がありますね。恥ずかしながら。(って恥でもないけど。)
ステップ実行中に、InputBoxだったかMsgBoxだったかを表示したあとに、
ステップ実行がクリアーされて最後まで終了してしまったのかな、
いずれにしても経験はありますよ。そんだけ。失礼しました。

投稿日時: 19/05/16 09:02:04
投稿者: onoramen

WinArrow様
 
急にF8の制御が効かなくなる場所は、一定しておらず、特定することができません。

回答
投稿日時: 19/05/16 12:41:54
投稿者: MMYS

キーボードのCtrlキーが故障している可能性は?
 
 

投稿日時: 19/05/16 13:30:05
投稿者: onoramen

MMYS様
 
冒頭の質問にも書きましたが、パソコンも複数台で検証してみましたが、
同じ現象が出てしまいます。
 
 

回答
投稿日時: 19/05/16 16:32:24
投稿者: 虎

自分はまだまだVBAを勉強中の身で、知識もそこまでなので、こういう仕様なんだなぁ。と思って片づけていたのですが、もしかしてこれもステップ実行の暴走にあたるのでしょうか?
下記のようなGetOpenFilenameで開くブックを選択し、Workbooks.Openで開いて、処理をして、完了メッセージを表示するという処理をよくするのですが、ステップ実行していくと、
 
fname = Application.GetOpenFilename()が黄色くなる

F8を押す

ダイアログが表示される

開くブックを選択し、ダイアログの開くボタンを押す

ダイアログが消えて、Set ws = Workbooks.Open(Filename:=fname).Sheets(1)が黄色くなる
 
となると思っていたのですが、実際はダイアログの開くボタンを押してダイアログが消えた後、最後まで処理が走ってしまいます。
必ずこの事象が起こる!というわけでもないですが、かなりの確率で起こるので、自分はおまじない的な感じでGetOpenFilenameの後にはStopを入れるようにしているのですが(^^;
もともとこういう仕様なんでしょうか?
 
Option Explicit
 
Sub test()
 
    Dim fname As String, ws As Worksheet
     
    fname = Application.GetOpenFilename()
    Set ws = Workbooks.Open(Filename:=fname).Sheets(1)
     
    ws.Range("A1").Value = "test"
     
    MsgBox "end"
 
End Sub

投稿日時: 19/05/16 17:19:24
投稿者: onoramen

虎様
 
GetOpenFilenameの後、暴走するのは他の事例でもあるようです。
以下をご参照下さい。
https://oshiete.goo.ne.jp/qa/4018442.html
 
stopやブレイクポイントも取りあえずの策として使用できますが、
要するに、なにが原因で、どうすれば回避できるのかを解明したいですね。

回答
投稿日時: 19/05/16 17:24:35
投稿者: mattuwan44

データ、VBAをExcel2010 
以降のものコピペして作り替えてみたりもしてますが、完璧にこの現象が 
出なくなることはありませんでした。 

要するに、なにが原因で、どうすれば回避できるのかを解明したいですね。

 
コードを提示してみんなに動作確認をしてみたら、
なにか解るんじゃないでしょうか?

回答
投稿日時: 19/05/16 20:49:18
投稿者: baoo

私も同じ現象を経験しています。
少し前までAccessVBAを仕事で触っていた間によく起こっていました。
ですのでExcelVBAではあまり経験していません。
それからこの現象は最近起こるようになったか、最近になって頻発するようになった印象です。
(あいまいで自信はありません。)
 
それから関係あるかどうか分かりませんが、最初から1行ずつステップ実行していると
途中でステップ実行できない処理だというメッセージが表示されたことがあり、
それが関係しているのかと思ったことがあります。
残念ながらその時の正確なメッセージは覚えていません。

回答
投稿日時: 19/05/16 22:34:21
投稿者: simple

虎さんの暴走事例のコードを拝見しました。
私が経験したのもその例だったかもしれないなと思いました。
これはコードの問題ということではなく、むしろ製品側の問題ではないかという気がします。
ただ、頻発するとなると、それはそれで何か別の要因があるのかもしれませんね。

引用:
以下をご参照下さい。
https://oshiete.goo.ne.jp/qa/4018442.html
↑には、自動修復をしてみてはどうかという処方箋も提示されています。
トライしてみてはいかがでしょうか。
 
引用:
stopやブレイクポイントも取りあえずの策として使用できますが、
要するに、なにが原因で、どうすれば回避できるのかを解明したいですね。
製品の内部の問題であり、ユーザー側が調査するのは困難、というのが私の感覚です。

回答
投稿日時: 19/05/16 23:21:31
投稿者: 虎

onoramenさん、simpleさん、ありがとうございますm(__)m
 
自分の事例は予めトリガーがわかっていたので、ものすごく困るというわけでもなくそのままにしていましたが、直るにこしたことはないので、明日にでも試してみたいと思います(^^)(会社のPCなので…)

回答
投稿日時: 19/05/16 23:38:41
投稿者: simple

>トライしてみてはいかがでしょうか。
これは質問者さんに宛てたものでした。
自動修復はそれなりにリスクがあるかもしれませんので、
君子危うきに近寄らずかもしれません。

回答
投稿日時: 19/05/17 21:36:50
投稿者: wagtail
投稿日時: 19/05/18 09:19:46
投稿者: onoramen

wagtail様
 
情報ありがとうございました。
ブログの内容も一通り読ませていただきました。
 
以前にも書きましたが、
「要するに、なにが原因で、どうすれば回避できるのかを解明したいですね。」が
判ったような気がします。
 
対処法のレジストリ変更の詳細も読ませて頂きましたが、自己責任でトライことは
私のノウハウレベルではチョッと躊躇しますね。
 
この分野に詳しい友人に相談してどのように対処するか考えたいと思います。
 
VBAが大きくなればなるほど、このデバッグ作業は必要になりますし、ステップ
インの機能は、非常に重宝します。
従って、この類いのトラブルは、Microsoft社で改善を望みたいところですね。
 
色々とありがとうございました。