Excel VBA質問箱 IV

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

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


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

【54187】onTime 動作 かつし 08/2/28(木) 17:52 質問[未読]
【54190】Re:onTime 動作 ichinose 08/2/28(木) 21:26 発言[未読]
【54199】Re:onTime 動作 かつし 08/2/29(金) 11:38 質問[未読]
【54211】Re:onTime 動作 ichinose 08/2/29(金) 18:20 発言[未読]
【54234】Re:onTime 動作 かつし 08/3/1(土) 16:04 回答[未読]
【54235】Re:onTime 動作 ichinose 08/3/1(土) 16:27 発言[未読]
【54253】Re:onTime 動作 かつし 08/3/2(日) 15:04 回答[未読]
【54274】Re:onTime 動作 ichinose 08/3/2(日) 17:32 発言[未読]

【54187】onTime 動作
質問  かつし  - 08/2/28(木) 17:52 -

引用なし
パスワード
   2月24日に「ichinose」さんから「onTime」文を教示頂き有難う御座いました。大いに便利になりました。この応用文を作って居るのですが、下記の様な文で
StartTime, "abc"のマクロ文"abc"無しで、次のRange("M5").Selectの動作に進む方法はあるのでしょうか? "abc"の代わりにダミーの言葉を入れれば次に進めるとか?宜しくご教示お願いいたします。

 Dim StartTime As Date
    StartTime = Now + TimeValue("00:00:15")
    Application.OnTime StartTime, "abc"
 Range("M5").Select
    With Selection.Interior
     .ColorIndex = 6
     .Pattern = xlSolid
     End With

【54190】Re:onTime 動作
発言  ichinose  - 08/2/28(木) 21:26 -

引用なし
パスワード
   ▼かつし さん:
こんばんは。

>2月24日に「ichinose」さんから「onTime」文を教示頂き有難う御座いました。大いに便利になりました。この応用文を作って居るのですが、下記の様な文で
>StartTime, "abc"のマクロ文"abc"無しで、次のRange("M5").Selectの動作に進む方法はあるのでしょうか? "abc"の代わりにダミーの言葉を入れれば次に進めるとか?宜しくご教示お願いいたします。

3,4回読み返したのですが、はっきり意図が理解できません。
Ontimeメソッドは、

Application.OnTime Now() + TimeValue("00:00:15"), "abc"

Range("M5").Select

と文法的な間違いがなければ、abcというプロシジャーがあろうがなかろうが
↑この時点ではエラーになりません。

ということは次に命令の

Range("M5").Select


は実行されます。

15秒後にabcというプロシジャーを実行しようとして、存在しなければ
エラーになることはありますが・・・。


それとも
実行するプロシジャー名を変数に入れたいと言うことでしょうかねえ?


dim procnm as string
procnm="abc"
Application.OnTime Now() + TimeValue("00:00:15"), procnm
Range("M5").Select


はっきり意味を読み取れませんので、思いつきで
投稿していますが、

これこれこういう理由があって、こういう事をしたい

という事を 例を挙げて投稿してくださると

私でも理解できると思うのですが・・・。

【54199】Re:onTime 動作
質問  かつし  - 08/2/29(金) 11:38 -

引用なし
パスワード
   ichinoseさん、サジェッション有難う御座います。
私の説明不足で申し訳ありません。自分が行いたいのは、他の条件もあり「マクロを動作指示15秒後に、Range("M5").Select以下の文を動作させたい」と言う事です。従ってプロージャー"abc"の動作は不要で OnTimeを働かすに"abc"を何かダミーを置けば15秒後に次のRange("M5").Selectが動作しないのかな?別の方法として、Range("M5").Select以下を"abc"のプロージャー内に移せば解決することは理解しましたが。この手間を省きたい狙いです。"abc"をご教示の変数指示(例文どおりに記述)にしましたが、これはエラーとなりました。宜しく教示お願いいたします。
  ------------------------------------------------
 Dim StartTime As Date
    StartTime = Now + TimeValue("00:00:15")
    Application.OnTime StartTime, "abc"
 Range("M5").Select
    With Selection.Interior
     .ColorIndex = 6
     .Pattern = xlSolid
     End With

【54211】Re:onTime 動作
発言  ichinose  - 08/2/29(金) 18:20 -

