「教えて!ピックアップ」リリース!

マクロを1分おきに自動実行するには
どうすればよいでしょうか?

※webクエリの更新時間と連動できるとなおよいです

よろしくお願いします

A 回答 (6件)

こんにちは。


Wendy02です。

たぶん、Web クエリとの連動のイベントの説明しても、違う環境で試されたのでは、おそらく実証できないでしょうから、OnTime メソッドで説明しておきます。


Sub ActionSetting()
 Dim myTime As Date
 myTime = Now()
 For i = 0 To 360 '6時間 '1分ごと
  Application.OnTime myTime + TimeValue("00:01:00") * i, "Move2RowTo21Row"
 Next
End Sub

Private Sub Move2RowTo21Row()
Application.ScreenUpdating = False
With Rows(21)
  .Insert
  Rows(2).Copy Rows(21)
End With
Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

うまくいきました
ありがとうございました

お礼日時:2006/02/20 21:25

こんばんは。



>記述的には理解できないのでそのまま貼り付けてみましたが、動作はできませんでした。
#2と#3 は、話が続いているのですが、おそらくは、きちんと読んでいないのでしょうね。
とは言っても、Culculate イベントの実体が何かわからないと、ちょっと厳しいかもしれません。

>webクエリの更新時間と連動できるとなおよいです

連動ということで、私はのCulculateイベントを書いたわけで、Webクエリの更新が起動となるわけで、そのまま見ていても動くわけはありません。

でも、実際のマクロは見せられていないですから、話が続きませんね。私のほうの、OnTime イベントは、#4の専門家さんが書いておられますので、そのままにしておきますね。こちらのコードも見直していただければ、それはそれなりに考えますが。
    • good
    • 1
この回答へのお礼

お手数おかけしました。
動作させたいマクロ部分は↓のみですが
時間おきにループさせたいので困っています。

Rows("21:21").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.Copy
Rows("21:21").Select
ActiveSheet.Paste
Application.CutCopyMode = False

お礼日時:2006/02/20 14:40

こんばんは。

お待たせしました。
こんな例がありました。
どうでしょうか?

 Testを実行するとSheet1をアクティブにして、A1:A10に"t.tanaka"を
書き込みます。そして15秒間何もせず、続いてB1:B10に"t.tanaka"を
書き込みます。処理の停止している15秒間は、Excelに対して通常の処理を
行えます。

【マクロ】
Sub Test()
Dim i As Integer
Sheets("Sheet1").Select
For i = 1 To 10
Cells(i,1) = "t.tanaka"
Next i
Application.OnTime Now + TimeValue("00:00:15"), "WaitTime"

End Sub

Sub WaitTime()
Dim i As Integer
For i = 1 To 10
Cells(i,2) = "t.tanaka"
Next i
End Sub

この回答への補足

マクロ自体は無限に実行したいのです。
↓で実行しましたがだめでした。
お手数ですが再度方法についてお願いします。


Sub Test()


Rows("21:21").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.Copy
Rows("21:21").Select
ActiveSheet.Paste
Application.CutCopyMode = False

Do

Application.OnTime Now + TimeValue("00:00:05"), "WaitTime"

Loop

End Sub

Sub WaitTime()
Rows("21:21").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Rows("2:2").Select
Selection.Copy
Rows("21:21").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub

補足日時:2006/02/20 14:28
    • good
    • 0
この回答へのお礼

ありがとうございます
部分的に理解できます
ここの環境にエクセルが入ってないので
明日会社で動作させて見ます
また、ご報告させていただきます。

お礼日時:2006/02/17 23:25

追伸:



今、設定して気が付いたことですが、

Worksheet_Calculate() イベントは、Application 全体から影響を受けますから、他のシートを使っているときに、誤動作してしまう可能性があります。その場合、以下のようにしたらどうかと思います。

Dim blnActive As Boolean
Private Sub Worksheet_Activate()
 blnActive = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
 blnActive = False
End Sub

Private Sub Worksheet_Calculate()
 If blnActive Then
 '実行
 End If
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました
記述的には理解できないのでそのまま貼り付けて
みましたが、動作はできませんでした。
すいません、お手数おかけしました。

お礼日時:2006/02/17 23:18

こんばんは。



>マクロを1分おきに自動実行する

>webクエリの更新時間と連動できるとなおよいです

とはExcelの場合は、たぶん別ですね。

例えば、Web クエリを更新するには、以下のようになるかと思いますが、Webクエリ側で、バックグラウンドで動かすとか、更新の周期とかは、オフにする必要があると思います。

だから、連動というよりも、QueryTable Refresh に、マクロを取り付けなくてはなりません。そうでないとしたら、以下のように、Caluculate イベントに、マクロを取り付ければよいと思います。

Sub QueryTableRefresh()

 On Error Resume Next
 ActiveSheet.QueryTables(1).Refresh

End Sub
Sub ActionSetting()
 Dim myTime As Date
 myTime = Now()
 For i = 1 To 60 '1時間
  Application.OnTime myTime + TimeValue("00:01:00") * i, "QueryTableRefresh"
 Next
End Sub

'------------------------------------------------
もしも、Web クエリと連動させるのでしたら、
同じシートで、Web情報に関わらないエリアのセルに、

=Now()
と入れて、

Private Sub Worksheet_Calculate()
 '実行
End Sub

とするのがよいのではないでしょうか?
    • good
    • 0

確かできたはずです。


会社で確認してきます。
少々お待ち下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます
お待ちしてます

お礼日時:2006/02/16 21:57

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング