【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード

皆様こんにちは
温度計を導入しまして、リアルタイムに温度を取り込むアドインがついていました。いま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 下に数値のみを貼り付ける()"を実行する方法はないでしょうか。
よろしくお願いします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/09/12 17:47

こんにちは。

KenKen_SP です。

ご提示のコードでは恐らくうまくいかないと思いますが、、

そのような用途なら、Wait ではなく、 OnTime メソッドを使用します。
VBA のヘルプを参照して下さい。

10秒後に実行するなら

Application.OnTime Now + TimeValue("00:00:10"), "マクロ名"

です。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/09/12 17:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!