- ベストアンサー
VBAユーザーフォームで
エクセルVBAでユーザーフォームより、テキストボックスで入力させたものをセルに表示させようとしています。 テキストボックスは1と2があり、テキストボックス1で入力した値の最初の5文字+固定値をテキストボックス2に自動で入力(表示)したいのですがなかなかうまくいきません。(自動入力後、手動で一部修正します。) VBAをはじめたばかりの初心者ですが、どうぞよろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
まあ、この手の質問は、質問文を書き上げた段階で答えが出るもんです。 つまり、<どこで躓いており、どういうハードルを越えたら良いのか?>という課題を設定できるか否。 そういう意味では、<ここまで書いたが、ここが判らない>という質問を心がけられたがいいですよ。 チト、丸投げ臭いですね。 説教は、これ位にしておいて・・・。 Option Explicit Const conFIXEDSTRING = "FIXEDSTRING" Private Sub TextBox1_Change() If Len(Me.TextBox1) >= 5 Then Me.TextBox2 = Left(Me.TextBox1, 5) & conFIXEDSTRING Me.TextBox2.SetFocus End If End Sub という書き方が一つ。 この場合、Me.TextBox1での入力で{Enter}を押さなくとも TextBox2 を更新しフォーカスも移動します。 Option Explicit Const conFIXEDSTRING = "FIXEDSTRING" Private Sub TextBox1_AfterUpdate() If Len(Me.TextBox1) >= 5 Then Me.TextBox2 = Left(Me.TextBox1, 5) & conFIXEDSTRING End If End Sub という書き方が二つ目。 この場合、Me.TextBox1での入力で{Enter}を押すと TextBox2 を更新しフォーカスも移動します。 If Len(Me.TextBox1 & "") >= 5 Then If Len(Me.TextBox1) >= 5 Then なお、エクセルの場合は、このような空値対策は必要ないようですね。 ところで、良く、インストール時にパスワード等を入力すると[次]が使用可になります。 あれは、前者の書き方です。 どちらを選択するのかは、まあ、好みの問題でしょう。 いずれにしろ、固定値は<記号定数>で定義した方がいいです。 コード中に埋め込むのは<マジックナンバーの埋め込み>という拙いやり方です。
お礼
Husky2007さん、とても速い回答ありがとうございます! また、質問の仕方等のアドバイスもありがとうございます。 丸投げしたつもりではなかったのですが、まったく方法がわからなかったので、同じことでした。今後は気をつけます。 さて、内容の方ですが、まず頂いた回答の理解にかなり時間がかかってしまいました。。。 If Len(Me.TextBox1) >= 5 Then の使い方がすごく勉強になりました。 Me.という引き出しが自分にはなく、検索等してもたどり着けるわけでもなく、安易に質問してしまったかもしれません。 あと、SetFocusというのも実際プログラムを起動してみて、感動してしまいました。 ありがとうございました。