初心者VBAプログラマーが陥りやすい罠を紹介していくコーナーだぜ!さぁ、Q.Man本日の悩みを言ってみろ!
稀にループ処理でExcelが異常終了してしまいます。Excelアプリケーション自体が停止するのでデバッグもできず、原因の特定ができません。発生頻度も100%ではないので、非常に困っています。
そりゃ困ったな!俺も同じような事でハマった事があるぜ!ループ処理の中で何回もExcelファイルを開いたり、閉じたりを繰り返してないかい?
あ!…やってます。え?ファイルのOpenとCloseが問題なんですか!?!?(泣)
んだ!
繰り返し処理の中で、ファイルの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
うほっ!!まじだ!まじで解決しましたよP先輩!
だろ?超簡単だろ?でも、知らないとずっと解決できないからな。俺が先輩でよかったな!ガハハハw
なぜ、DoEventsで解決したのか
問題が解決できたら、その理由をしっかりと理解していきましょう。ここで詳細学習をすることで、パソコンにも更に詳しくなり、プログラマ(エンジニア)としてレベルアップします。
DoEventsで何をやっているのか?
Microsoftのリファレンスには次のように表記されていいます。
オペレーティング システムが他のイベントを処理できるように、実行を渡します。
DoEvents関数
ん?なんのこっちゃですわw
だよな。俺も最初はマジで意味不明だった。これからプログラムを極めていきたいなら、避けては通れない道だぜ!
この「OS(オペレーティングシステム)の他のイベント」に該当するのが「ファイルのOpen/Close」処理になります。つまり、DoEventsを実行することで、OSにファイルOpen,Closeができるように制御を渡している。という事になるんですね。
まとめ:とりあえずDoEnvetsを書く
まぁ、ちょっと小難しい説明もしたが、理解する必要はない!ファイルのOpen/Closeの前には必ず「DoEvetns」を書いておくクセを付けておけ!
はい!肝に銘じておきます!パイセン!
筆者的にも、小難しい理屈を覚えるよりも「DoEvetns」をOpen,Closeの前に必ず書く習慣を付けて貰うだけで良いと思います。ただし、今後もプログラミングスキルの向上させたいと考えている方は、必ず「OS、ソフトウェア、ミドルウェア、メモリ」の関係性を学んでおきましょう。
これらの基礎知識は、「ITパスポート」と呼ばれる国家資格取得を目指すのがオススメです。国家資格と聞くと、ハードル高そうに思えますが、日本のICT関連資格の中で最も低難度のものになっています。高校生でも合格する様な試験ですので、サラリーマンの我々は余裕でしょう!
ITパスポート試験の参考書を読むだけでもプログラマに必要な素養は学べます。「国家資格は要らないな〜」と思っていたとしても、一読する価値はありますよ!
▼オススメ教材▼
令和03年 イメージ&クレバー方式でよくわかる 栢木先生のITパスポート教室 (情報処理技術者試験)
コメント