• ベストアンサー

エクセルVBA

ユーザーフォームのテキストボックスに現在時間を表示し、表示を時計のように現在時刻を表示し続ける方法を教えてください。 以下は現在のコマンドです。 Private Sub txtTime_Change() End Sub Private Sub UserForm_Initialize() UserForm1.txtTime.Value = Time End Sub よろしくお願いします。

  • homma
  • お礼率84% (744/884)

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

エクセルの関係で、時刻を表示する場所は(タスクバー場などを除く) (1)シートの、決めたセルに表示 (2)シートの上に貼り付けたオブジェクト(テキストボックス、ラベルなど) に表示 (3)ユーザーフォームの上に張り付けたテキストボックス、ラベルなどに表示 (4)ユーザーフォームの地の部分に標示。これはできない?ようだ。Captionを使ってよいなら表示できる。 などが考えられる。 (3)を希望するらしいが、日付時刻だけなら、初心者なら、単純にすべきだ。 Googleで「エクセル VBA 時計を表示」などで照会すれば、記事がでてくる。これさえやってないね。 その中に https://www.moug.net/tech/exvba/0130009.html  簡易時計 がある。 Sub Sample() Dim myTime As Date myTime = CDate(Format(Now() + TimeValue("00:01:00"), "hh:mm:00")) Range("A1").Value = Now() Columns("A").AutoFit Application.OnTime myTime, "Sample" End Sub ーー ユーザーフォームの上のテキストボックスなら、 Sub Sample1() Dim myTime As Date myTime = CDate(Format(Now() + TimeValue("00:01:00"), "hh:mm:00")) UserForm1.TextBox1.Text = Now() UserForm1.TextBox1 = Now() Columns("A").AutoFit Application.OnTime myTime, "Sample1" UserForm1.Caption = Now() UserForm1.Show vbModeless End Sub 秒単位の実行指定なら、それほど問題はないが、分、時単位になると、スタート(当プログラム起動)時刻によっては、パソコン表示と、分時の表示が食い違う表示になる可能性があるかも。 理系の使い方など、用途によっては、もっと別の仕組みの利用(APIなど)が必要だろう。 UserFormやシートとユーザーフォームの画面関係の表示など、小生に詳しく判らないことが多々あるが、とりあえず上げておきます。 シートの上にテキストボックスをはりつける例では、WEBに下記が見つかった。ただし一部修正している。 確認利用後、Msgboxは削除のこと。 Dim S As Boolean Sub 開始() S = True 時計起動 End Sub Sub 時計起動() If S = False Then End MsgBox TypeName(Worksheets("Sheet1").DrawingObjects(1)) 'TextBox Worksheets("Sheet1").DrawingObjects(1).Text = Format(Now, "hh:mm:ss") Application.OnTime Now + TimeValue("00:00:01"), "時計起動" End Sub Sub 時計停止() S = False End Sub

homma
質問者

お礼

回答ありがとうございました。 おれいの返信が遅れましたことをお詫びします。 VBA初心者ですが頑張ります。 今後ともよろしくお願いいたします。

