初めて質問します。
VB6とオラクルでの開発でコンボボックスを使います。
ユーザーの要望は、途中まで入力した内容に合うデータをコンボボックスのリストに表示して欲しいとのことなのですが、VBに入っている通常のコンボボックスで対応できるんでしょうか?
また、出来なければ利用可能なツールなどがありましたら教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

wakawaka11さん、こんにちは。


how2002jpと申します。

DropDownイベント時に、コンボボックスのTextプロパティを使って
Oracleからデータ取得し、Clearメソッド実行後、AddItemでリストを追加していけばよろしいかと思いますが、如何でしょうか?
    • good
    • 0
この回答へのお礼

how2002jpさん、こんにちは。

アドバイスどおり、やってみました。できました!!
ありがとうございました。

お礼日時:2001/12/04 11:45

特定のフィールドの項目を候補で一覧表示したいということですか?



たしか、データフィールド直結なので、候補の一覧を出すためには手書きでAddしていかなければいけないような・・・

入力値をいちいちコミットしないでも反映はします。

ODBCでしか経験がありませんが・・・
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

QVB2008 コンボボックスとテキストボックスの連動について

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)

For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.text="顧客名"

以上が現在の状況です。
comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。
もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。

VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。

項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt

Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Spl...続きを読む

Aベストアンサー

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容を入れるList→nameList
・↑の結果の[1]の内容を入れるList→adr1List
・↑の結果の[2]の内容を入れるList→adr2List
1.テキストファイルから1行読み込む
2.読み込んだ内容をカンマでsplitし、srcAryに格納
3.各リストに追加していく。nameList.add(srcAry(0))、adr1List.add(srcAry(1))、adr2List.add(srcAry(2))
4.1~3をテキストファイルの行数くりかえす。
5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。

各コンボボックスが変更された場合の動作についてはNo2さんのソースを参考にしてください。

コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?

ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ

ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道

ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市

このようになっていないのであれば・・・

0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容...続きを読む

QVB6 テキストボックスの数値をコンボボックスに反映させるには?

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

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 Su...続きを読む

Aベストアンサー

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

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 & "だよ...続きを読む

Qコンボボックス等における表示アイテムの設定方法(VB5.0→VB6.0移植)

秋月, "Visual basic 1001 Tips", 725-725,オーム(1998). ISBN4-274-06247-3に
「ユーザーがコンボボックスのアイテムにアクセスできるように、プログラムでList, ListCount, ListIndex プロパティを設定できます」
との記載がありますが、
Dim CTP$(16)
Call SetCTP(CTP$(), IA&): 'IA& = 5
UpdateColor$ = CTP$(IA&)
UpdateColorList.Clear
UpdateColorList2.Clear
For IA& = 1 To 16
UpdateColorList.AddItem CTP$(IA&): 'リストボックス
UpdateColorList2.AddItem CTP$(IA&): 'コンボボックス
If UpdateColor$ = CTP$(IA&) Then UpdateColorList.ListCount = IA&
If UpdateColor$ = CTP$(IA&) Then UpdateColorList2.ListCount = IA&
Next IA&
では、いずれも「コンパイルエラー。値の取得のみ可能なプロパティに値を設定することはできません」とのメッセージが表示され使用できません。
VB.5.0からVB.6.0への書き換えではどのように対応したかご存知の方お知らせください。
現在の設定状況を初期値として表示し、オペレーターが変更可能にするためのものです。
<BODY>に使用した色を除外するために、IEのみ対応している色にも対応するために、16という数値は変化します。変更ルーチンは作成していません。

秋月, "Visual basic 1001 Tips", 725-725,オーム(1998). ISBN4-274-06247-3に
「ユーザーがコンボボックスのアイテムにアクセスできるように、プログラムでList, ListCount, ListIndex プロパティを設定できます」
との記載がありますが、
Dim CTP$(16)
Call SetCTP(CTP$(), IA&): 'IA& = 5
UpdateColor$ = CTP$(IA&)
UpdateColorList.Clear
UpdateColorList2.Clear
For IA& = 1 To 16
UpdateColorList.AddItem CTP$(IA&): 'リストボックス
UpdateColorList2.AddItem CTP$(IA&): 'コンボボック...続きを読む

Aベストアンサー

ListCountではなくてListIndexに代入するのでは?
あと、代入時は-1しないと期待したものが選択されないと思います。

Qコンボボックス or リストボックス (複数列表示→値の取得)

マクロ初心者です。(エクセル2003使用-ユーザーフォーム)
先日はお世話になり、ありがとうございました。
作成していくうちにさらに改良を加えたく、再質問させていただきます。

※コンボボックス内の表示を複数行表示(Sheet1の管理番号,品名,注文数量)し、そのデータをSheet2のセルA(管理番号),セルB(品名),セルC(注文数量)と貼り付けようとしております。
が、本で探したところ複数行表示のやり方がリストボックスでしかのっていなく、さらに自分で作成したマクロでは動きませんでした。
すみませんが、お力をお貸しください。

(Sheet1)
担当課客先管理番号品名注文数量出荷数量
A岡田さん1324りんご3020
B山田さん1554みかん25070
C岡田さん7634なし4025
B金子さん4653みかん7570
A金子さん6675りんご17060
C杉浦さん7789りんご200120

(↓こちらは、前回質問させていただいた内容です。)
Private Sub UserForm_Initialize()
ComboBox1.RowSource = "Sheet1! C2:C" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row ←ここを複数行用に変更するのでしょうか?いろいろ試したのですがダメでした。
ComboBox1.ListIndex = -1
ComboBox1.SetFocus
End Sub

