これ何て呼びますか Part2

ExcelVBAでどうしても分からないところがあったため、質問させていただきました。

<Usrform上Control>
・UserForm1
・MultiPage-Page1
・CommandButton1(押すとPageが追加されます。Page1,Page2,Page3...)
・Combobox1
・TextBox1

<現在可能な動作>
UserForm1上にMultiPageのPage1を設定しています。
CommandButton1を押すとPage2が追加され、Page1上に設定されてあるCombobox1とTextBox1をPage2上に追加します。

<行ないたい動作>
現在は、Page1上でCombobox1の値が変更された時に、Page1上のTextBox1の値が変更されるように設定していますが、
Page2上のCombobox1の値が変更された時に、Page2上のTextBox1の値を変更することは出来ますでしょうか?

使用Versionは、Excel 2003です。
何卒、よろしくお願いします。

<Code>
Private Sub CommandButton3_Click()
Dim myCmbbx As MSForms.ComboBox
Dim myTxtbx As MSForms.TextBox

With MultiPage1
.Pages.Add , , .Value + 1
.Value = .Value + 1
End With

With MultiPage1.SelectedItem
Set myCmbbx = .Controls.Add("Forms.Combobox.1", "ComboBox1", True)

With myCmbbx
.AddItem "AAA"
.AddItem "BBB"
.AddItem "CCC"
End With

Set myTxtbx = .Controls.Add("Forms.TextBox.1", "TextBox1", True)

With myTxtbx
.MultiLine = True
End With
End With
End Sub

Private Sub ComboBox1_change()
If ComboBox1.Text = "BBB" Then
TextBox1.Value=1234567
End If
End Sub

A 回答 (1件)

クラスモジュールを追加すれば出来そうですよ



myPageClassというクラスモジュールを追加

Private WithEvents Cb as MSForms.ComboBox
Private Tx as MSForms.TextBox

Public Sub SetCtl( objCb as MSForms.ComboBox, objTx as MSForms.TextBox)
  Set Cb = objCB
  With Cb
    '表示位置などを調整
    .Left = 6
    .Top = 6
    .Width = 100
    'アイテムの追加
    .AddItem "AAA"
    .AddItem "BBB"
    .AddItem "CCC"
  End With
  Set Tx = objTx
  With Tx
    .Left = 6
    .Top = 36
    .Width = 100
  End With
End Sub

Private Sub Cb_Change()
  if cb.Text = "BBB" then
    tx.Text = "1234567"
  End If
End Sub

UserForm1のコードの冒頭で
dim objClass(20) as myPageClass
を記述

CommadButton3_Clickイベントに
  dim cb as MSForms.ComboBox, tx as MSForms.TextBox
  dim pg as MSForms.Page
  dim ss as string
  With MultiPage1
    ss = "Page" & .Pages.Count+1
    set pg = .Pages.Add(ss)
    .Value = .Pages.Count - 1
    with pg.Controls
      set cb = .add("Forms.ComboBox.1", "ComboBox1", TRUE )
      set tx = .add("Forms.TextBox.1", "TextBox1", True)
    End with
    objClass(.Pages.Count) = new myPageClass
    objClass(.Pages.Count).SetCtl cb, tx
  End With
といった具合です

Page毎に違うイベント処理となるとこの方法では無理ですけど …
    • good
    • 0
この回答へのお礼

おおっ、ありがとうございます!!
クラスモジュールという概念がいまいち不明だったため、どうしても行いたい動作が実現出来ませんでした。

Page毎の違う処理がまだ出来ていませんが、今のところ十分過ぎる程です。
これを機にもっと調べていきます。

また何かありましたらよろしくお願いします。
ありがとうございました。

VBA Masterになるには、まだまだ先が見えないですねぇ。

お礼日時:2011/12/13 23:06

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


おすすめ情報