• ベストアンサー

VBE ユーザーフォーム

下記3点につき、ご教授御願い致します。 (1)テキストボックスに日付を入力。 入力する値は6桁の数字。 テキストボックス入力→050902 テキストボックス表示→05/09/02 としたい。 Private Sub TextBox16_Exit(ByVal Cancel As MSForms.ReturnBoolean) TextBox1.Text = Left(TextBox1.Text, 2) & "/" & Mid(TextBox1.Text, 3, 2) _ & "/" & Right(TextBox1.Text, 2) End Sub とすると、見かけ上は「05/09/02」となってくれるのですが、そうするとテキストボックスに何も表示しないでEnterを押すと(入力後に消した場合等も)「//」が出てしまいます。 入力する日付は本日とは限りません。 表示は「2005/09/02」ではなく「05/09/02」としたい。 (2)テキストボックスに今日の日付を自動的に表示させたい。 (手入力で変更できるようにする為、テキストボックスを使用) Private Sub UserForm_initialize() TextBox2.Text = Date End Sub とすると「2005/09/02」となり、「05/09/02」としたい。 (3)テキストボックス同士の計算 TextBox3とTextBox4に数字を入力し、その積をTextbox5に表示させたい。 TextBox5.text = Textbox3.text * TextBox4.text とすると 「型が一致しません」と出てしまう。 (「text」を「value」に変えても同じ) できましたら、イベント名もお教え下さい。 ---------------------------------------- よろしく御願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 (1) コードで、Exit を使ったイベントですが、ちょっとタイミングが分りません。 私でしたら、TextBox に入力して、Enter を押したら、TextBox1に送り込みます。 サンプル: Private Sub TextBox16_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)   If KeyCode = 13 Then    If Len(TextBox2.Text) = 6 And IsNumeric(TextBox2.Text) Then      TextBox1.Text = Format$(TextBox16.Value, "00/00/00")    End If   End If End Sub ただし、日付かどうかは、これは、エラー・チェックをしていません。その必要性がある場合は、その数字を年/月/日を分けて、DateSerialで、チェックをするしかないと思います。そのまま、DateValue に入れても、はっきりしません。 (2) Private Sub UserForm_Initialize()  TextBox2.Text = Format$(Date, "yy/mm/dd") End Sub (3) >TextBox5.text = Textbox3.text * TextBox4.text とすると 「型が一致しません」と出てしまう。 TextBox5.Text = CDbl(TextBox3.Text) * CDbl(TextBox4.Text) >イベント名もお教え下さい。 ? TextBox4に入れた後に結果を出すか、そうでなければ、コマンド・ボタンですね。

fk_sap
質問者

お礼

Wendy02さん、いつもありがとうございます! Wendy02さんに教えて頂いたことで、すべて解決しました。 お礼がとても遅くなってしまい 本当に本当に申し訳ありませんでした!

その他の回答 (2)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>Enterを押すと(入力後に消した場合等も)「//」が出てしまいます。 日付として期待された入力があるかどうかをチェックして、 チェックが通らない場合、エラー表示するか TextBox1.Text="" とかすればいいと思います。

fk_sap
質問者

お礼

なるほど、そう言う方法もあるんですねー。 私なんかでは思いもつかないことを色々教えて頂けて とても勉強になります。 ご親切にありがとうございました。 そして、お礼がこんなにも遅くなってしまい、本当に申し訳ありませんでした。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

1と2の件ですが、テキストボックスのプロパティ設定で対応してはまずいですか? 1)フォームをデザインビューで開く 2)メニューの「表示(V)」→「プロパティ(P)」をクリックしてプロパティシートを表示 3)日付を入力するテキストボックスを選択 4)「書式」タブの「書式」に「yy/mm/dd」を設定 5)「データ」タブをの「定型入力」に「99\/99\/99;0;_」を設定  (カーソルを合わせたときにプロパティシート右端に表示される「...」(ビルダ)をクリックして、お好みの設定を探すのも可) 3のイベント名は、数値入力直後に行うのであれば「更新後処理(AfterUpdate)」になります。 No.1の方が言われるようにコマンドボタンで対処するのであれば、「クリック時(OnClick)」です。 また、「CDbl」で倍精度浮動小数点型に変換する方法もありますが、「書式」タブの「書式」で「数値」を設定すれば、そのままの式でもいけるのではないかと思います。 (もしテーブルに連結したフィールドだった場合は、テーブル側の設定を変えた方がいいでしょう)

fk_sap
質問者

お礼

ご回答ありがとうございました。 メニューの「表示(V)」にプロパティシートと言うのがなく (Windows2000/EXCEL2002) プロパティボックスにも「書式タブ」と言うのがないので 設定することができませんでした。 でも、他の方法でなんとか解決することができました。 ご親切にありがとうございました。 お礼がこんなに遅くなってしまい、本当に申し訳ありませんでした。

関連するQ&A