Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


8227 / 13644 ツリー ←次へ | 前へ→

【34456】Excelを起動してる間、マクロを動かし続... 岡田 06/2/3(金) 3:46 質問[未読]
【34459】Re:Excelを起動してる間、マクロを動かし続... やっちん 06/2/3(金) 8:06 発言[未読]
【34474】Re:Excelを起動してる間、マクロを動かし続... Kein 06/2/3(金) 13:05 回答[未読]
【34492】Re:Excelを起動してる間、マクロを動かし... 岡田 06/2/3(金) 20:29 質問[未読]
【34495】Re:Excelを起動してる間、マクロを動かし... Kein 06/2/3(金) 21:14 発言[未読]
【34498】Re:Excelを起動してる間、マクロを動かし... 岡田 06/2/3(金) 22:31 お礼[未読]
【34512】Re:Excelを起動してる間、マクロを動かし... gako 06/2/4(土) 15:15 質問[未読]
【34514】Re:Excelを起動してる間、マクロを動かし... Kein 06/2/4(土) 15:36 発言[未読]

【34456】Excelを起動してる間、マクロを動かし続...
質問  岡田  - 06/2/3(金) 3:46 -

引用なし
パスワード
   ↓のようなMacro1を1時、2時、3時に実行するというマクロを使っています。

Sub Macro2()
  Dim TAry As Variant
  Dim i As Long
 
 TAry = Array("1:00:00", "2:00:00", "3:00:00")
  For i = 0 To 2
   Application.OnTime TimeValue(TAry(i)), "Macro1"
  Next i


End Sub

このままだと3時にマクロを実行したら処理が終わってしまうのではないかと
思うのですが、このマクロをExcelを閉じるまで動かし続けるといった風に書き換えたいと考えています。
現在Excelを使用できない環境にあり実際に動くか(Excel終了するまで動き続けるか)といったことを確認できない状況なので質問してみました。
VBA初心者なので変なこと書いてるかもしれませんがよろしくお願いします。

【34459】Re:Excelを起動してる間、マクロを動かし...
発言  やっちん  - 06/2/3(金) 8:06 -

引用なし
パスワード
   ▼岡田 さん:
こんにちは。
Macro1で
次の呼び出しの時間をセットすればいいのでは?

【34474】Re:Excelを起動してる間、マクロを動かし...
回答  Kein  - 06/2/3(金) 13:05 -

引用なし
パスワード
   VBEへ新規に標準モジュールを挿入し、その先頭から以下のマクロを入力してください。

Private MyTime As Date

Sub Macro2()
  MyTime = TimeSerial(1,0,0)
 Application.OnTime MyTime, "Macro1"
End Sub

Sub Macro1()
  MsgBox "OnTimeで呼び出されました !" '←任意のコードに変更
  MyTime = MyTime + TimeValue("1:00:00")
  Application.OnTime MyTime, "Macro1"
End Sub

Sub Auto_Close()
  Application.OnTime MyTime, "Macro1", , False
End Sub

なおテストする際は、Macro2の MyTime に値を入れるコードでは

MyTime = TimeSerial(13,12,0)

などと「現在時刻より1〜2分後の時刻を指定」し、Macro1では

MyTime = MyTime + TimeValue("00:01:00")

というように、1分後の時刻を設定するコードに変更してみて下さい。
それにより、1時間のインターバルを1分に短縮してテストすることができます。

【34492】Re:Excelを起動してる間、マクロを動かし...
質問  岡田  - 06/2/3(金) 20:29 -

引用なし
パスワード
   ▼Kein さん、やっちんさん ありがとうございます。
テストとして動き続けることは確認できましたが
現在使用しているMacro1に
MyTime = MyTime + TimeValue("1:00:00")
  Application.OnTime MyTime, "Macro1"
をどこに入れていいのかがわかりませんでした。


Sub Macro1() 'Webクエリを使用

Application.DisplayAlerts = False
  With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://www.abc.html", Destination:=Range("A1"))
    〜〜〜
    省略
    〜〜〜
      End With
  ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\abc.htm", FileFormat:= _
    xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False

With Selection.QueryTable
    .Connection = "URL;http://www.123.html"
    〜〜〜    
    省略
    〜〜〜
  End With
  ActiveWorkbook.SaveAs Filename:= _
    "C:\Documents and Settings\123.htm", FileFormat:= _
    xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
End Sub


Sub Macro2()
MyTime = TimeSerial(20, 0, 0)
 Application.OnTime MyTime, "Macro1"
End Sub


Sub Auto_Close()
  Application.OnTime MyTime, "Macro1", , False
End Sub

【34495】Re:Excelを起動してる間、マクロを動かし...
発言  Kein  - 06/2/3(金) 21:14 -

引用なし
パスワード
   >どこに入れていいのかがわかりませんでした。
通常、やりたい処理が全て終わったところ(つまりプロシージャのEnd Subの直前)
に入れておくことになります。

【34498】Re:Excelを起動してる間、マクロを動かし...
お礼  岡田  - 06/2/3(金) 22:31 -

引用なし
パスワード
   ▼Kein さん:
ありがとうございます!
なんとか上手く動くようになりました。

【34512】Re:Excelを起動してる間、マクロを動かし...
質問  gako  - 06/2/4(土) 15:15 -

引用なし
パスワード
   ▼Kein さん:

一つ質問させていただきます。

MsgBox "OnTimeで呼び出されました !"
がメッセージボックスに出ますが、メッセージ
ボックスが残ったままになります。
またそれを消す事が出来ません。

小生の理解が間違っているかも知れませんが
例えば10分間の中で、2分目と5分目そして最終
7分目にOnのサインがでて、エクセルがクローズと
理解しているのですが、間違っていますでしょうか。

【34514】Re:Excelを起動してる間、マクロを動かし...
発言  Kein  - 06/2/4(土) 15:36 -

引用なし
パスワード
   >メッセージボックスが残ったままになります。またそれを消す事が出来ません。
MsgBoxを出すことが、本来の目的でしょーか ? 私の提示したものは、OnTimeを使って
一定の間隔を置いて繰り返し同じ処理をする。という目的のための"サンプル"です。
あなたの処理の実際の内容は、単純にMsgBoxを出すだけでは無いはずですよね ?
つまり提示したコードは、あくまでサンプルなのですから、そのつもりで考えて下さい。
>10分間の中で、2分目と5分目そして最終
>7分目にOnのサインがでて、エクセルがクローズ
いーえ、ぜんぜん違います。先にも書いたように

OnTimeを使って、一定の間隔を置いて繰り返し同じ処理をする。

という内容です。なお、Sub Auto_Close() の内容は

ブックを閉じるときに、最後に予約・設定された処理を中止・削除しておく。

というものです。つまりブッククローズイベントなのです。(これはExcel95以前から
使われているイベントです。現在は ThisWorkbookモジュールの
Private Sub Workbook_Close(Cancel As Boolean) というタイトルのイベントが
それに相当するのですが、標準モジュールに入れる Auto_Close も、それと併用する
ことができます。その場合、イベントの発生順序は、Workbook_Close → Auto_Close
になります)

8227 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free