![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e6f04cf)
初めまして。
是非教えていただきたいのですが、Excel2010のVBAからWindowsAPIのSetTimer関数を
使用して、500msec程度のインターバルタイマを用意し、決められたVBAのプロシジャ(以
降、Proc1)を呼び出したいと思います。
Proc1では外部I/Oのビットチェックを行い、特定のビットがONの時にプリンタを駆動しま
す。
上記のような使い方では、外部I/Oのビットチェックはインターバル周期内に処理が終わり
ますが、プリンタ駆動の方は印刷結果の取得も行うためインターバル周期内では処理が終わ
りません。
簡単なテストプログラムを用意して動作させてみたのですが、プリンタの駆動を行う時は
Proc1の処理が完了していなくても、インターバル周期でProc1が呼び出されているようで
す。
Proc1の先頭で一旦インターバルタイマを停止させ、Proc1の処理を抜ける時に再びインター
バルタイマを作動させればうまくいくように思うのですが、そのようなことができるので
しょうか?
詳しい方がおられましたら、ご教授お願いいたします
No.1ベストアンサー
- 回答日時:
SetTimer関数は知らなかったので調べてみました。
。。http://note.phyllo.net/?eid=1106267
コードが不明なので・・・どこかでKillTimer SetTimerを繰り返す必要がありそうです。
となるとPrinterのQueやStatusを検出する必要も出てきそうな気がします。
なので別案
Declare Function timeGetTime Lib "winmm.dll" () As Long
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
t1=timegettime
call proc1
t2=timegettime
if t2-t1 <500 then
sleep 500-(t2-t1)
end if
みたいな感じで余った分だけSleepではダメ?
でこれをループ処理。
http://homepage2.nifty.com/DreamyCat/APIpage1.htm
nicotinism 様
こんにちは。hsaikiです。
早速の回答ありがとうございます。
まず紹介していただいたURL、大変参考になりました。
WindowsAPIについては日本語のわかりやすい資料が
なかなかないのでネット上の情報が頼りです。
教えていただいたことを元に、取りあえず周期的に
呼ばれるプロシジャの先頭で、一旦「killtimer」を実行
して、プロシジャの末尾で再度「settimer」を実行する
ようにして動作を確認してみようと思います。
ご指摘いただいたプリンタのキューやステータスについ
ては、「命令を投げて結果を待たずに次の処理へ進み
次回以降のプロシジャ実行でフォロー」のような真っ当
な処理(笑)は行っていないので、多分大丈夫なのではな
いかと思っています。
問題あるようでしたら提案いただいた処理も試してみます。
最後にコードを書いておきます。
ありがとうございました。
(宣言部)
Public Declare Function SetTimer Lib "USER32"
(ByVal hWnd As Long,
ByVal nIDEvent As Long,
ByVal uElapse As Long,
ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "USER32"
(ByVal hWnd As Long,
ByVal nIDEvent As Long) As Long
(Workbook_Openモジュール)
・
・
TimerID = SetTimer(0&, 31000&, 500&, AddressOf TimerProc)
・
・
(標準モジュール)
Public Sub TimerProc()
KillTimer 0&, TimerID
・
・
(処理)
・
・
TimerID = SetTimer(0&, 31000&, 500&, AddressOf TimerProc)
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAでArrayListを使う為の「mscorlib.tlb」の参照設定について 3 2022/03/23 19:45
- Excel(エクセル) ランダムで四択の問題を作る場合にvbaで何を学べばいいでしょうか。 1 2022/04/14 16:45
- Visual Basic(VBA) エクセルVBA コードが同じでもファイルによって処理速度が大きく変わるのはなぜ 5 2022/11/06 21:34
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- UNIX・Linux linuxサーバーのキャッシュをクリアするコマンドを実行したい。 5 2023/01/24 14:52
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- その他(Microsoft Office) 1の行を固定した上でVBAを用いて日付順に自動並べ替え 2 2022/06/06 15:09
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Excel(エクセル) VBA プロシージャーをミリ秒で繰り返し実行する方法
Excel(エクセル)
-
ExcelVBAで、タイマー割り込みって使える?
Excel(エクセル)
-
EXCELのマクロが 実行時エラー50290 で異常終了する(KillTimer使用時)
Excel(エクセル)
-
-
4
TimerProc コールバック関数を利用する方法
C言語・C++・C#
-
5
エクセルVBAにおけるON TIMEメソッドの解除方法について
Visual Basic(VBA)
-
6
VBAカウントダウンタイマーの2個同時起動がうまくいきません
Visual Basic(VBA)
-
7
タイマーマクロの二重起動防止をしたい
Visual Basic(VBA)
-
8
エクセルVBAでタイマーコントロールは使えますか
Excel(エクセル)
-
9
クラスのプロパティに構造体を使いたい。
Visual Basic(VBA)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
12
エクセルのマクロを一定時間ごとに実行
Excel(エクセル)
-
13
matchプロパティを取得できません…と出ます。
PowerPoint(パワーポイント)
-
14
Excelマクロで、稼働中のマクロを確認する方法
その他(Microsoft Office)
-
15
win32api複数のタイマーを同時に処理するには
C言語・C++・C#
-
16
OnTime の中断方法について
Excel(エクセル)
-
17
エクセル VBA タイマー動作 のチェック方法
Visual Basic(VBA)
-
18
エクセル マクロ 指定日の指定時刻にプロシージャを実行
Visual Basic(VBA)
-
19
ユーザーフォーム上に現在日時と時刻を表示させていますがフォームを実行すると時間が更新されません。それ
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Chat GPTに、課題として、二と...
-
win10で、正確な待ち時間の作り方
-
C言語:関数を使うメリットとデ...
-
wavelet変換のソフト
-
ExcelVBA処理経過をリアルタイ...
-
DoEvents関数って何?
-
小数点を含む数値かどうか判断...
-
If Not c Is Nothing Then ~延...
-
実行時のCPU使用率を増やしたい
-
逆ポーランド記法における単項...
-
「単体テスト」に関する深刻な...
-
テキストファイルの空行をスキ...
-
プログラム上のCPU稼働率低減に...
-
あっち向いてホイのプログラム...
-
ソケットからの入力をWaitForMu...
-
Macターミナルで実行中のプログ...
-
タスクマネージャーのプロセス...
-
TCP/IP通信時のサーバーからの受信
-
バッチファイルでの実行EXEのメ...
-
緯度、経度の 10進法と 60進法...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelでのセル内容の高速消去方法
-
DoEvents関数って何?
-
win10で、正確な待ち時間の作り方
-
小数点を含む数値かどうか判断...
-
Excel VBAにて、2GB超の点群デ...
-
SQLの速度をあげるには・・・
-
絶対パスの取得について
-
WebBrowserの読み込み待ちの処...
-
プログラム上のCPU稼働率低減に...
-
C言語 再帰処理のメリットとデ...
-
テキストファイルの空行をスキ...
-
実行時のCPU使用率を増やしたい
-
C言語 時刻差分の算出方法
-
Excel VBA データ削除の高速化
-
VBでの簡易電卓の作成(減算方...
-
Excel(VBA)でSetTimer関数を使...
-
プログラミングの授業でPython...
-
If Not c Is Nothing Then ~延...
-
C言語で、文字とか入力されなく...
-
C言語:関数を使うメリットとデ...
おすすめ情報