• ベストアンサー

comboboxの選択

こんにちわ、よろしくお願いします。 WinXP VB6.0 oracle10g使用 comboboxとTextBoxと連動したいと思っています。 担当者のデータ コード、名前  1   山田  2   佐藤 3   足立 55   安藤 999 不明 とあるのですが、TextBoxに"3"と入力したら (Text1_LostFocusイベントでやってみました) comboBoxは"安藤"と出るように(選択状態)したいと思っています。 ListIndexでやってみましたが、コードが必ずしも順番に入っている状態ではないので困っています。 (DBからよんでくる時、FORM_LOADイベントでも実行したいです。) よろしくお願いします。

noname#69946
noname#69946

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

  • ベストアンサー
  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.3

#2です。 言っている意味がわかりました。 ComboBoxでは0からの連続した数値でないと ListIndexにできないみたいですね。 そこで55をTextBoxに入力したらIndexは3を 出力するように配列を設定しました。 配列には予め全部4,不明が出るようにして置き あとからデータがあるものは有効な数値に書き換えます。 Dim Code(999) As Integer Private Sub Form_Load() Dim i As Integer Combo1.AddItem "山田", 0 Combo1.AddItem "佐藤", 1 Combo1.AddItem "足立", 2 Combo1.AddItem "安藤", 3 Combo1.AddItem "不明", 4 For i = 0 To 999 Code(i) = 4 Next i Code(1) = 0 Code(2) = 1 Code(3) = 2 Code(55) = 3 Code(999) = 4 End Sub Private Sub Text1_Change() If IsNumeric(Text1.Text) Then Combo1.ListIndex = Code(Text1.Text) End If End Sub

その他の回答 (2)

  • fortranxp
  • ベストアンサー率26% (181/684)
回答No.2

その1 Private Sub Form_Load() Combo1.AddItem "山田", 0 Combo1.AddItem "佐藤", 1 Combo1.AddItem "足立", 2 Combo1.AddItem "安藤", 3 Combo1.AddItem "不明", 4 End Sub Private Sub Text1_Change() If IsNumeric(Text1.Text) Then Combo1.ListIndex = Text1.Text End If End Sub その2 Combo1のItemDataプロパティウィンドウ内で 1 2 3 というふうに連続した数値を入力する。(改行はCtrl+Enter) Private Sub Form_Load() Combo1.AddItem "山田" Combo1.AddItem "佐藤" Combo1.AddItem "足立" Combo1.AddItem "安藤" Combo1.AddItem "不明" End Sub Private Sub Text1_Change() If IsNumeric(Text1.Text) Then Combo1.ListIndex = Text1.Text End If End Sub

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;311340
回答No.1

TextBoxのChangeイベントで何が入力されたか判定して、空白ならcomboBoxを空にして、それ以外ならSelect文で判定してあげれば簡単なものは作成できると思います。 それがkazumanさんの望み通りのものかどうかはわかりません。 Form_Loadで動かすならForm_Loadイベント中にText_Changeイベントを呼んであげればいいんでは?

noname#69946
質問者

補足

早速回答ありがとうございます。 >Select文で判定してあげれば簡単なものは作成できると思います。 Comboboxが入力できないように、ドロップダウンリストにしてある為に、表示することができません。 AddItemで追加しても表示は空白のままですし…。