Private Sub CommandButton1_Click()
Dim lRow As Long
With Worksheets("Sheet2")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & lRow + 1).Value = ComboBox1.Value
End With
End Sub


(↓こちらは、リストボックスでのマクロですが、動きません)
Private Sub UserForm_Initialize()
With UserForm2.ListBox1
.ColumnWidths = "70;50;50"
.ColumnCount = 3
End With

With Worksheets("Sheet1")
Dim MyA As Variant
Dim i As Long
For i = 2 To UBound(MyA, 1)
.AddItem
.List(i - 2, 0) = Cells(i, 1).Value
.List(i - 2, 1) = Cells(i, 2).Value
.List(i - 2, 2) = Cells(i, 3).Value
Next
End With
End Sub

Private Sub CommandButton1_Click()
Dim lRow As Long
With Worksheets("Sheet2")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & lRow + 1).Value = ListBox1.Value
End With
End Sub


教えていただけましたら幸いです。
よろしくお願いいたします。

マクロ初心者です。(エクセル2003使用-ユーザーフォーム)
先日はお世話になり、ありがとうございました。
作成していくうちにさらに改良を加えたく、再質問させていただきます。

※コンボボックス内の表示を複数行表示(Sheet1の管理番号,品名,注文数量)し、そのデータをSheet2のセルA(管理番号),セルB(品名),セルC(注文数量)と貼り付けようとしております。
が、本で探したところ複数行表示のやり方がリストボックスでしかのっていなく、さらに自分で作成したマクロでは動きませんでした。
す...続きを読む

Aベストアンサー

Private Sub UserForm_Initialize() からF8を押しながらステップ実行させていけば、どこでエラーになるか分かります。デバッグの基本なので覚えておくと良いでしょう。

ちなみに、ご提示されたコードでは
For i = 2 To UBound(MyA, 1)
でとまります。理由は、MyAが何も代入されないままUBoundに使われているためです。そもそもこのMyAがなぜ出てきたのか不思議ですが…。

また、ここを訂正してもそのあとの
.AddItem
でこけます。WithでくくられているのはWorksheets("Sheet1")ですが、ワークシートにAddItemメソッドはありません。当然ならがそのあとの.Listもすべて×。逆に、Cellsは「.」が抜けているのでSheet1ではなく表示しているシートを参照することになります。

.Range("A" & lRow + 1).Value = ListBox1.Value
についても、複数行のデータはValueでは取得できません。セットするときに List(#, #)=~ としたようにListプロパティでひとつずつ取得します。

> ←ここを複数行用に変更するのでしょうか?いろいろ試したのですがダメでした。

後半のコードと見比べてみましたか?
With UserForm2.ListBox1
.ColumnWidths = "70;50;50"
.ColumnCount = 3
End With
このようにリストボックスの各カラムの幅とカラム数を指定してます。前半のコードで複数行表示ができないのは、これをしていないためです。

以上を踏まえて修正したものです。

Private Sub UserForm_Initialize()
With ListBox1
.ColumnWidths = "70;50;50"
.ColumnCount = 3
.RowSource = "Sheet1!A2:C" & Worksheets("Sheet1").Range("C" & Rows.Count).End(xlUp).Row
End With
End Sub

Private Sub CommandButton1_Click()
Dim lRow As Long
With Worksheets("Sheet2")
lRow = .Range("A" & Rows.Count).End(xlUp).Row
.Range("A" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 0)
.Range("B" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 1)
.Range("C" & lRow + 1).Value = ListBox1.List(ListBox1.ListIndex, 2)
End With
End Sub

コンボボックスの場合は、フォームにComboBox1を設置し、コードのListBox1を全てComboBox1に置き換えてください。ただし、ドロップダウンリストは複数行で表示されますが、コンボボックス自体は複数行表示できないようなので担当課の値しか出てきません。

Private Sub UserForm_Initialize() からF8を押しながらステップ実行させていけば、どこでエラーになるか分かります。デバッグの基本なので覚えておくと良いでしょう。

ちなみに、ご提示されたコードでは
For i = 2 To UBound(MyA, 1)
でとまります。理由は、MyAが何も代入されないままUBoundに使われているためです。そもそもこのMyAがなぜ出てきたのか不思議ですが…。

また、ここを訂正してもそのあとの
.AddItem
でこけます。WithでくくられているのはWorksheets("Sheet1")ですが、ワークシートにAdd...続きを読む

QVBでコンボボックスとテキストボックスの連係

VBでフォームにデータコンボボックスとテキストボックスを一つづつ作り、データコンボボックスで値を選択し、その値に対する値をテキストボックスに表示させたいんですがどうすればいいでしょうか?
データコンボボックスで選択する元になるテーブルは
ID | 商品
1 | みかん
2 | ばなな
3 | りんご
と、上記のような形のテーブルをもちいています。
例えばデータコンボボックスで「1」を選択した場合テキストボックスに「みかん」と表示させたいです。

Aベストアンサー

データコンボ cmbData
テキスト txtData
として、cmbDataがレコードとリンクしているものと仮定しています。

1.cmbData.BoundColumnが商品名、cmbData.DataFieldがID とする
2.Clickイベントに、以下を設定する

Private Sub cmbData_Click(Area As Integer)
txtData.Text = cmbData.BoundText
End Sub

3.商品名がテキストに表示されます。


P.S
フォーカス取得時も、処理を入れておくと起動時も商品名が表示されるよ。
Private Sub cmbData_GotFocus()
txtData.Text = cmbData.BoundText
End Sub


このカテゴリの人気Q&Aランキング

おすすめ情報