Excelマクロ(VBA)ハマった!まとめ

【解決】VBAで繰り返しExcelを開くと処理が落ちる問題

Excelマクロ(VBA)
P.Man
P.Man

初心者VBAプログラマーが陥りやすい罠を紹介していくコーナーだぜ!さぁ、Q.Man本日の悩みを言ってみろ!

Q.Man
Q.Man

稀にループ処理でExcelが異常終了してしまいます。Excelアプリケーション自体が停止するのでデバッグもできず、原因の特定ができません。発生頻度も100%ではないので、非常に困っています。

P.Man
P.Man

そりゃ困ったな!俺も同じような事でハマった事があるぜ!ループ処理の中で何回もExcelファイルを開いたり、閉じたりを繰り返してないかい?

Q.Man
Q.Man

あ!…やってます。え?ファイルのOpenとCloseが問題なんですか!?!?(泣)

P.Man
P.Man

んだ!

繰り返し処理の中で、ファイルのOpen/Closeを繰り返すと発生する事象です。この事象が発生すると、Excelアプリケーションごと強制終了(Excel応答なしの状態)し、VBE(マクロを作成する画面)でデバッグができません。

デバッグできないエラーをどうやって回避するのか…?ご安心ください、めっちゃ簡単に解決できます。「DoEvents」という魔法の言葉をファイルのOpen,Closeの直前に記述するだけです。

DoEventsの使い方

まずは、ファイルを開く処理の前に「DoEvents」。

Sub workbookOpen(filePath as String)
 
    'ここ!!
    DoEvents

    'ファイルを開く
    workbooks.Open(filePath)

End Sub

続いて、ファイルを閉じる前に「DoEvents」。

Sub workbookClose(wb as workbook)

   'ここ!!
   DoEvents

   'ファイルを閉じる
   wb.Close

end Sub
Q.Man
Q.Man

うほっ!!まじだ!まじで解決しましたよP先輩!

P.Man
P.Man

だろ?超簡単だろ?でも、知らないとずっと解決できないからな。俺が先輩でよかったな!ガハハハw

なぜ、DoEventsで解決したのか

問題が解決できたら、その理由をしっかりと理解していきましょう。ここで詳細学習をすることで、パソコンにも更に詳しくなり、プログラマ(エンジニア)としてレベルアップします。

DoEventsで何をやっているのか?

Microsoftのリファレンスには次のように表記されていいます。

オペレーティング システムが他のイベントを処理できるように、実行を渡します。

DoEvents関数
Q.Man
Q.Man

ん?なんのこっちゃですわw

P.Man
P.Man

だよな。俺も最初はマジで意味不明だった。これからプログラムを極めていきたいなら、避けては通れない道だぜ!

この「OS(オペレーティングシステム)の他のイベント」に該当するのが「ファイルのOpen/Close」処理になります。つまり、DoEventsを実行することで、OSにファイルOpen,Closeができるように制御を渡している。という事になるんですね。

OSとアプリケーションの関係について、知識が不足している場合、Q.Manさんの様に、解説内容が難しく感じてしまうかもしれません。OSとアプリケーションの関係については、エンジニアの基礎中の基礎になります。ぜひこの機会に学習頂くことをオススメします。

まとめ:とりあえずDoEnvetsを書く

P.Man
P.Man

まぁ、ちょっと小難しい説明もしたが、理解する必要はない!ファイルのOpen/Closeの前には必ず「DoEvetns」を書いておくクセを付けておけ!

Q.Man
Q.Man

はい!肝に銘じておきます!パイセン!

筆者的にも、小難しい理屈を覚えるよりも「DoEvetns」をOpen,Closeの前に必ず書く習慣を付けて貰うだけで良いと思います。ただし、今後もプログラミングスキルの向上させたいと考えている方は、必ず「OS、ソフトウェア、ミドルウェア、メモリ」の関係性を学んでおきましょう。

これらの基礎知識は、「ITパスポート」と呼ばれる国家資格取得を目指すのがオススメです。国家資格と聞くと、ハードル高そうに思えますが、日本のICT関連資格の中で最も低難度のものになっています。高校生でも合格する様な試験ですので、サラリーマンの我々は余裕でしょう!

ITパスポート試験の参考書を読むだけでもプログラマに必要な素養は学べます。「国家資格は要らないな〜」と思っていたとしても、一読する価値はありますよ!

▼オススメ教材▼

令和03年 イメージ&クレバー方式でよくわかる 栢木先生のITパスポート教室 (情報処理技術者試験)

コメント

タイトルとURLをコピーしました