VB6 テキストボックスの数値をコンボボックスに反映させる方法
- TextBoxのChangeイベントを使って、テキストボックスの数値をコンボボックスに反映させる方法について説明します。
- 具体的には、テキストボックスの数値をコンボボックスのインデックスに変換し、アニメ0、アニメ1、アニメ2などのアイテムをコンボボックスに追加することができます。
- しかし、現在のコードではコンボボックスにアイテムが重複して追加されてしまいます。この問題を解決するためには、アイテムを追加する前に重複しているアイテムを削除する必要があります。また、数値の範囲も正しく設定する必要があります。
- ベストアンサー
VB6 テキストボックスの数値をコンボボックスに反映させるには?
TextBoxのChangeイベントを使って、 テキストボックスの数値をコンボボックスに反映させる (具体的には数値をコンボボックスのindex数にし、それぞれのindexに アニメ+str(i)としたいです。 しかし、後で書くソースは何故か、コンボボックスが アニメ1 アニメ0 アニメ1 アニメ2 アニメ3 … となってしまいます。 これを アニメ0 アニメ1 アニメ2 アニメ3 … としたいです。どうすればいいんでしょうか? Private Sub Text8_Change() Static p As Integer If Text8.Text = "" Then Exit Sub For i = 0 To p If p = 0 Then GoTo b If Form6.Combo1.NewIndex = -1 Then GoTo b Form6.Combo1.RemoveItem (i) Next i b: For i = 0 To Val(Text8.Text) Form6.Combo1.AddItem "アニメ" + str(i) Next i p = Val(Text8.Text) End Sub
- TKOZ
- お礼率38% (8/21)
- Visual Basic
- 回答数2
- ありがとう数2
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
RemoveItem (i) は、どこまで削除したいですか? 全件削除してよいなら、 Form6.Combo1.ListCountで件数拾えるので、 Forループを件数まわしますか。 Private Sub Text8_Change() Static p As Integer Dim nCount as Ineteger MsgBox "処理を開始する時点で、pの値は" & p & "だよ” 'でも、なぜここでIF文? 処理がここで終わりますね If Text8.Text = "" Then Exit Sub MsgBox "処理を進めるよ” MsgBox "削除前の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ" If p <> 0 Then nCount=Form6.Combo1.ListCount For i = nCount To 0 step -1 If Form6.Combo1.NewIndex <> -1 Then Form6.Combo1.RemoveItem (i) END IF Next i END IF MsgBox "削除後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ" p = Val(Text8.Text) For i = 0 To p Form6.Combo1.AddItem "アニメ" + str(i) Next i MsgBox "追加後の時点でコンボの件数は”& Form6.Combo1.ListCount & "だよ" End Sub
その他の回答 (1)
- bin-chan
- ベストアンサー率33% (1403/4213)
試験できる環境でないので、以下のコードで再実行してみて。 Private Sub Text8_Change() Static p As Integer If Text8.Text = "" Then Exit Sub If p <> 0 Then For i = p To 0 step -1 If Form6.Combo1.NewIndex <> -1 Then Form6.Combo1.RemoveItem (i) END IF Next i END IF p = Val(Text8.Text) For i = 0 To p Form6.Combo1.AddItem "アニメ" + str(i) Next i End Sub
補足
bin-chan様、回答ありがとうございます。 しかし、コンボボックスには、 アニメ0 アニメ0 アニメ1 アニメ2 アニメ3 アニメ4 … と表示されてしまいました。 先頭のアニメ0がなくなればいいのですが、上手くいきませんでした。 なお、text8.textのtextのプロパティには、""が入っています。
関連するQ&A
- VB6のコンボボックスのテキストプロパティ
VB6のコンボボックスのテキストプロパティですが、 Combo1.text="test"と入れてもコンボボックスにtestと表示されません。 Form_Loadモジュールに記載するとtestと表示されるのですが、 最初testと表示されていて、コンボボックスの候補を一つ選んで、 今の設定ではその候補は使用できないので、初期状態のtestという表示に戻したいのですが、 testに戻りません。
- 締切済み
- Visual Basic
- vb コンボボックスのイベントについて
こんばんわ。 コンボボックスで、 指定の値をマウス操作でクリックしたときと、 キーボードの上下で、移動後returnを押したときだけ、 MsgBox "処理実行" を実行したいです。 keystateを使ってみたのですが、前の情報が残っているのかうまくいきません。keystateの情報をクリアさせるか、シンプルに上記を動作させる何かよい方法はありますでしょうか。 Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Dim flg1 As Boolean Private Sub form_load() Combo1.AddItem (11) Combo1.AddItem (22) Combo1.AddItem (33) Combo1.AddItem (44) End Sub Private Sub Combo1_Keyup(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then 'return flg1 = True Call Combo1_click End If End Sub Private Sub Combo1_click() If (GetKeyState(&H26) <> 0) Or (GetKeyState(&H28) <> 0) Then ' ↑↓ If flg1 = False Then Exit Sub End If End If MsgBox "処理実行" flg1 = False End Sub
- ベストアンサー
- Visual Basic
- ACCESS コンボボックス 日付入力VBA
win10 office365 access365におきまして フォーム Fを開いて そのなかの非連結テキストが コンボボックスになっており そのコンボボックス名をcombo としますとき そこに規定の文字列 これは そのコンボボックスの選択文字列として あるもので たとえば、あかさ この文字列は コンボボックスを開くと 第1列に表示されます 一番左側です を入れたいとき Sub Sample() DoCmd.OpenForm "F", acNormal Form![F]!combo = "あかさ" end sub フォームFは当然開くのですが 非連結コンボボックス comboは 空白のままです Form![F]!combo = "あかさ" ここの部分を Form![F]!combo.column(0) = "あかさ" または Form![F]!combo.column(1) = "あかさ" としても 同様の結果となります ② もうひとつすみませんが テキストボックス コメントテキストに 本日の日付で 4月17日であれば 0417 と入れたいので Forms![F]![コメントテキスト] = Format(Now, mmdd) としますと 2024/04/17 13:02:59 と出てしまいます できるものなら 全角で 0417 と打ち出したいのですが、、 重ねて 恐縮ですが 御教示宜しくお願い致します
- ベストアンサー
- その他(プログラミング・開発)
- コンボボックスで選択された値の取得
使用しているオブジェクトは Combo1,Text1,Command1です。 General Declarations ---------------------------- Dim Sent() Dim Count_no() ------------------------------------------------- Private Sub Command1_Click() -------------------- Dim i Dim Hyouji For i = 1 To 3 If Combo1.Text = Sent(i) Then Text1.Text = Count_no(i) ******************************* Else Text1.Text = Combo1.Text ******************************* End If Next i End Sub ------------------------------------------------- Private Sub Form_Load() ------------------------- Dim Sentence As String Dim i ReDim Sent(1 To 3) ReDim Count_no(1 To 3) For i = 1 To 3 Sentence = "Sentence" & i Sent(i) = Sentence Count_no(i) = i Combo1.AddItem (Sent(i)) Next i End Sub ------------------------------------------------- 以上のソースを書いています。 もし"Sentence2"が選択・Command1クリックされたらText1には"2"が表示され、 (ここまでは出来ました) "12345"と入力・クリックされたら"12345"と表示されるようにしたいのですが、 配列以外の文字を入力した場合の条件(ソースの***内)を加えた途端 Combo1.TextがText1に表示されてしまいます。 条件の書き方が悪いのでしょうか? ややこしい説明ですみませんが、わかる方、回答お願いします。
- ベストアンサー
- Visual Basic
- テキストボックスの桁数をカウントして、フォーカス移動
Win2000、VB6.0です。 テキストボックスとADOコントロールを使用して、レコードを編集・更新するフォームを作っています。 ただ、簡単に書く為に下の説明文ではDBについては書きません。 Form1に、Text1とText2があるとします。 Tab移動だけではなく、Text1に4桁目まで入力された時点で、Text2へフォーカスが移動するようにしたいと考えています。 Text1のChangeイベントで、 ------------------------------------ Private Sub Text1_Change() If Len(Text1.Text) >= 4 Then Text2.SetFocus End If End Sub ------------------------------------ 以上のように記述しています。 ただ、Form1のロード時に、 ------------------------------------ Private Sub Form_Load() Text1.Text = "1111" End Sub ------------------------------------ 以上のように記述すると、 「実行時エラー"5";」 「プロシージャの呼び出し、または引数が不正です。」 とエラーが発生してしまいます。 ロード時にテキストボックスに表示しつつ、入力された現在の桁数をカウントして、フォーカス移動する方法は無いのでしょうか? よろしくお願いします。
- ベストアンサー
- Visual Basic
- テキストボックスかコンボボックスを条件としたい
フォーム上のコントロールを取得する時に、 「テキストボックスかコンボボックスなら」としたいのですが、VBAコードがわかりません。 ************************************************************ Sub Sample() Dim myCtrl As Control Dim myForm As String myForm = "フォーム1" For Each myCtrl In Forms(myForm).Controls If myCtrlのタイプがテキストボックス Or コンボボックス Then Debug.Print myCtrl.Name End If Next End Sub ************************************************************ に修正していただけますか? ControlType プロパティを使うと思うのですが、使い方がわかりません。 ご回答よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- コンボボックスのクリア方法について教えて下さい(vb6.5)
コンボボックスのクリア方法について教えて下さい(vb6.5) ComboBox1で選択したものによって、 ComboBox2で表示するものを変えたいと思っています。 ただ、一度ComboBox1で選択した後にComboBox2を開くと、 ComboBox2は前回のものがどんどん足されていきます。 コンボボックスのクリア方法について、 どの様にすればよいかご教示のほど、 宜しくお願い致します。 Private Sub ComboBox1_Change() UserForm1.ComboBox2.RemoveItem (0) If ComboBox1.Text = 1 Then UserForm1.ComboBox2.AddItem "A" UserForm1.ComboBox2.AddItem "B" UserForm1.ComboBox2.AddItem "C" ElseIf ComboBox1.Text = 2 Then UserForm1.ComboBox2.AddItem "D" UserForm1.ComboBox2.AddItem "E" UserForm1.ComboBox2.AddItem "F" Else UserForm1.ComboBox2.AddItem "G" UserForm1.ComboBox2.AddItem "H" UserForm1.ComboBox2.AddItem "I" End If End Sub -------------------------------------- Private Sub UserForm_Initialize() UserForm1.ComboBox1.AddItem "1" UserForm1.ComboBox1.AddItem "2" UserForm1.ComboBox1.AddItem "3" End Sub
- ベストアンサー
- Visual Basic
- 効率の良いテキストボックスの検知について
VB6の初心者です。質問させていただきます。 画面上に5つのテキストボックス(TEXT1、TEXT2、TEXT3、TEXT4、TEXT5)と 1つのコマンドボタン(Cmd_SAVE)があり、 画面上の5つのテキストボックスをすべて記入し、 コマンドボタンを押すと、登録確認のメッセージボックスが表示され、 OKボタンを押すと、サーバへ転送され、 画面上のテキストボックスにひとつでも空欄があると、どのテキストボックスが 空欄であるかを示すメッセージが表示される処理をさせています。 そこで質問なのですが、今、メッセージボックス、登録処理は出来るようになったのですが、 とても処理の効率が悪い、もっと空欄を確認するのにすっきりとしたコードはある、と知り合いに言われました。 おそらく、繰り返し等を用いると思うのですが、メッセージにそれぞれのオブジェクト名を代入するやり方がわかりません。 下記が今のコーディングです。 Private Sub Cmd_SAVE_Click() If TEXT1.Text = "" Then MsgBox "TEXT1が登録されていません", vbOKOnly, "警告" Exit Sub End If If TEXT2.Text = "" Then MsgBox "TEXT2が登録されていません", vbOKOnly, "警告" Exit Sub End If If TEXT3.Text = "" Then MsgBox "TEXT3が登録されていません", vbOKOnly, "警告" Exit Sub End If If TEXT4.Text = "" Then MsgBox "TEXT4が登録されていません", vbOKOnly, "警告" Exit Sub End If If TEXT5.Text = "" Then MsgBox "TEXT5が登録されていません", vbOKOnly, "警告" Exit Sub End If If MsgBox("入力データを登録しますか?", vbOKCancel, "登録確認") = vbCancel Then Exit Sub End If End If ~登録処理~ End Sub どのような書き方がきれいで、効率的なコーディングなのでしょうか? ご教示お願いします!
- 締切済み
- Visual Basic
- EXCEL VBA ユーザーフォーム内のテキストボックスを一括処理する方法について
EXCEL VBAのユーザーフォームについて質問があります。 ユーザーフォームを作り、その中にコンボボックスを1個、テキストボックスを100個設置する。 コンボボックスの値が1のときはテキストボックス1~テキストボックス50までのEnabledをFalseに設定し、 コンボボックスの値が2のときはテキストボックス1~テキストボックス100までのEnabled をFalseに設定する。 このとき、TextBox1.Enabled = False、TextBox2.Enabled = False・・・と一つ一つ書いていくのではなく、 セルを処理するときと同様に、テキストボックスの番号を変数にして処理することは可能でしょうか。 Private Sub ComboBox1_Change() Dim i As Integer If ComboBox1.Value = 1 Then For i = 1 To 50 TextBox(i).Enabled = False Next i ElseIf ComboBox1.Value = 2 Then For i = 1 To 100 TextBox(i).Enabled = False Next i End If End Sub というような処理をイメージしているのですが、うまくいきません。どうぞよろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- コンボボックスの開いたリストを閉じるには
コンボボックスのリストを開くのはComboBox1.DropDownでできますが、閉じるのはどういう風にやればいいでしょうか。 今ユーザーフォームで Private Sub Combobox1_Change() ComboBox1.Clear v = ComboBox1.Text For i = 1 To 300 c = Worksheets("Sheet1").Cells(i, "A") If v = Left(c, Len(v)) And Len(v) > 0 Then ComboBox1.AddItem c End If Next i ComboBox1.DropDown End Sub と言う風にしていますが、リストを開きっぱなしだと変な表示になってしまい、マウスクリックで一旦閉じてから開かないと変な表示になってしまうのです。 そこで一旦リストをマクロで閉じさせてから再び開きたいのですが、どうすればいいでしょうか。
- ベストアンサー
- オフィス系ソフト
お礼
bin-chanさん、回答ありがとうございます。 上記のソースを改造したら、うまくいきましたが、 やはり、 アニメ0 アニメ0 アニメ1 アニメ2 アニメ3 … といった感じの動作でした。 ところで、 VB6のウェブサイトでコンボボックスのメソッドを調べていたら、 Combo1.Clear という命令がありました。 これで、上手くいきました。 どうやら、難しく考えすぎていたみたいでした。 Private Sub Text8_Change() Static p As Integer Dim nCount As Integer MsgBox "処理を開始する時点で、pの値は" & p & "だよ" 'でも、なぜここでIF文? 処理がここで終わりますね If Text8.Text = "" Then Exit Sub MsgBox "処理を進めるよ" MsgBox "削除前の時点でコンボの件数は" & Form6.Combo1.ListCount & "だよ" Form6.Combo1.Clear MsgBox "削除後の時点でコンボの件数は" & Form6.Combo1.ListCount & "だよ" p = Val(Text8.Text) For i = 0 To p Form6.Combo1.AddItem "アニメ" + str(i) Next i MsgBox "追加後の時点でコンボの件数は" & Form6.Combo1.ListCount & "だよ" End Sub