プロが教えるわが家の防犯対策術!

EXCEL VBAについての質問です。
データベースの内容をユーザーフォームに表示したいです。
たとえばA1~A10セルの内容をテキストボックスやコンボボックス、リストボックスが含まれているユーザーフォームにループ等を使って表示させることは可能でしょうか。

TEXTBOX1
TEXTBOX2
TEXTBOX3
TEXTBOX4
COMBOBOX1
COMBOBOX2
TEXTBOX5
TEXTBOX6
TEXTBOX7
COMBOBOX3


後々追加があっても対応できるような方法を教えていただきたいです。

A 回答 (5件)

気になるのは先の後者でのComboboxの使い方とか、抽出したデータレコード数が1つずつなのか複数なのか。



思えばComboboxはユーザーフォームを表示させる際に各コントロールの値は事前にセットしておいて、呼び出した際にそれを表示させるのであって値追加すると言うのはないのかも?
またレコード数を複数とするなら各コントロールでどのように表示させるのか?が混乱しそうなので、多分1つのデータ行を取り込み・編集・データ改編となるのかな?
一連の流れを記載してあったなら良かったのかも。

>後々追加があっても対応できるような方法

コントロールの追加と言う意味なのでしょうか?
    • good
    • 0

DBからコントロールへデータを設定する場合は、コントロール毎に処理をわけて記述しないと、実現できません。


提示された例の場合、いかのようになります。
コマンドボタン1のクリックで実行するものとします。
Sheet1のA1~A10の内容を設定します。

Private Sub CommandButton1_Click()
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
Dim names As Variant
Dim cname As String
Dim i As Long
Dim j As Long
Dim flag As Boolean
names = Array("TextBox1", "TextBox2", "TextBox3", "TextBox4", "ComboBox1", "ComboBox2", "TextBox5", "TextBox6", "TextBox7", "ComboBox3")
For i = 0 To UBound(names)
cname = names(i)
Select Case TypeName(Controls(cname))
Case "TextBox"
Controls(cname).Text = ws.Cells(1 + i, 1).Value
Case "ComboBox", "ListBox"
flag = False
For j = 0 To Controls(cname).ListCount - 1
If Controls(cname).List(j) = ws.Cells(1 + i, 1).Value Then
Controls(cname).ListIndex = j
flag = True
Exit For
End If
Next
If flag = False Then
Controls(cname).AddItem ws.Cells(1 + i, 1).Value
Controls(cname).ListIndex = Controls(cname).ListCount - 1
End If
End Select
Next
End Sub
    • good
    • 0

あ、逆でした。



Controls("ABC" & i ).Text = range("A" & i).value

ですね。
ただComboboxを使用する位置付けについて不明なので、その時はスル~っとね。
    • good
    • 0

気になるのはComboboxって事前に値があってそれを表示したいの?


それとも新たに追加した上でそれを表示させたいの?

前者なら例えば

TEXTBOX1 ⇒ ABC1
TEXTBOX2 ⇒ ABC2
TEXTBOX3 ⇒ ABC3
TEXTBOX4 ⇒ ABC4
COMBOBOX1 ⇒ ABC5
COMBOBOX2 ⇒ ABC6
TEXTBOX5 ⇒ ABC7
TEXTBOX6 ⇒ ABC8
TEXTBOX7 ⇒ ABC9
COMBOBOX3 ⇒ ABC10

とコントロール名を変えれば

for i = 1 to 10

~= Controls("ABC" & i ).Text

next

でもいけるかもですけど、後々のメンテや引き継ぎを考えるとねぇ~。
お勧めしちゃまずいかな?
    • good
    • 0

こんにちは



COMBOBOXにどう反映したいのか不明なので、種類によって分ける必要があるかも知れませんけれど・・
基本的にはこれじゃないの?

https://oshiete.goo.ne.jp/qa/13336246.html
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています