こんにちは。
ユーザーフォームについて質問させて下さい。
ネットで探したユーザーフォームで作成するタイマーをシート上に表示させています。
https://ateitexe.com/count-down-timer/
ただ、このユーザーフォームを表示している間は検索&置換機能が使えなくて困っています。
セルの入力などはvbModelessで解決出来たのですが、他に方法はないでしょうか?
No.8
- 回答日時:
>アドバイスありがとうございます。
>変えてみたんですが、やはりチカチカしてしまいす。
No6です。
UserForm1の中にテキストボックスがありませんか。
テキストボックスがあると、チカチカします。テキストボックスを全て削除してください。
できれば、UserForm1内のコントロールはLabel1だけにしてください。
何度もアドバイスありがとうございます。
テキストをラベルにして1つにしたり、screenupdatingなどで画面を停止させようとしていますが、やはりチカチカしてしまいます...(´・ω・)
No.7
- 回答日時:
とりあえずコード掲載にチャレンジしてみます。
☆ 標準モジュール Module1 へ
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" ( _
ByVal lpszName As String, _
ByVal hModule As Long, _
ByVal dwFlags As Long) As Long
Public Const Day_デフォ時間① As Date = #12:03:00 AM# ' 3分
Public Const Day_デフォ時間② As Date = #12:05:00 AM# ' 5分
Public Const Day_デフォ時間③ As Date = #1:00:00 AM# ' 1時間
Public Const Str_アラーム音① As String = "Alarm.wav" ' アラーム①用のファイル
Public Const Str_アラーム音② As String = "Alarm.wav" ' アラーム②用のファイル
Public Const Str_アラーム音③ As String = "Alarm.wav" ' アラーム③用のファイル
Public Boo_カウント中 As Boolean
Public Day_セット時刻① As Date
Public Day_セット時刻② As Date
Public Day_セット時刻③ As Date
Public Sub 音再生(ファイル名 As String)
Call PlaySound(ThisWorkbook.Path & "\" & ファイル名, 0, 1)
End Sub
Sub 起動()
UserForm1.Show vbModeless
End Sub
Sub カウント(Optional ダミー As Byte)
'※「Optional ダミー As Byte」はマクロリストにこの「カウント」を表示させない為です。
If Boo_カウント中 Then
UserForm1.TextBox0.Value = Format(Now, "yyyy/mm/dd hh:nn:ss")
Call Application.OnTime(DateAdd("s", 1, Now()), "カウント")
End If
End Sub
☆ ThisWorkbook へ
Private Sub Workbook_Open()
Call 起動
End Sub
☆ UserForm1 へ
Private Sub CommandButton1_Click()
Dim Var_時 As Variant
Dim Lng_位置 As Long
If Me.CommandButton1.Caption = "Start" Then
Me.TextBox1.Enabled = False
Day_セット時刻① = Now
Var_時 = Split(Me.TextBox1.Value, ":")
If UBound(Var_時) >= 0 Then
If IsNumeric(Var_時(0)) Then Day_セット時刻① = DateAdd("h", Var_時(0), Day_セット時刻①)
End If
If UBound(Var_時) >= 1 Then
If IsNumeric(Var_時(1)) Then Day_セット時刻① = DateAdd("n", Var_時(1), Day_セット時刻①)
End If
If UBound(Var_時) >= 2 Then
If IsNumeric(Var_時(2)) Then Day_セット時刻① = DateAdd("s", Var_時(2), Day_セット時刻①)
End If
Me.CommandButton1.Caption = "Stop"
Me.CommandButton10.Caption = "P"
Else
Me.TextBox1.Enabled = True
Me.TextBox1.Value = WorksheetFunction.Text(Day_デフォ時間①, "[h]:mm:ss")
Me.CommandButton1.Caption = "Start"
Me.CommandButton10.Caption = "C"
With Me.TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
End Sub
Private Sub CommandButton10_Click()
If Me.CommandButton10.Caption = "C" Then
Me.TextBox1.Value = WorksheetFunction.Text(Day_デフォ時間①, "[h]:mm:ss")
Else
Me.TextBox1.Enabled = True
Me.CommandButton1.Caption = "Start"
Me.CommandButton10.Caption = "C"
End If
End Sub
Private Sub CommandButton2_Click()
' 省略「Private Sub CommandButton1_Click()」を参考に
End Sub
Private Sub CommandButton20_Click()
' 省略「Private Sub CommandButton10_Click()」を参考に
End Sub
Private Sub CommandButton3_Click()
' 省略「Private Sub CommandButton1_Click()」を参考に
End Sub
Private Sub CommandButton30_Click()
' 省略「Private Sub CommandButton10_Click()」を参考に
End Sub
Private Sub TextBox0_Change()
If Me.CommandButton1.Caption = "Stop" Then
If Day_セット時刻① > Now Then
Me.TextBox1.Value = WorksheetFunction.Text(Day_セット時刻① - Now, "[h]:mm:ss")
Else
Call 音再生(Str_アラーム音①)
Me.TextBox1.Enabled = True
Me.TextBox1.Value = WorksheetFunction.Text(Day_デフォ時間①, "[h]:mm:ss")
Me.CommandButton1.Caption = "Start"
Me.CommandButton10.Caption = "C"
End If
End If
If Me.CommandButton2.Caption = "Stop" Then
' 省略「If Me.CommandButton1.Caption = "Stop" Then」を参考に
End If
If Me.CommandButton3.Caption = "Stop" Then
' 省略「If Me.CommandButton1.Caption = "Stop" Then」を参考に
End If
End Sub
Private Sub UserForm_Activate()
With Me.TextBox1
.SetFocus
.SelStart = 0
.SelLength = Len(.Text)
End With
End Sub
Private Sub UserForm_Initialize()
Me.TextBox1.Value = WorksheetFunction.Text(Day_デフォ時間①, "[h]:mm:ss")
Me.TextBox2.Value = WorksheetFunction.Text(Day_デフォ時間②, "[h]:mm:ss")
Me.TextBox3.Value = WorksheetFunction.Text(Day_デフォ時間③, "[h]:mm:ss")
Boo_カウント中 = True
Call カウント
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Boo_カウント中 = False
End Sub
No.5
- 回答日時:
No.4 へのお礼について
実はマクロを無効にされても、コードを消されるわけではありません。ご自分でマクロを作成した時と同じように処理して保存して一度閉じると、次回使えるようになる場合があります。特にデジタル署名を使っている場合はご自分で署名しなおすと使える事が多いです。
No.4
- 回答日時:
No.3 の追補
手動動作ではなくプログラムからのカウントダウンの開始方法の例
(2分30秒のカウントダウンを2番目のカウンタを使って開始する場合)
Sub Sample()
UserForm1.TextBox2.Enabled = False
Day_セット時刻② = Now + #12:02:30 AM#
UserForm1.CommandButton2.Caption = "Stop"
UserForm1.CommandButton20.Caption = "P"
End Sub
なお「#12:02:30 AM#」は「#00:02:30#」と時間を指定しても VBE が勝手にアメリカ形式(?)に直してしまうものです。
また別のカウンタを使用する場合は下図の赤枠で囲んだところを修正して下さい。
アドバイスありがとうございます。
セキュリティの関係上、ダウンロードしたところマクロを無効にします、と表示されてしまいました(泣)
No.3
- 回答日時:
No.2 の補足(使い方などはダウンロードファイルに同梱されている「Manual.pdf」を見て下さい)
--------------------------------------------------------------------------------------
Public Boo_カウント中 As Boolean
Sub カウント(Optional ダミー As Byte)
If Boo_カウント中 Then
UserForm1.TextBox0.Value = Format(Now, "yyyy/mm/dd hh:nn:ss")
Call Application.OnTime(DateAdd("s", 1, Now()), "カウント")
End If
End Sub
--------------------------------------------------------------------------------------
上記はコードの一部です。
「Application.OnTime」メゾットを使って「UserForm1.TextBox0」を毎秒書き換えています。
なぜラベルで無くテキストボックスに書き込んでいるかというと、ラベルには「Change」イベントが無いためです。実際のカウントダウンなどはこのイベントを使うので「Application.OnTime」メゾットへの影響がほとんどなくなります。
基本では時間になると音を鳴らしますが「Call 音再生(Str_アラーム音①)」などを変更すれば別の動作も可能です。
--------------------------------------------------------------------------------------
☆ 使用方法
・②に時間をセットします。④の「C」ボタンを押すとデフォルト時間がセットされます。
・③の「Start」ボタンを押すと、「Start」ボタンが「Stop」に④の「C」ボタンが「P」にそれぞれ変わり②のカウントダウンが始まります。
・カウントダウン中に③の「Stop」ボタンを押すと、②にデフォルト時間がセットされ、「Stop」ボタンが「Start」に④の「P」ボタンが「C」にそれぞれ変わりカウントダウンが止まります。
・カウントダウン中に④の「P」ボタンを押すと、③の「Stop」ボタンが「Start」に、「P」ボタンが「C」にそれぞれ変わりカウントダウンが止まります。
・②が「0:00:00」になると、アラームが鳴り、②にデフォルト時間がセットされ、③の「Stop」ボタンが「Start」に、④の「P」ボタンが「C」にそれぞれ変わりカウントダウンが止まります。
--------------------------------------------------------------------------------------
☆ 時間セット例
・ 「:」を付けず数字のみセットした場合 ⇒ 時間として認識されます。
【例】 「12」と入力されていた場合「12:00:00」と入力されたことになります。
・ 「:」を1つのみ使ってセットした場合 ⇒ 時間と分として認識されます。
【例】 「12:34」と入力されていた場合「12:34:00」と入力されたことになります。
・ 「:」を2つ使ってセットした場合 ⇒ 時間と分と秒として認識されます。
【例】 「12:34:56」と入力されていた場合「12:34:56」と入力されたことになります。
・ 「:」を3つ以上使ってセットした場合 ⇒ 時間と分と秒として認識され3つ目以降は無視されます。
【例】 「12:34:56:78」と入力されていた場合「12:34:56」と入力されたことになります。
・ 通常では使われない大きな数字が入力されていた場合 ⇒ それぞれの単位として認識されます。
【例】 「45:67:89」と入力されていた場合「46:08:29」と入力されたことになります。
・ 分のみセットしたい時は 「:」で囲んで分を入力する。
【例】 「:1:」と入力されていた場合「0:01:00」と入力されたことになります。
・ 秒のみセットしたい時は 「::」の後に秒を入力する。
【例】 「::12」と入力されていた場合「0:00:12」と入力されたことになります。
No.2
- 回答日時:
私の作ったものならそんなことはないですよ。
パスワードなどかけてないので研究してみて下さい
以下のページの左側の目次の「カウントダウンタイマー」をクリックしてダウンロードページを開いて下さい。
URL「 https://luckshp.web.fc2.com/ 」
No.1
- 回答日時:
Sheet1のB2に分、D2に秒を指定したタイマーです。
UserForm1.TextBox1に残り時間を表示します。
ポイントはApplication.OnTimeを使用する点です。
標準モジュールに登録します。
Option Explicit
Dim t1_ss As Long
Dim t1_s As Variant
Dim t1_e As Variant
Public Sub タイマー()
Dim t_nn As Long
Dim t_ss As Long
Dim err As Boolean
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
err = False
t_nn = ws.Range("B2").Value
t_ss = ws.Range("D2").Value
If t_nn < 0 Or t_nn > 59 Or t_ss < 0 Or t_ss > 59 Then err = True
t1_ss = t_nn * 60 + t_ss
If t1_ss = 0 Then err = True
If err = True Then
MsgBox ("タイマー不正")
Exit Sub
End If
UserForm1.Show vbModeless
UserForm1.Repaint
t1_s = Now
Call next_timer
End Sub
Private Sub next_timer()
Dim exec_time As Double
Dim diff As Long
t1_e = Now
diff = t1_ss - DateDiff("s", t1_s, t1_e)
UserForm1.TextBox1 = sec2mmss(diff)
If diff <= 0 Then
MsgBox ("Timer終了")
Exit Sub
End If
exec_time = Now() + TimeSerial(0, 0, 1)
Call Application.OnTime(exec_time, "next_timer")
End Sub
Private Function sec2mmss(ByVal cnt_d As Long) As String
Dim nn As Long
Dim ss As Long
Dim amari As Long
nn = cnt_d \ 60
ss = cnt_d Mod 60
sec2mmss = Format(nn, "00") & ":" & Format(ss, "00")
End Function
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル2016上でマウスをレー...
-
マウスポインタが「車両通行止...
-
マウス操作について。手のポイ...
-
カーソルが消えて見えません
-
カーソルがクリックしたところ...
-
システム設定のマウスカーソル...
-
踏むとはどういう意味ですか
-
◇パワーポイントスライドショー...
-
ctrlボタンを押すと丸い輪が出...
-
しょっちゅうマウスポインタが...
-
マウスポインタが変になったん...
-
マウスポインタについて
-
マウスのホットポイントがずれ...
-
フォルダフレームがポインタに...
-
カーソルに黒い四角?の枠?が
-
文字入力でポインタが消える
-
ロジクールのマウスのサイドボ...
-
マウスの右クリックコピーが突...
-
エクセルで、変な矢印がでて、...
-
ワイヤレスマウスの電池が著し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル2016上でマウスをレー...
-
マウスポインタが「車両通行止...
-
マウス操作について。手のポイ...
-
マウスポインタが変になったん...
-
踏むとはどういう意味ですか
-
ctrlボタンを押すと丸い輪が出...
-
カーソルが消えて見えません
-
office上でマウスのカーソルが...
-
カーソルに黒い四角?の枠?が
-
システム設定のマウスカーソル...
-
マウスのホットポイントがずれ...
-
フォルダフレームがポインタに...
-
しょっちゅうマウスポインタが...
-
カーソルがクリックしたところ...
-
タッチパットのポインタ移動が...
-
マウスのポインタが文字入力時...
-
ポインタ(カーソル)が勝手に...
-
同じワイヤレスマウスを2台使...
-
◇パワーポイントスライドショー...
-
かわいいポインタ。
おすすめ情報