VB初心者です(6.0を使っています)
タイマーの使い方がよく分かっていません。
ボタンを押してからの経過時間をラベルに表示させたいと思っているのですが、
-----------------------------------------------
Private Sub Command1_Click()
Timer1.Interval = 1000
処理1
処理2
・
・
・
Timer1.Interval = 0
End Sub
Private Sub Timer1_Timer()
Label1.Caption = [経過時間]
End Sub
-----------------------------------------------
という感じに書いていると、[処理1]~をしている間はラベルが表示されなくて、
最後の[処理]が終わった直後の[経過時間]のみが表示されます。
こういう形ではタイマーは使用できないのでしょうか?
他のWebサイトなども調べてみたのですが、解決できませんでした。
どなたか教えていただけませんでしょうか?
No.6ベストアンサー
- 回答日時:
意味が解りました。
OSがWin2000、WinXP、WinNTで有れば、次の方法で可能です。
タイマー表示部分を別プログラムとして作成し、ファイメ名を例えば、"Time_Hyoji.exe"とします
そして、以下のようにします。
この場合、Time_Hyoji.exeは常に一番手前に表示されるようにする必要が有ります。
Private Sub Command1_Click()
x = Shell("Time_Hyoji.exe", 1)
処理1
処理2
・
・
・
End Sub
次にWin98系のOSの場合ですが、処理中に、頻繁にDoEventsを実行する必要があります。
これは、OSの特性です。
何度もお返事頂いて本当にありがとうございます。
別プログラムになるのですね・・・
実はDoEventsも、割り込み?をさせるんだな・・・というぐらいで、あまり意味が分かっていなくて。
やっぱり今の私には少し難しい部分なのかなと思いました(^^;
こんな風にOSの特性によってプログラムを変えなきゃいけないとかも全然意識していませんでしたし、そういう知識からしてないですし・・・
(もっと勉強しないといけないな~と思います)
教えて頂いた方法をぜひ試してみたいと思います!
本当にありがとうございました!
No.5
- 回答日時:
NO4の追加です。
こういう事をやりたいのでしょうか?
Private Sub Command1_Click()
HYOJI_start
DoEvents
処理1
DoEvents
処理2
DoEvents
・
・
・
HYOJI_end
End Sub
Private Sub HYOJI_start()
'表示開始
Timer1.Interval = 1000
Label1.Caption = Time
End Sub
Private Sub HYOJI_end()
'表示終了
Timer1.Interval = 0
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 0
Label1.Caption = Time
Timer1.Interval = 1000
End Sub
お返事ありがとうございました。
(#4の方も含めて一緒にお礼させて頂きます)
#3の方のお返事にも書かせて頂いたのですが、
私の説明不足で、経過時間の表示というか、
処理が開始されてから何秒経過したか、ということを
1秒ずつ時計のように表示させたいと思っていました。
今、手元にVBの環境がないので、教えていただいたコードは
まだ試していないのですが、もしかしたらDoEventsの瞬間の経過時間が表示されるコードじゃないかな・・・と思いました。
他のサイトなども調べていると、ボタンを押したら経過時間の表示が開始されて、もう1度押すと止まる、というようなソースは結構解説?されているのですが、
ボタンを押したら始まる処理の経過時間を刻々と刻みたいんです・・・
やっぱり無理なんでしょうか・・・
ありがとうございました!
No.4
- 回答日時:
Private Sub Command1_Click()
'表示開始
Timer1.Interval = 1000
Label1.Caption = Time
End Sub
Private Sub Command2_Click()
'表示終了
Timer1.Interval = 0
End Sub
Private Sub Timer1_Timer()
Timer1.Interval = 0
Label1.Caption = Time
Timer1.Interval = 1000
End Sub
これで、ご希望の処理が出来ます。
なお、VBはタイマイベントにの処理中はタイマーOFFにする必要が有ります。
また、何か処理したい事は、別のプロシジャーで行って下さい。
No.3
- 回答日時:
Private Sub Command1_Click()
Me.Enabled = False
Timer.Interval = 1000
処理1
DoEvents
処理2
DoEvents
・
・
・
Timer.Interval = 0
Me.Enabled = True
End Sub
お礼が遅れて申し訳ありません!
少し説明不足でしたが、処理を開始したら1秒ずつ刻々と経過時間を刻む表示をさせたいと思っていました。
DoEventsを使うと、その瞬間の経過時間は表示されるのですが、やはり時計のように1秒、2秒・・・と継続しては表示されなくて・・・
あれからも自分でも色々調べてみたりしているのでが、
こういう処理自体が難しいというか、コード的におかしいのかな・・・と少し思い始めています・・・(--;
お返事ありがとうございました。
No.2
- 回答日時:
参考になりそうなHPがありましたので、
参考にしてみてはいかがでしょうか?
すでに、ご覧になっていたら申し訳ありません・・・
参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
拝見してみたのですが、ちょっと言葉が難しくて、さらっと読んだだけではよく分かりませんでした(^^;
またじっくり読んで勉強してみます。
教えて頂いてありがとうございました。
No.1
- 回答日時:
タイマーイベントは、一つのイベントが終わってから
発生するものです。
だから 一つのイベント内で
>Timer1.Interval = 0
なんて してしまうと 発生する わけがありません。
Private Sub Timer1_Timer()
Label1.Caption = [経過時間]
Timer1.Interval = 0
End Sub
せめて 上記のように 記述すればいいかもしれません。
これで 発生しなかったら、他の条件とか設定しないと
ダメなんでしょう。
こんなに早くお返事いただけて、ありがとうございました。
--------------------------
タイマーイベントは、一つのイベントが終わってから
発生するものです。
だから 一つのイベント内で
>Timer1.Interval = 0
なんて してしまうと 発生する わけがありません。
--------------------------
なるほど・・・そうだったのですね・・・(^^;
そうすると、1つのイベント内の経過時間を表示するには
違う方法を考えないといけないですよね・・・
--------------------------
Private Sub Timer1_Timer()
Label1.Caption = [経過時間]
Timer1.Interval = 0
End Sub
--------------------------
例えばこう記述すると、またどこかで
Timer1.Interval=1000
としなければ、タイマーは動かない?のですよね・・・
でも仕組み?が分かったので何とか考えてみます!
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) 【マクロ】リボン、行列、数式・ステータスバを非表示に 4 2022/12/12 07:32
- Excel(エクセル) B列に文字がはいったらA列に数字が入るマクロードを完成させたい 4 2023/04/21 01:58
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/08/08 15:45
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) ListBox1をClickしたときのイベント 5 2022/12/11 19:45
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
VBの「As String * 128」とは?
Visual Basic(VBA)
-
Vb.netのグローバル変数の宣言の仕方の質問
Visual Basic(VBA)
-
-
4
VB6でデータを昇順に並べ替える
Visual Basic(VBA)
-
5
DoEventsがやはり分からない
Visual Basic(VBA)
-
6
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
マクロで、次のコードへ行く前...
-
シグナル 6(SIGABRT)とは?
-
private subモジュールを他のモ...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
VBAでBook読み込み時の非表示方...
-
vbaのエラー対応(実行時エラー...
-
途中で処理を中断させたい (ア...
-
VB.NET SPRED(チェックボック...
-
VB6にてネットワーク上にある共...
-
UWSCでの例外処理について
-
【C#】Page_Loadさせない方法に...
-
特定のファイルを他のプロセス...
-
Excel VBA セルの名前があるか...
-
ListViewから選択中の文字列を取得
-
LoadPicture のオートメーショ...
-
Word VBA。各マクロの間に待ち...
-
【Vb.net】プリンタジョブの取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#/Java?】try-catchでcatch...
-
IF文に時間(何時から何時ま...
-
private subモジュールを他のモ...
-
特定の名前のオートシェイプの...
-
vbaのエラー対応(実行時エラー...
-
iPhoneのニューラルエンジンっ...
-
マクロで、次のコードへ行く前...
-
ExcelのVBAで、選択したファイ...
-
どうやってもFor文を抜けてしま...
-
Excel VBA セルの名前があるか...
-
Functionで戻り値を複数返す方法
-
特定のファイルを他のプロセス...
-
シグナル 6(SIGABRT)とは?
-
【VBA】エラー処理で別プロシー...
-
エクセル VBAで複数セル選択時...
-
どう増強すべきか
-
Word VBA。各マクロの間に待ち...
-
シェルスクリプトでファイル内...
-
VBA 複数の行を高速で削除する...
-
【Vb.net】プリンタジョブの取得
おすすめ情報