関連するQ&A

  • VBA初心者です。

    VBA初心者です。 ユーザーフォームにテキストボックスとコンボボックスを1つずつ作り、それらを Private Sub ComboBox1_Change()    TextBox1.Value = ComboBox1.Value End Sub というふうに繋いでるとき、テキストボックスにフォーカスをあてさせないようするため、 Private Sub UserForm_Initialize()    TextBox1.Enabled = False End Sub このようにしました。ここまでは問題ありません。質問したいことは、このときテキストボックスに表示させる文字が淡色になるのを防ぐ方法です。    TextBox1.Locked = True これを上に付け加えればうまくいきそうなのですが、うまくいきませんでした…。どなたか解決方法を教えて下さい。

  • エクセルVBA テキストボックス

    いつもお世話になっております。 エクセルでVBAを使いユーザーフォームのテキストボックスで 文章入力をしようと思っているのですが、少しトラブルがありましたのでお教え願います。 エクセルシートの横がa~k、縦を9~34までのシートを結合して その中にテキストボックスで入力した文章を入れるように作っています。 MultiLineとEnterKeyBehaviorをTrueにして Private Sub CommandButton1_Click() Unload Me End Sub Private Sub TextBox1_Change() Sheets("sheet1").Range("a9") = UserForm1.TextBox1 End Sub Private Sub UserForm_Initialize() TextBox1.Value = Range("a9").Value End Sub Private Sub UserForm_Activate() With Me .Left = Application.Left .Top = Application.Top .Left = .Left + 350 .Top = .Top + 80 End With End Sub という状態になっているのですが、文章を入力して16行目で改行するとシートの方で「#VALUE!」と出てきてしまうので一旦ユーザーフォームを閉じてもう一度フォームを立ち上げると 「実行時エラー’-2147352571(80020005) Valueプロパティが設定できません。種類が一致しません。」 と出てきます。 デバッグすると  Private Sub CommandButton1_Click() → UserForm1.Show  End Sub と出てきます。 なにがおかしいのでしょうか? 今回初めてVBAを作っているので初歩的な間違いかもしれませんがよろしくお願いします

  • エクセルVBA

    こんばんは。 いつも拝見しています。初歩的でしょうが私ではまだ 解決できません。ご指導いただきたく思います。 ユーザーフォームにテキストボックスとスピンボタンを設置し日付を 変更するようにしています。ユーザーフォームを開くと今日の日付に 変わってしまいます。C2とリンクしテキストボックスに先に値を 取得するにはどうしたらよいでしょうか。お願します。 Private Sub spnDate_SpinDown() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", -1, dtDate), "yyyy/mm") End Sub Private Sub spnDate_SpinUp() Dim dtDate As Date dtDate = UserForm1.txtDate.Value UserForm1.txtDate.Value = Format(DateAdd("m", 1, dtDate), "yyyy/mm") End Sub Private Sub txtDate_Change() Range("c2") = txtDate.Value End Sub

  • エクセルVBA 時刻シリアルデータの変換に関して

    エクセルVBA初心者です。 ユーザーフォーム内に作成したテキストボックスの表示についてお伺いしたいのですが、 例えばA1セルに、”7:00”と書き込みますと、そのまま”7:00”と表示されますが、 ユーザーフォームとその中にテキストボックスを作成し、以下のようなコードを書いて 立ち上げると、テキストボックス内の表示は”7:00”ではなくシリアル値の”0.2916666・・・”と 表示されてしまいます。 これをなんとか時刻で表示させる方法はありませんでしょうか? Private Sub UserForm_Initialize() TextBox1.Value = Cells(1, 1) End Sub ご教示いただけたら幸いです。

  • エクセルVBA「スピンボタン」について

    エクセルVBA「スピンボタン」について スピンボタンとテキストボックスを組み合わせて Private Sub SpinButton1_Change() Me.TextBox1.Value = Me.SpinButton1.Value End Sub Private Sub UserForm_Initialize() With Me.SpinButton1 .Min = 1 .Value = .Min End With Me.TextBox1.Value = Me.SpinButton1.Min End Sub というコードを書きました。 「1、2、3、・・・10、11、・・・」という数の増加を「01、02、03・・・10、11・・・」という風にしたいのですがどのようにコーディングすればよいのでしょうか?お願いします。.

  • エクセルVBA コンボボックス

    今データ入力用のフォームmainがあります。 そこで複数のデータを入力していくのですが、そこでわからなくなりました。 入力用コンボボックスがひとつだけのときは Private Sub userform_Initialize() Dim 配列(2) 配列(0) = "データ1" 配列(1) = "データ2" 配列(2) = "データ3" 入力用コンボ.List = 配列 End Sub Private Sub 入力用コンボ_Change() MsgBox 入力用コンボ.ListIndex End Sub としていたのですが、複数になった場合の理屈を含めわかりません。 一つの入力用フォームにコンボボックスが複数あった場合はどうすればよいのですか?

  • エクセルVBA「型が一致しません。」

    エクセルVBA「型が一致しません。」 ユーザーフォームの実行時に上記エラーが出ます。おそらく関係ありそうなコードが以下です。 ちなみにTextBoxはスピンボタンと併用して使用しています(そちらのコーディングには問題なし) Private Sub TextBox1_Change() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub TextBox2_Change() Me.Textbox3.Value = Me.TextBox1.Value * Me.TextBox2.Value End Sub Private Sub UserForm_Initialize() Me.TextBox3.Value = Me.TextBox1.Value * Me.TextBox2.Value 立て続けに質問してしまい申し訳ないですが何せ急いでいるもので・・・お願い致します

  • EXCEL VBA コードをスマートに

    EXCEL VBAのフォームで、 テキストボックスの値をあらかじめTextBox1に入力しておくコードを 書いてみました。 Private Sub UserForm_Initialize() TextBox1.Value = Cells(4, 1) & Cells(4, 3) & Cells(4, 5) & Cells(4, 7) & Cells(6, 1) & Cells(6, 3) & Cells(6, 5) & Cells(6, 7)Cells(8, 1) & Cells(8, 3) & Cells(8, 5) & Cells(8, 7).Value End Sub 実際はもっと長いです・・・ どうしたら、スマートに記述できますか? お知恵をお貸しください!!!

  • VBA ユーザーフォーム

    エクセルVBAのユーザーフォームのInitializeでnに値を代入し Private Sub UserForm_Initialize() Dim n As Long n = 19 ・・・・・ End Sub 同じユーザーフォームのボタンコマンドが押されたら Private Sub CommandButton2_Click() MsgBox n Worksheets("AAA").Cells(n, 3).Value = Me.テキストボックスの値.Text n = n + 1 End Sub nの値を用いてセルにテキストボックスの値を入れるというプログラムです。 値をいれたら、nをひとつ増やして次に備えるようにしたいのですが。 そもそも最初にnの値が受け渡しできません。 ボタンコマンドの最初の行でメッセージボックスにnの値を表示して確認しても何も数字が表示されません。 nの値の受け渡しを方法を教えてください。

  • コンボボックスから検索するVBA(エクセル)

    sheet1にメニュー画面 sheet2に一覧表を作成しました。 (1)sheet1でユーザーフォームを起動させる。 (2)ユーザーフォームにはコンボボックスを1つ、コマンドボタンを2個配置しました  (3)コンボボックスのプルダウンメニューはsheet2の一覧表より取得しました (4)sheet2の一覧表は今後データが増えていきます(データは4行目以降) という条件で以下のコードを作成しました。 (1)と(2)のコマンドボタンは正常に作動しています。 コンボボックスのコードのみ書いています。 Private Sub UserForm_Initialize() Dim i As Long With Worksheets("sheet2") For i = 4 To .Cells(Rows.Count, 3).End(xlUp).Row ComboBox1.AddItem Cells(i, 3).Value Next i End With End Sub このときプルダウンメニューを押しても空欄が表示されてしまいます。 できない理由が分かりません。よろしくお願いします。 また、Private Sub ComboBox1_Change()とは何が違うのでしょうか? 最近 VBAを始めた初心者です。よろしくお願いします。