Excel VBAについての質問です。

1分毎にエクセル上でマクロを実行しています。
ソースは以下の様なものです。
※主要部分のマクロ自身はコピーペーストを行う程度の軽い物です。
※同一の秒内で2重実行しない様に実際のマクロは少し付け足してあります。

 Sub Macro()
 '1分毎に実行
 ti = Timer
  Do
  DoEvents
  tm = Time - ti
 If Int(tm / 60) * 60 = tm Then
     '>>マクロ実行<<
     End if
  Loop
 End Sub

1分毎にマクロを実行する事は出来るのですが以下のことについて教えてください。
1)CPU稼働率がほぼ100%になってしまいます。
  ほぼ59秒以上は何もしない常態(空ループ)なのでCPU占有率を低減(30%程度)させたいのですが何か良い方法はありませんか?
2)このマクロを実行中は他のエクセルファイルを開く事が出来ません。
  仕事上、他にも編集したいファイルがあるので通常通り2重や3重で開くことは出来ないでしょうか。

ちなみにWindowsXP,Excel2003です。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/10/10 10:29:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:F-15X No.2

回答回数111ベストアンサー獲得回数13

ポイント35pt

こんな、よさげなのを見つけました。


Tips15: VBAでも出来る [ タイマーコントロール クラスモジュール (Ver 2)]

id:spyglass

なるほど、参考にさせて戴きます。

有難う御座います。

2007/10/10 10:28:44

その他の回答1件)

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント35pt

Loop で待ってはいけません。


onTime を使用するか、単順位 Sleep を使用しましょう。

  • Sleep の使用例
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  
Sub Macro()
    Do
       '>>マクロ実行<<
        Sleep 60 * 1000 '// ミリ秒単位で指定
    Loop
End Sub

OnTime の使用例は下記をご参考ください。

http://www.moug.net/tech/exvba/0130013.htm

id:spyglass

OnTimeという便利なものがあるのですね。

これですと他作業も出来そうです。

有難う御座います。

2007/10/10 10:28:38
id:F-15X No.2

回答回数111ベストアンサー獲得回数13ここでベストアンサー

ポイント35pt

こんな、よさげなのを見つけました。


Tips15: VBAでも出来る [ タイマーコントロール クラスモジュール (Ver 2)]

id:spyglass

なるほど、参考にさせて戴きます。

有難う御座います。

2007/10/10 10:28:44

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません