• ベストアンサー

エクセル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 下に数値のみを貼り付ける()"を実行する方法はないでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.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

kuoka
質問者

お礼

コードまでありがとうございました。 おかげさまで完成しました たしかにDDE通信を使っているとのことです。よく解りませんが・・・ 全然重くは感じませんでした。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんにちは。KenKen_SP です。 ご提示のコードでは恐らくうまくいかないと思いますが、、 そのような用途なら、Wait ではなく、 OnTime メソッドを使用します。 VBA のヘルプを参照して下さい。 10秒後に実行するなら Application.OnTime Now + TimeValue("00:00:10"), "マクロ名" です。

kuoka
質問者

お礼

ありがとうございました。 研究不足でした。

関連するQ&A

専門家に質問してみよう