引用なし
パスワード
   ▼かつし さん:
こんばんは。

>ichinoseさん、サジェッション有難う御座います。
>私の説明不足で申し訳ありません。自分が行いたいのは、他の条件もあり「マクロを動作指示15秒後に、Range("M5").Select以下の文を動作させたい」と言う事です。

なるほど・・・。Ontimeが安全なんですけどね!!
まっ、構造的にどうしてもと言う場合もあるでしょうね!!


二つサンプルコードを提示しますので、検討してみてください。

標準モジュールに


'============================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub test1()
  MsgBox Now()
  Sleep 15000
  MsgBox Now()
End Sub
'=======================================================================
Sub test2()
  Dim stt As Date
  stt = Now()
  MsgBox stt
  Do Until Second(Now() - stt) > 15
   DoEvents
   Loop
  MsgBox Now()
End Sub

test1,test2共に かつしさんが行いたい仕様のコードにしたつもりです。

二つのコードの動作には、若干違いがあると思います。

どちらか御希望に沿う動作ではありませんか?

【54234】Re:onTime 動作
回答  かつし  - 08/3/1(土) 16:04 -

引用なし
パスワード
   サジェッション有難う御座います。ご教示の2つのプログラムに各々私の文を追記して動作させると、test1は「sub・・・・等のfunctionが必要」のエラーが生じる。test2は動作OKですが、問合せボックスが現れ「OK指示」を出さねばならず、これは不便です。onTimeにはプロージャーがどうしても必要なのですか? onTimeの意味が分かり、使えるようになりましたので今後これを活用する様にします。

【54235】Re:onTime 動作
発言  ichinose  - 08/3/1(土) 16:27 -

引用なし
パスワード
   ▼かつし さん:
こんにちは。
まず、

>サジェッション有難う御座います。ご教示の2つのプログラムに各々私の文を追記して動作させると、test1は「sub・・・・等のfunctionが必要」のエラーが生じる。
これですが、

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

たぶん、sleep 15000 でのエラーだと思いますが、
上のステートメントを入れていますか?


>test2は動作OKですが、問合せボックスが現れ「OK指示」を出さねばならず、これは不便です。

問い合わせボックスは、15秒間経ったという目安のためにコードで
出しています。要らなければ、抜けばよいのですよ!!

【54253】Re:onTime 動作
回答  かつし  - 08/3/2(日) 15:04 -

引用なし
パスワード
   ichinoseさん こんにちは。ご教示有難う御座います。出張から帰り画面を見ました。ご指示の動作確認をしましたが、どうもうまくいきません。test1の文は下記です。test2の文も確認のボックスが表示されます。この表示消しがどうも分かりません。私はまだVBAの知識が薄いのでこれから少しずつ学びます。とりあえず「onTime」を使っていきます。
Sub test1()
  Option Explicit
  Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
  MsgBox Now()
  Sleep 15000
  MsgBox Now()
  Columns("G:G").Select
  Selection.Copy
  Columns("G:G").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Range("G5").Select
  With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
  End With
End Sub

【54274】Re:onTime 動作
発言  ichinose  - 08/3/2(日) 17:32 -

引用なし
パスワード
   ▼かつし さん:
こんにちは。
>ichinoseさん こんにちは。ご教示有難う御座います。出張から帰り画面を見ました。ご指示の動作確認をしましたが、どうもうまくいきません。test1の文は下記です。test2の文も確認のボックスが表示されます。この表示消しがどうも分かりません。私はまだVBAの知識が薄いのでこれから少しずつ学びます。

Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'↑これは、プロシジャー名の定義の外で宣言します

>Sub test1()
  Sleep 15000 'この関数が15秒間待機する関数です
  Columns("G:G").Select
  Selection.Copy
  Columns("G:G").Select
  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  Range("G5").Select
  With Selection.Interior
    .ColorIndex = 6
    .Pattern = xlSolid
  End With
>End Sub

何をしたいのか(どこで15秒間待機したいのか)わかりませんが、
上記のコードをよく調べてみてください。

>とりあえず「onTime」を使っていきます。
Ontimeで希望の動作が適っているのなら、そうしてください。
もう少し、VBAのことがわかってきたとき、
再度のこの一連コードを見直してください。
その時に今回のコードを理解していただければ、
よいです。

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