Excel VBA質問箱 IV

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

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


5069 / 13646 ツリー ←次へ | 前へ→

【52614】ボタンを押してから時間がたつと tokimura 07/11/21(水) 17:39 質問[未読]
【52617】Re:ボタンを押してから時間がたつと かみちゃん 07/11/21(水) 18:35 発言[未読]
【52637】Re:ボタンを押してから時間がたつと tokimura 07/11/22(木) 21:39 発言[未読]
【52638】Re:ボタンを押してから時間がたつと かみちゃん 07/11/22(木) 21:42 発言[未読]
【52663】Re:ボタンを押してから時間がたつと tokimura 07/11/24(土) 20:39 お礼[未読]
【52776】Re:ボタンを押してから時間がたつと tokimura 07/12/3(月) 13:29 質問[未読]
【52781】Re:ボタンを押してから時間がたつと ichinose 07/12/3(月) 20:35 発言[未読]

【52614】ボタンを押してから時間がたつと
質問  tokimura  - 07/11/21(水) 17:39 -

引用なし
パスワード
   フォームにボタン1つとラベル1つを作っておいて、
例えば、ボタンを押してから20秒後にセルA1の文字を読み込む、40秒後にセルA2の文字を読み込みラベルに表示させるということはできるのでしょうか?

時間のことがいまいちわからないのですがOnTimeなど使えばできるでしょうか?

【52617】Re:ボタンを押してから時間がたつと
発言  かみちゃん  - 07/11/21(水) 18:35 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>フォームにボタン1つとラベル1つを作っておいて、
>例えば、ボタンを押してから20秒後にセルA1の文字を読み込む、40秒後にセルA2の文字を読み込みラベルに表示させるということはできるのでしょうか?

方法は、いろいろあるかと思いますが、以下のような感じではいかがでしょうか?

0:00:40の部分を0:00:02など短く設定して試してみてください。
以下のコードは、3回表示したら、終了するようにしています。

Private Sub CommandButton1_Click()
 Dim lngRow As Long
 
 lngRow = 1
 Do
  '40秒待機する
  If Application.Wait(Now + TimeValue("0:00:40")) Then
   Me.Label1.Caption = Range("A1").Offset(lngRow - 1).Value
   DoEvents
   lngRow = lngRow + 1
  End If
  If lngRow > 3 Then Exit Do
 Loop
 MsgBox "終わりました"
End Sub

【52637】Re:ボタンを押してから時間がたつと
発言  tokimura  - 07/11/22(木) 21:39 -

引用なし
パスワード
   ▼かみちゃん さん:
>方法は、いろいろあるかと思いますが、以下のような感じではいかがでしょうか?
>
>0:00:40の部分を0:00:02など短く設定して試してみてください。
>以下のコードは、3回表示したら、終了するようにしています。
>
>Private Sub CommandButton1_Click()
> Dim lngRow As Long
> 
> lngRow = 1
> Do
>  '40秒待機する
>  If Application.Wait(Now + TimeValue("0:00:40")) Then
>   Me.Label1.Caption = Range("A1").Offset(lngRow - 1).Value
>   DoEvents
>   lngRow = lngRow + 1
>  End If
>  If lngRow > 3 Then Exit Do
> Loop
> MsgBox "終わりました"
>End Sub

返事が遅れてしまいすみません。
Application.Waitで指定時間待機できるんですね。

40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら文字を表示と連続してすることもできるのでしょうか?

【52638】Re:ボタンを押してから時間がたつと
発言  かみちゃん  - 07/11/22(木) 21:42 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら

規則性があるかないかで、コードは変わってきます。
Waitで待機させることがヒントになりませんか?

【52663】Re:ボタンを押してから時間がたつと
お礼  tokimura  - 07/11/24(土) 20:39 -

引用なし
パスワード
   ▼かみちゃん さん:
>こんにちは。かみちゃん です。
>
>>40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら
>
>規則性があるかないかで、コードは変わってきます。
>Waitで待機させることがヒントになりませんか?


Waitで指定時間待機させて表示をおこなっていけばできそうな気がします。
少しがんばってみますね。
いろいろ参考になりました、ありがとうございました!

【52776】Re:ボタンを押してから時間がたつと
質問  tokimura  - 07/12/3(月) 13:29 -

引用なし
パスワード
   ▼tokimura さん:
>▼かみちゃん さん:
>>こんにちは。かみちゃん です。
>>
>>>40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら
>>
>>規則性があるかないかで、コードは変わってきます。
>>Waitで待機させることがヒントになりませんか?
>
あれからいろいろと試してみたのですが、waitで毎回待機させると動作がとても重くなってしまいます。
重くならないようにできるようであればご教授お願いいたします。
waitを使うとプログラム的に重くなってしまうのでしょうか?
もしよろしければ、規則性のないときのコードもご教授お願いしたいです。

【52781】Re:ボタンを押してから時間がたつと
発言  ichinose  - 07/12/3(月) 20:35 -

引用なし
パスワード
   こんばんは。

>>>>40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら
>>>
>>>規則性があるかないかで、コードは変わってきます。
>>>Waitで待機させることがヒントになりませんか?
>>
>あれからいろいろと試してみたのですが、waitで毎回待機させると動作がとても重くなってしまいます。
>重くならないようにできるようであればご教授お願いいたします。
>waitを使うとプログラム的に重くなってしまうのでしょうか?

Application.Waitは、タスクマネージャーでCPUの使用率を
調べてみればわかりますが、このメソッド実行中の使用率が100%になってしまいます。
ですから、ループコード内で高い頻度で使用するとPCのマルチタスクとしての動作は
鈍くなりますよね!!

ユーザーフォームをモーダルモードで使用する場合に一定時間待機させる場合は、
私は、次に方法をとっています。

新規ブックにユーザーフォームを作成してください(Userform1)。
このUserform1には、二つのコマンドボタンを配置してください
(Commandbutton1 、 Commandbutton2)。

標準モジュールに

'============================
Sub main()
  UserForm1.Show
End Sub

'Userform1のモジュールに
'=============================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'=======================================================================
Private Sub CommandButton1_Click()
  Sleep 60000
  MsgBox "60秒待機しました"
End Sub
'========================================================================
Private Sub CommandButton2_Click()
  Dim tm As Date
  tm = Now() + #12:01:00 AM#
  Do Until Now() > tm
    DoEvents
    Sleep 300
    Loop
  MsgBox "60秒待機しました"
End Sub

APIのSleepはCPUの占有率が低いです。
Commandbutton1 、Commandbutton2 と二つの例を試してみてください。

私は、CommandButton2の方法を使うことが多いですが、
ケースバイケースでしょう。

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