- ベストアンサー
エクセルVBAのApplication.Wait Now()について
皆様こんにちは 温度計を導入しまして、リアルタイムに温度を取り込むアドインがついていました。いまsheet1のA1からG1まで次々値が変化するセルがあります。 そこで10秒おきにA1からG1までの値だけを2列下にコピーするコードを実行してみたのですが・・・ '----------------------------- Sub 一定秒おきに実行() Dim i As Integer Static k For i = 1 To 5 If k = "" Then k = 2 Application.Wait Now() + TimeValue("00:00:01") DoEvents 下に数値のみを貼り付ける Next End Sub '--------------------------------------- Sub 下に数値のみを貼り付ける() Range("A1:G1").Select Selection.Copy Range("A3:G3").Select Selection.PasteSpecial Paste:=xlPasteValues End Sub '-------------------------------------- その結果 Sub 下に数値のみを貼り付ける()をVBエディタの標準ツールバーの実行をクリックするたびにリアルタイムに値がコピーされるのですが、Sub 一定秒おきに実行()を実行すると、画面が5回ちらつくのでコピーはされてるみたいですがマウスポインタが砂時計になって、その間アドインからの数値の更新も止まってしまいます。 Application.Wait だけにマクロが停止していると思いますが、これには大変困ってしまっています。 マクロをとめないで一定時間置きに "Sub 下に数値のみを貼り付ける()"を実行する方法はないでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 Wendy02 です。#1 KenKen_SP さんが回答されていますが、私も、同意見ですが、温度を測るアドインというと、DDE を使ったものなんかがあったと思うのですが、話に聞くだけで、実際に、やったことはありませんので、ちょっと気がかりです。(つまり、めちゃめちゃ重いのです) それから、まだ他に手があったような気がしますが、今は、このぐらいです。 '----------------------------- Dim j As Integer Sub 一定秒おきに実行() Dim i As Integer Dim myTime As Date Static k '不明 myTime = Now j = 0 For i = 1 To 5 If k = "" Then k = 2 '不明 Application.OnTime myTime + TimeValue("00:00:10") * i, "下に数値のみを貼り付ける" Next End Sub '--------------------------------------- Sub 下に数値のみを貼り付ける() Range("A3:G3").Offset(j).Value = Range("A1:G1").Value j = j + 1 End Sub
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。KenKen_SP です。 ご提示のコードでは恐らくうまくいかないと思いますが、、 そのような用途なら、Wait ではなく、 OnTime メソッドを使用します。 VBA のヘルプを参照して下さい。 10秒後に実行するなら Application.OnTime Now + TimeValue("00:00:10"), "マクロ名" です。
お礼
ありがとうございました。 研究不足でした。
お礼
コードまでありがとうございました。 おかげさまで完成しました たしかにDDE通信を使っているとのことです。よく解りませんが・・・ 全然重くは感じませんでした。