Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1957 / 13645 ツリー ←次へ | 前へ→

【70802】comboboxに配列を渡す 正月 12/1/1(日) 13:50 質問[未読]
【70803】Re:comboboxに配列を渡す UO3 12/1/1(日) 15:47 回答[未読]
【70804】Re:comboboxに配列を渡す UO3 12/1/1(日) 16:03 発言[未読]
【70829】Re:comboboxに配列を渡す kanabun 12/1/4(水) 10:46 発言[未読]

【70802】comboboxに配列を渡す
質問  正月  - 12/1/1(日) 13:50 -

引用なし
パスワード
   userform1の
commandbutton1が押されたら
userform2の
  combobox1に
    あ
    い
    う
userform1の
commandbutton2が押されたら
userform2の
  combobox1に
    え
    お
    か
と表示したいのですが。
userform1はunloadしてuserform2を表示したいのですが。
hide meを使わないといけないのか?
userformをまたいで配列を渡すのはどうしたらいいのでしょうか?
Private Sub CommandButton1_Click()
Dim hairetu(3) As Variant
 hairetu(0) = "あ"
 hairetu(1) = "い"
 hairetu(2) = "う"
unload Me
userform2.Show
End Sub

Private Sub UserForm_Initialize()
dim hairetu as variant
ComboBox1.List = hairetu
End Sub

うまくいきません。

【70803】Re:comboboxに配列を渡す
回答  UO3  - 12/1/1(日) 15:47 -

引用なし
パスワード
   ▼正月 さん:

いろんな方法がありますが、一例です。
UnLoad か Hide かは 要件次第です。これだけでは判断できません。

UserForm1 側

Private Sub CommandButton1_Click()
  Call linkForm2(Array("あ", "い", "う"))
End Sub

Private Sub CommandButton2_Click()
  Call linkForm2(Array("え", "お", "か"))
End Sub

Private Sub linkForm2(v As Variant)
  Unload Me 'または Me.Hide でもいい。
  With UserForm2
    .Tag = Join(v, " ")
    .Show
  End With
End Sub

UserForm2側

Private Sub UserForm_Activate()
  ComboBox1.List = Split(Me.Tag)
End Sub

【70804】Re:comboboxに配列を渡す
発言  UO3  - 12/1/1(日) 16:03 -

引用なし
パスワード
   ▼正月 さん:

実際に渡す配列内の文字列に半角スペースが存在する可能性は高いと思いますので
以下修正願います。

UserForm1 側

.Tag = Join(v, " ")  ---> .Tag = Join(v, vbTab)
 
UserForm2 側

ComboBox1.List = Split(Me.Tag)  ---> ComboBox1.List = Split(Me.Tag,vbTab)

【70829】Re:comboboxに配列を渡す
発言  kanabun  - 12/1/4(水) 10:46 -

引用なし
パスワード
   ▼正月 さん:
>userformをまたいで配列を渡すのはどうしたらいいのでしょうか?

▼こちらは UserForm1 モジュール
>Private Sub CommandButton1_Click()
> Dim hairetu(3) As Variant
> hairetu(0) = "あ"
> hairetu(1) = "い"
> hairetu(2) = "う"
> unload Me
> userform2.Show
>End Sub
>
▼こちらは UserForm2 モジュール
>Private Sub UserForm_Initialize()
>dim hairetu as variant
>ComboBox1.List = hairetu
>End Sub
↑ UserForm2の UserForm_Initialize() プロシージャのなかで
>dim hairetu as variant
配列を宣言して ComboBox1のリストにセットしようとしてますが、
中身が空なので
>うまくいきません。

標準モジュールに 可変配列を宣言しておき、
UserForm1の2つのCommandButton からその標準モジュールで宣言した
配列に値をセットして UserForm2のComboBox1に渡すか、

以下のように、UserForm1内の処理だけで、UserForm2のComboBox1に
リストのセットまで済ませてしまったらどうでしょう(このばあいは
標準モジュールで 共有配列を宣言する必要はありません)
▼すべてUserForm1 モジュール内で処理する例
Option Explicit

Private Sub CommandButton1_Click()
  Dim hairetu(3) As String
  hairetu(0) = "あ"
  hairetu(1) = "い"
  hairetu(2) = "う"
  hairetu(3) = "え"
  ShowUserform2 hairetu
End Sub

Private Sub CommandButton2_Click()
  Dim hairetu(2) As String
  hairetu(0) = "か"
  hairetu(1) = "き"
  hairetu(2) = "く"
  ShowUserform2 hairetu
End Sub

Private Sub ShowUserform2(arry() As String)
  With UserForm2
    .ComboBox1.List = arry
    .Show 0
  End With
  Unload Me
End Sub

1957 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free