[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/11/08(Tue) 22:45
投稿者名:javaっ子
Eメール:
URL :
タイトル:
UserFormに動的にTextBoxを作成
ExcelVBAのUserFormで
テキストボックスの数が10個の場合だったり、
30個の場合だったりと、動的にTextBoxを作る事は出来ないのでしょうか??

投稿時間:2005/11/09(Wed) 06:42
投稿者名:いな
Eメール:
URL :
タイトル:
Re: UserFormに動的にTextBoxを作成
VB6とかならこんな感じで出来るけれど、ExcelにLoadステートメントってあったかなぁ〜
あとExcelVBAは使用するExcelのVerによって使用できる関数/使用できない関数が
あるので、明記するとより分かりやすいです。
#まぁ記述されていないということで、最新Verだと思うのですが…。

--
' Load イベントで配列を動的に作成してフォームに加える
Private Sub Form_Load()
    Dim i As Integer

    For i = 1 To 9
        ' Load ステートメントを使用してコントロールを作成する
        Call Load(Me.Text1(i))

        ' ここで、プロパティなどを必要に応じて設定します
        Me.Text1(i).Text = "Text" & CStr(i + 1)
        Me.Text1(i).Top  = Me.Text1(0).Top + (240 * i)

        ' 初期値で False になっているので True にする
        Me.Text1(i).Visible = True
    Next i
End Sub

投稿時間:2005/11/09(Wed) 17:07
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re^2: UserFormに動的にTextBoxを作成
> ' Load イベントで配列を動的に作成してフォームに加える
> Private Sub Form_Load()
>     Dim i As Integer
>
>     For i = 1 To 9
>         ' Load ステートメントを使用してコントロールを作成する
>         Call Load(Me.Text1(i))
>
>         ' ここで、プロパティなどを必要に応じて設定します
>         Me.Text1(i).Text = "Text" & CStr(i + 1)
>         Me.Text1(i).Top  = Me.Text1(0).Top + (240 * i)
>
>         ' 初期値で False になっているので True にする
>         Me.Text1(i).Visible = True
>     Next i
> End Sub

どこかで見たことあるなぁと思ったら自分のでした。(私は天然かもw)
hhttp://jeanne.wankuma.com/tips/control/02-arraycontrol.html

Excel 2003 であれば、.NET の方を参考になるでしょうね。
と思ったら Me.Controls.Add については Blue さんが回答してましたか。

投稿時間:2005/11/09(Wed) 17:29
投稿者名:Blue
Eメール:
URL :
タイトル:
Re^3: UserFormに動的にTextBoxを作成
> Excel 2003 であれば、.NET の方を参考になるでしょうね。
実際試してみたのは Excel 2002 でしたけどね。

.NET(MenagedC++)は Controls.Add ってのがあったなぁと思ったので、VBAもあるかなぁとおもい
Me.Controls.Add を見つけて、その先はわからないのでぐぐりました。

たしか、VBAのMSFormsのコントロールはウィンドウハンドルがない(ウィンドウレスコントロール)なので
イベントは制御できそうにない(サブクラス化できない)ですかねぇ?
# 親ウィンドウからフックするのか?
# メンドイからテキストボックスはCreateWindowで作っちゃうほうがはやそう。

投稿時間:2005/11/09(Wed) 18:30
投稿者名:いな
Eメール:
URL :http://,
タイトル:
Re^3: UserFormに動的にTextBoxを作成
> どこかで見たことあるなぁと思ったら自分のでした。(私は天然かもw)
> hhttp://jeanne.wankuma.com/tips/control/02-arraycontrol.html

やはり、こうゆう突っ込みが来るのを期待してた私がどこかに居ました。
まるっとコピーしたのはそのためでもあったわけですが・・・。

やはり、分かるものですねぇ

投稿時間:2005/11/09(Wed) 22:21
投稿者名:じゃんぬねっと
Eメール:
URL :http://jeanne.wankuma.com/
タイトル:
Re^4: UserFormに動的にTextBoxを作成
>Blue さん
> 実際試してみたのは Excel 2002 でしたけどね。

あら、Office XP の頃にはもうそんな時代でしたか。
その頃は VB6 をやり始めた時期ですね。

>いな さん
> やはり、こうゆう突っ込みが来るのを期待してた私がどこかに居ました。
> まるっとコピーしたのはそのためでもあったわけですが・・・。

ありゃ、釣られましたか (w
実は私もこういった返事が来るのを期待し(ry
ということにしたいです、はい。

> やはり、分かるものですねぇ

最初は本当にわかりませんでした。
コメントで気付いたくらいなので、コメントがなければ気付きませんでした。
結構いい加減ですね... (;_ _)

投稿時間:2005/11/09(Wed) 10:34
投稿者名:Blue
Eメール:
URL :
タイトル:
Re: UserFormに動的にTextBoxを作成
> 動的にTextBoxを作る事は出来ないのでしょうか??
Controls.Add メソッドを使います。

Private Sub UserForm_Initialize()
    
    Dim i As Integer
    
    For i = 1 To 5
        With Me.Controls.Add("Forms.TextBox.1", "TextBox" & i)
            .Text = "Test" & i
            .Top = 5 + 20 * (i - 1)
            .Left = 10
            .Height = 15
        End With
    Next
    Me.Controls("TextBox5").Text = ""
    
End Sub

ただし、イベントが制御できるかは不明。

投稿時間:2005/11/09(Wed) 17:01
投稿者名:javaっ子
Eメール:
URL :
タイトル:
Re^2: UserFormに動的にTextBoxを作成
いなさん、Blueさんレスありがとうございます。

>ExcelVBAは使用するExcelのVerによって使用できる関数/使用できない関数が
>あるので、明記するとより分かりやすいです。
Excelは2003です。
そうですね。今後は気をつけます。

Blueさんありがとうございます。出来ました!!