関工健児誇りあれ!?

下関のブログです(^^)v 明日見村 MotoG5Plus Windows10 Kindle iPhone Access Excel VBA ALCATEL IDOL4 Zenfone2 ZE551ML CHUWI Hi8 目標は?100kb/s でも読めるアホblog です

ACCESS VBA 実行時エラーじゃないけど上手く行かない DoEvents 意外と難しいのネ!

ACCESS VBA 実行時エラーじゃないけど上手く行かない DoEvents 意外と難しいのネ!

 
いつまで続くか分かりませんが、、、
 
なんちゃって、プログラミング的な事をカキコして見ようと思います
 
昨日、前職場に行って来ました
 
オンライン(サーバー一元管理)では無いデータベース
 
ACCESS 使って、EXCEL に出力
 
データはメールで送受信
 
なんて、意外と有ります
 
ACCESS はDB(データベース)ソフト
 
ms さんは、スタンドアローン推奨です
 
自分のPCだけ、1人ボッチで使ってネって事
 
よってネットワーク越しにDBを配置するのは好ましく無いデス
 
イロイロ処理を安定させるのもプログラム上では限界も有ります
 
実際、上手く行きそうに無い記述がヘルプなどにも書かれています
 
よって、データをcsv などでメールで受け渡しっとなる訳です
 
この処理で昨日あった事例
 
意外と多いのネ
 
DoEvents
 
待ってる処理を強制的に実行させます
 
これ、どんな時に使うのか?
 
色々あります
 
例えば、今回の事例では、、、
 
入力データが200件超
 
今迄、上手く動いていたのに、EXCEL が全て出力されない事態になりました
 
1行目だけ一部出力!
 
では、調査
 
ボタンを押して、EXCEL出力する所だとは想定できます
 
モジュール、VBA のプログラムが入っている .mdb を起動します
 
初期起動でモジュールなどが表示されない時は、Shift を押しながらクリックします
 
該当のモジュールを開いて
 
前後の、それっぽい箇所を、左端のスクロールBARへマーク
 
クリックすれば◯ がマークされます
 
これを何ヶ所かに入れて、EXCEL出力を実行
 
で、マークした所で止まります
 
1行づつ処理を確認するなら、F8、次の処理◯まで実行するなら、F5
 
大体、これで処理の流れとデータの内部情報が分かります
 
で、結局、エラーも無く最後まで処理されEXCEL も完成!
 
では、ナゼ、通常時にEXCEL出力が出来なかったのか!
 
ここがポイント!
 
1行づつ処理を確認する
 
っと言う事は、プログラムのイベントを1つづつ待ちながら実行してるって事です
 
ザックリ言えば、そんな感じ
 
だから上手く処理が完了したのデス
 
windows はその名の通り、ズ、複数形ですネ
 
人は一つづつ処理していますが、機械はアレコレと仕事をしてます
 
画面がチラつか無いように画面表示の随時更新を一時的に止めたり
 
DB を読み込んで EXCEL に出力したり、、、イロイロです
 
この保留された状態を何処かでリセット、待ちのない状態にする
 
これが、
 
DoEvents
 
っとなるのデス
 
今迄、上手く行ってたのに上手く出来なくなった
 
バグ(ミス、不具合)以外で!って時は、これが1番疑わしいデス
 
では、どうしてそんな事が起きるのか?
 
理由は様々デスが、、、
 
 
Office2003 --> 2010
 
Access2003 のまま
 
pc も新調
 
x86(32bit)、x64(64bit)
 
当然、メモリ、HDD、その他メーカーのゴチャゴチャ仕様のサービス
 
サービスパックの適用の有無、など色々考えられます
 
今回は、何らかの原因でメモリ上で待機出来ていたイベント処理が限界を超えたって感じ
 
意外とよく有ります
 
逆に、このイベント待ちを解消させた為に起こる不具合も有ります
 
それは、、、
 
まぁ、基本的にはバグ
 
たまたま今まで機嫌良く動いてたって事ですネ
 
検証するのも中々大変! 運用者さんも!
 
作るの大変だけど1回だけ、、、
 
運用は、それからずっと、、、
 
なるべく時間をかけて、お互い上手く頑張る事
 
遠慮しないで何でも要望だしたり、聞いたり、、、しましょ
 
それが良いシステムを作る第一歩
 
最初から大きく、では無く
 
ポイントを決め、少しづつ大きなシステムへ、、、
 
これが私の基本的な考えデス
 
簡単だけど難しい DoEvents の巻 でした
 
明日見むら
村長さんでした
(^^)/~~~
 
asumi-mura