関連するQ&A

  • コントロールが発生させるイベントを回避したい

    VB2008です。 状態: フォーム上にtextbox1、textbox2、button1があり、textbox1からtextbox2もしくはbutton1にフォーカスが移動したとき 1:textbox2への移動->textbox1のlostfocusイベントを通常通り発生させる。 2:button1への移動->textbox1のlostfocusイベントをキャンセルする。(1度たりとも発生させない、もしくは発生してもその処理を1度たりともさせない。) 1は通常の処理なのでなにもしなくていいと思うのですが、2の処理が上手に浮かびません。button1でフラグを立てて、textbox1_lostfocusの処理を抜けるようにしているのですが、必ず1度は処理が実行されます。 どのようにコードを書けばうまくできるでしょうか。もし、これが仕様ということなら、同じような処理をするにはどうすればよいでしょうか。 わかりにくければ補足いたします。よろしくお願いします。

  • Excel ユーザーフォーム呼び出し時エラー

    WindowsVista HomePremium Excel 2007 Microsoft Visual Basic 6.5 です。 Excelでユーザーフォーム(UserForm1)を作り、   Sub Auto_Open()     UserForm1.Show   End Sub で起動時に呼び出すようにしました。 確認のため、一度Excelを閉じ起動し直したところ正常に動作しました。 もう一度確認のため同じように再起動をすると、  実行時エラー '2110': コントロールが表示されていない、利用できない、またはフォーカスを持てないため、そのコントロールにフォーカスを移すことはできません。 と出て、それ以降何度やっても動作しなくなってしまいました。 解決法か原因がわかる方いらっしゃいましたら、ぜひご教授ください。よろしくおねがいします。 ユーザーフォーム関係のコードを以下に書いておきます。(内容は小遣い帳のようなものです。) ―――――――――――――――――――― Private Sub CommandButton1_Click() Dim NUM As Integer If TextBox1.Text = "" Then MsgBox "概要が記入されていません。" TextBox1.SetFocus GoTo 100 ElseIf TextBox2.Text = "" Then MsgBox "収支が記入されていません。" TextBox2.SetFocus GoTo 100 ElseIf ComboBox1.ListIndex = -1 Then MsgBox "収支の種類が選択されていません。" ComboBox1.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = TextBox1.Value If CheckBox1 = True Then TextBox2 = -TextBox2 End If If ComboBox1.ListIndex = 0 Or ComboBox1.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox1.ListIndex + 1) = TextBox2.Value Else ActiveCell.Offset(0, ComboBox1.ListIndex + 2) = TextBox2.Value End If TextBox1 = "" TextBox2 = "" CheckBox = Falses ComboBox1.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton2_Click() Dim NUM As Integer If TextBox3.Text = "" Then MsgBox "移動金額が記入されていません。" TextBox3.SetFocus GoTo 100 ElseIf ComboBox2.Text = "" Then MsgBox "移動元が選択されていません。" ComboBox2.SetFocus GoTo 100 ElseIf ComboBox3.ListIndex = -1 Then MsgBox "移動先が選択されていません。" ComboBox3.SetFocus GoTo 100 End If Range("F6").Select NUM = 0 Do While ActiveCell.Offset(NUM, 0) <> "" NUM = NUM + 1 Loop ActiveCell.Offset(NUM, 0).Select ActiveCell = "移動" If ComboBox2.ListIndex = 0 Or ComboBox2.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox2.ListIndex + 1) = -TextBox3.Value Else ActiveCell.Offset(0, ComboBox2.ListIndex + 2) = -TextBox3.Value End If If ComboBox3.ListIndex = 0 Or ComboBox3.ListIndex = 1 Then ActiveCell.Offset(0, ComboBox3.ListIndex + 1) = TextBox3.Value Else ActiveCell.Offset(0, ComboBox3.ListIndex + 2) = TextBox3.Value End If TextBox3 = "" ComboBox2.ListIndex = -1 ComboBox3.ListIndex = -1 100 End Sub ―――――――――――――――――――― Private Sub CommandButton3_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub CommandButton4_Click() Unload Me End Sub ―――――――――――――――――――― Private Sub UserForm_Initialize() myarray1 = Array("収支", "クレジット", "郵便局", "机", "500", "1") For i = 0 To 5 ComboBox1.AddItem myarray1(i) ComboBox2.AddItem myarray1(i) ComboBox3.AddItem myarray1(i) Next i TextBox1.SetFocus End Sub

  • ComboBoxでの一文字検索が上手くいきません

    ソフトはEXCEL2003です。 質問内容: ユーザーフォーム習い始めたところで、つまずいています。 やりたいことは、フォーム上に配置したComboBoxに別シート(選択一覧)で作成した「カタカナ1文字、会社名、会社コード」の3項目を表示可能にしておく。 ComboBoxへのカタカナ1文字入力により、該当する会社の上記3項目を表示し、会社選択後ComboBoxには会社名を表示、リストボックスには選択した会社コードを表示し、登録リストに会社名と会社コードを登録する。 フォームを作成してテストしましたが、一部のカタカナ(ヒなど)で該当する会社が選択されません。 何が問題なのか知識が足りませんので、困っています。 お分かりになる方に教えて頂きたくお願いします。 なお今回会社名をカタカナ1文字検索にしたのは、例えば社名の前に(株)等が付くものや、同じ漢字でも日本(ニホン)、日陰(ヒカゲ)等呼び名が異なるものがあるためです。 また、ComboBoxのプロパティは「MatchEntry」を「0-fmMatchEntryFirstLetter」としてあります。 ところで作成した命令は次の通りです。 Private Sub UserForm_Initialize() Dim MyVar1 As Variant Dim Ws1, Ws2 As Worksheet Dim LastRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") Ws2.Select MyVar1 = Range("A3:C490") With ComboBox1   .ColumnCount = 3  ’カタカナ1文字、会社名、会社コード   .ColumnWidths = "20;230;10"   .List = MyVar1 End With ComboBox1.TextColumn = 2   Ws1.Select   ComboBox1.MatchEntry = fmMatchEntryFirstLetter End Sub Private Sub ComboBox1_Change() '会社名処理 Dim Ws1, Ws2 As Worksheet Dim NawRow As Long Set Ws1 = Worksheets("登録") Set Ws2 = Worksheets("選択一覧") ComboBox1.MatchEntry = fmMatchEntryFirstLetter    '表示行数を確認 一番上が「0」なので+1   NawRow = Me.ComboBox1.ListIndex + 1   TextBox4.Text = Ws2.Cells(NawRow + 2, 3) '会社コード表示;選択一覧は3列3行目から開始 Ws2.Cells(1, 1) = NawRow + 3       '選択一覧1行目に選択行表示 デバック用 End Sub  ※登録リストへの会社名と会社コードを登録する部分は省略しました。  以上よろしくお願いします。 その他、このような多くの会社名選択で、よい方法があれば教えてください。

  • データベースへの値の取得の仕方

    よろしくお願いします。 AccessをデータベースにしてVB2005でフォームを作っています。 DataSet1の中に<テーブル1>と<テーブル2>があります。 <テーブル1>には、「商品コード」、「商品名」、「値段」があります。 <テーブル2>には、「注文日」、「商品コード」、「注文個数」があります。 フォーム上のTextBox1に入力された値(商品コード)を<テーブル2>の「商品コード」欄に蓄積したいのですが、どのようにすれば良いですか? フォームには、 ComboBox1(テーブル1の商品名をリストにしたもの、ユーザー選択用) TextBox1(ComboBox1に対応した商品コードを表示、入力不可・表示のみ) ComboBox1とTextBox1を連動させるために、<テーブル1>からデータを呼んだのはいいのですが、肝心の<テーブル2>にどうやってデータを蓄積したらよいのかわからなくなってしまいました。 すみませんがプロパティウィンドウでの設定の仕方、またはコードなど教えてください。

  • フォームのイベントを標準モジュールから呼び出す

    フォームのイベントを標準モジュールから呼び出す事は出来ないのでしょうか? ちなみにアクセスです。 例えば、 Private Sub Form_Load() MsgBox "test" End Sub というのはフォームを開いたときにしか発生しないですよね。 でもフォームを開いている状態でForm_Loadと全く同じ事をしてほしい時は どうすればいいですか? 標準モジュールで Sub a() Call Form_フォーム1.Form_Load End Sub としてみましたが、メソッドまたはデータ メンバが見つかりません。 (Error 461)になりました。 MsgBox "test" だけなら、 Sub a() MsgBox "test" End Sub にすりゃいいじゃん!って思われがちですが、 実際はForm_Loadイベントにはたくさんのコードが書かれています。 標準モジュールからイベントの呼び出しを教えてください。

  • VBAから変更した時だけイベントを発生させない方法

    Excel VBA で、コンボボックスの選択をユーザーが変更した時はイベントハンドラが呼び出されて処理をしていますが、VBAのコードからコンボボックスの選択を変更した時には、このイベントハンドラが呼び出されないようにしたいのですが、どのように記述すればよいでしょうか。 例えば、下記のコードの (A) の部分で、VBAのコードからコンボボックスの選択を変更していますが、ここでイベントが発生しないようにしたいのですが、Application.EnableEvents = False を記述してもイベントが発生していますがなぜでしょうか。どのように記述すれば (A) の部分でイベントが発生しなくなりますでしょうか。 よろしくお願いします。(Windows7 , Excel2010 ) ---Module1---------- Option Explicit Sub main()  UserForm1.Show End Sub ---UserForm1-------- Option Explicit Private Sub UserForm_Initialize()  Dim i As Integer  ComboBox1.Style = fmStyleDropDownList  For i = 1 To 30   ComboBox1.AddItem Format(i, "00")  Next i End Sub Private Sub CommandButton1_Click()  Dim num As Integer  Dim index As Integer  num = ComboBox1.ListCount  index = ComboBox1.ListIndex  If index = num - 1 Then   Application.EnableEvents = False   ComboBox1.ListIndex = -1 '<----------(A)   Application.EnableEvents = True  Else   ComboBox1.ListIndex = index + 1  End If End Sub Private Sub ComboBox1_Change()  MsgBox ("ComboBox1_Changeイベント発生") End Sub ------------------------------------

  • フォームでコンボボックスの1列目以外を表示するには

    フォームでコンボボックスを設置して 左から順に「CD」、「部門」、「名称」と3つに分けて表示した状態で 選ぶと1つ目のCDの値がセットされます。 これをCDではなく、部門又は名称を表示するにはどの様にしたらよいのでしょうか? チェンジのイベントに ComboBox1.List(ComboBox1.ListIndex,2)と書いて 行くかと思ったんですが、中でループしてしまいます。 宜しければ教えて下さい。

  • VB.NET)コンボボックスの連動について

    失礼いたします、コンボボックスを連動させるプログラムを書いているのですがうまく連動しません、よろしければお知恵をお貸しくださいませ コードを書くにあたりの条件は、開発はVisual Basic 2005のVisual Basic データベースから呼び出す場合ならAccess 2003を使用(今現在は使用しないで開発しています) Access内でコンボボックスを、Excelでコンボボックスをなどはしません…今回はVBでコンボボックスを連動させたい 今回ちょっと公に出来ない箇所があり記号で伏せさせていただきますが、記号は日本語が入ります Form1でload(ロードってこれであってましたっけ?)部分に以下を記載 dim strdata as string = {"●●","●●","●●"} (すみません、あと一文あったのですがちょっと思い出せないので) それで連動するcomobox2には以下を記載 dim strdata as string = {"●●","●●"} dim i as integer select case strdata(i) case 0 combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") case 1 combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") combobox2.item.addrange("●△ ×") となり、combobox1で最初の●●が選ばれればcombobox2のcase0を表示させるようにしたいと思っていますが上手く表示が出ません 今週中に仕上げなければいけないので昨日今日と色々調べてみたのですが、VBAやAccess・Excel関係が殆どでVBのが見つからずAccessやExcelのを見ても上手くいかなかったのと、解説が良く分からなかったので、分かりやすく解説をお願いします

  • VB.NET、テキストボックスを配列に

    いつもこちらで質問させていただいています、今回も質問させていただきます Form2(計算表などの一覧表) combobox・textbox・buttomがあり、combobox1つとtextbox2つで一列とし、それが23行(1ページの限界)まで表示 Form4(Form2で出力項目を選ぶ時、textboxをクリックすると開く項目設定のページ) listbox・textbox・buttomがあり、listbox2つとbuttom2つで…buttomを押すと右の項目が左のlistboxに移るよう、また別のbuttomを押すと逆が起きる 今回はForm4の右のlistboxから選んだ項目と、名称がかかれたtextboxをForm2の各行のそれぞれのtextboxに入れたいのですがForm2で選択した項目にすでにテキストが入力されて、Form4のtextboxで名称変更しなかったときは、Form2のtextboxをclickした行に結果が表示されるのですが、Form2で選択した項目をForm4のtextboxで名称を変更した際、結果が上手く表示されずどうしたらいいのか分からずお知恵をお借りしたく質問させていただきました 名称が変更されない場合のForm4は(stritemは一度連結し格納するためです) if textbox1.text = form2.textbox1.text then form2.textbox1.text = textbox1.text for i = 0 to listbox1.selecteditems.count - 1 if stritem <> "" then stritem &= " + " end if stritem &= listbox1.selecteditems.item(i) next form2.textbox2.text = stritem となり、これを利用し名称が変更された時は配列で変更された箇所を特定し上記のコードでその位置に値を入れるとしたいのです 問題解決にForm2のtextboxを予めIndexで配列宣言すればいいといわれ、プロパティで出来ないかとやってみたのですが…Visual Studio 2005で上手く出来ませんでした そこでIndexでtextboxを予め配列宣言するにはどう設定、またはどう記述したらよいのでしょうか?

  • VisualBasic 2005 にてプログラミングの学習をしていて、

    VisualBasic 2005 にてプログラミングの学習をしていて、疑問に思った点がありましたので質問させて頂きました。 Form1とForm2を作成しています。 その時にForm2を非表示で起動したいと考えた(Form2_Loadイベントを実行したい)のですが、 Form2を非表示で起動させる事が出来ません。 <Form1側 Button1_Click> 'モーダル表示 Dim frm2 As New Form2 frm2.ShowDialog() <Form2_Load> '非表示 Me.Visible = False 上記コードだと、Form2が表示されてしまいます。 これを非表示でLoadイベントを実行させる方法をご存知の方がいらっしゃれば教えて頂きたい と思います。 初歩的な質問で申し訳ないのですが、よろしくお願いいたします。