プロが教える店舗&オフィスのセキュリティ対策術

エクセルでユーザーフォームを作成しています。
時間を入力するTextBox1を作ったのですが、
セル上の表示は11:30となっているのですが、
ユーザーフォームではシリアル値の表示をします。
Fomatの設定で11:30と表示するようにしたのですが
修正が出来ません。
この値は常に変更となるので修正出来るようにしたいのですが
TextBoxプロパティーを色々見ているのですが、
セルの書式設定みたいなものは無さそうなのですが、
方法があれば、教えていただきたく思います。
宜しくお願いいたします。

質問者からの補足コメント

  • どう思う?

    早速の回答有り難うございます
    最初から書いていたら良かったのですが、TextBox1は下に500行あるのです。
    次に移動する時は CommandButton1_Click()したら最終行を調べてセルの下へ
    500行まで下がっていくのです。ControlSourceでセルの値を入力したらそのしたの
    セルからまたシリアル値が帰ってくるのですが、、、たびたびすみません
    ちなみに Win10 Excel2013です

      補足日時:2017/09/11 17:42
  • つらい・・・

    WindFallerさま
    何度も書き込みいただいて有り難うございます。このユーザーフォームはやめた前任者が作りかけていた物を少しのマクロしかわからない私が引き継ぐ事になったので、これを入力するのは女性社員で(Excelの知識がない)わかりやすく入力出来るようにしてほしいと言うことで前任者が作っていた物を私が引き継いだのです。知識が無く説明不足で申し訳ありません。まずフォームを立ち上げ任意のセル(その行ならどこでも)をダブルクリックしてセルのデーターを読み込ませてから入力する様になっています。新規の場合は、何も読み込まれていないフォームから新規入力のコマンドボタン1で、修正する時はセルのダブルクリックでセルの値を読み込み編集用のコマンドボタン2で、セルに書き込む様になっています。その読み込んだ時のセルの値をフォームでHH:MMで表示・修正したいのです。何とかお知恵をお貸し下さいすみません。

      補足日時:2017/09/12 02:40
  • うれしい

    貴重なお時間を頂き有り難うございました。あれから、まともの見なかった本や、他の方の内容をネットで調べ、何とか作ることが出来ました。「Activecell.Text をインポートして、修正したものを、そのまま貼り付ければ良いだけのことです」これがヒントになり助かりました色々ご迷惑をおかけして本当にすみませんでした。これから、もっともっと勉強していきたいなぁと思いました。有り難うございました。<m(__)m>

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/09/14 02:12

A 回答 (4件)

テキストボックスとセルとを、ControlSource でつなげているということでしょうか。


もし、そうなら、ControlSource を直接つなげては、無理だと思います。
ひとつ、隠しコントロールを置いておいて、そこからを元のテキストボックスに出すようにしないといけません。

例えば、このようになります。
TextBox2 を隠しコントロールとして、Visible =False にしておきます。
TextBox2 ControlSource は、セルのアドレス

'//
Private Sub TextBox2_Change()
If IsNumeric(TextBox2.Value) Then
 '取得したデータを、TextBox1に送る。
 TextBox1.Text = Format$(TextBox2.Value, "HH:MM")
End If
End Sub
'UserForm 起動時(起動時には、TextBox2のChangeイベントが利かない)
Private Sub UserForm_Initialize()
If IsNumeric(TextBox2.Value) Then
 TextBox1.Text = Format$(TextBox2.Value, "HH:MM")
End If
End Sub
    • good
    • 0

テキストボックスのコントロールソースでリンクするのではなく、イベントプロシージャでそのセルに書き込んではどうでしょうか。



例えば、テキストボックスのChangeイベントで書き込む場合は以下のようになります。

Private Sub TextBox1_Change()

   On Error GoTo timeError
   timestring = TimeValue(TextBox1.Value)
   On Error GoTo 0
   Worksheets("Sheet1").Range("A1").Value = timestring

timeError:

End Sub

実際にはユーザフォームにOKボタンなどを追加して、そのClickイベントで、テキストボックスに入力された文字列が時間に変換できるかチェックしてから書き込むというようにするほうがいいでしょうね。
    • good
    • 0
この回答へのお礼

アドバイス・貴重な時間を頂き、本当に有り難うございます。

お礼日時:2017/09/13 22:03

#1の回答者です。


申し訳ないのですが、よく理解できていません。

ただ、#1の回答は、
>>テキストボックスとセルとを、ControlSource でつなげているということでしょうか。
>>もし、そうなら、ControlSource を直接つなげては、無理だと思います。

TextBox1 つまり、表示する側のControlSource は、なし(空白)にしないと、時間値で表示しません。

TextBox2 (隠しコントロール Visible=False)側で、シリアル値(数字)を取得して、それを、TextBox1 側に表示させるという仕組みです。

ただし、これは表示だけで、一方通行です。入力が必要な場合は、別のマクロが必要です。TextBox2 は、ControlSource は、繋いだままです。

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> 13 Then Exit Sub
 TextBox2.Text = TextBox1.Text
End Sub

また、
CommandButton1_Click()
おそらく、ここにControlSource を書き換えるプログラムがあるはずですから、それを書き換える必要もあるかもしれません。
    • good
    • 0

また、違う内容が出てきてしまっています。



実際に、私の書いた内容は、どこに行ってしまっているのか、本当に、初歩的な問題なのに、一向に解決する目処が立ちません。そちらのご事情はあるかと思いますが、肝心な話は、堂々巡りしています。

>修正する時はセルのダブルクリックでセルの値を読み込み編集用のコマンドボタン2で、セルに書き込む様になっています。

そのような仕様なら、もはやTextBox のControlSource は不要のようです。ControlSource が、問題をややこしくしているようです。Activecell.Text をインポートして、修正したものを、そのまま貼り付ければ良いだけのことです。凝ったやり方がうまくありません。そもそもUserForm 自体が不要か、使いこなせないのではないかとも考えます。

でも、経験的なことですが、掲示板で、情報の付け足しを繰り返すのでは、特に今回のようなケースでは、とても最後の完成までは行き着くことはありえないと思います。私は、根気よくお話を聞いて差し上げるだけの余裕がありません。

残念ですが、これ以上、細かい内容を後出しで言葉で説明されても、どうしようもありません。もう一度、VBAの基本的なことから勉強されて、それで、はじめから作り直したほうが早いかと思います。

VBAマクロは、コードで成り立っていますから、そのような言葉による説明ではラチが開かないのです。こちらの説明の仕組みも理解を示しているようには思えません。

一応、これで、私のほうからはお終いにさせていただきたく思います。申し訳ありません。
この回答への補足あり
    • good
    • 0
この回答へのお礼

私の知識不足また、質問マナーが悪く、わざわざ時間をさいていただき本当に申し訳ありませんでした。これからは、質問内容を理解して、VBAマクロも勉強していかなければと・・・本当にすみません、全然わからなかったので、安易に質問してしまいました。気分を害してしまい、本当に回答をしていただき有り難うございました。

お礼日時:2017/09/13 21:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A