Excel VBA質問箱 IV

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

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


12272 / 13644 ツリー ←次へ | 前へ→

【11324】フォームを開くときに配列を渡すには 倉本正弐 04/3/5(金) 13:26 質問
【11325】Re:フォームを開くときに配列を渡すには Jカーター 04/3/5(金) 13:43 回答
【11345】Re:フォームを開くときに配列を渡すには Jカーター 04/3/6(土) 8:05 回答
【11346】Re:フォームを開くときに配列を渡すには Jカーター 04/3/6(土) 8:19 回答
【11412】Re:フォームを開くときに配列を渡すには 倉本正弐 04/3/8(月) 20:58 お礼
【11414】Re:フォームを開くときに配列を渡すには Jカーター 04/3/8(月) 21:16 回答
【11343】Re:フォームを開くときに配列を渡すには Kein 04/3/6(土) 0:49 回答

【11324】フォームを開くときに配列を渡すには
質問  倉本正弐  - 04/3/5(金) 13:26 -

引用なし
パスワード
   あるフォームから別のフォームを開くときに、
配列データを渡したいのですが、どのようにすれば
よいのでしょうか。

配列でない変数ならば、例えば

Public aaa As Long

とでも宣言しておけば、後から開いたフォームの
モジュールからも参照できるはずですが、
配列をPublic宣言するとエラーになります。

【11325】Re:フォームを開くときに配列を渡すには
回答  Jカーター  - 04/3/5(金) 13:43 -

引用なし
パスワード
   こんにちは。

変数はDim(もしくはPrivate)で宣言しておいて
もらう側のSubプロシージャで代入してはどうでしょうか?

【11343】Re:フォームを開くときに配列を渡すには
回答  Kein  - 04/3/6(土) 0:49 -

引用なし
パスワード
   Variant型の配列を、標準モジュールで宣言しておくと配列を渡せます。
☆テスト環境 : UserForm1 → TextBox と CommandButton を配置
        UserForm2 → ListBox を配置
       UserForm1のTextBoxに、カンマ区切りの文字列を入れて
        ボタンを押す。 
○標準モジュール

Public MyAry As Variant

○UserForm1モジュール

Private Sub CommandButton1_Click()
  If InStr(1, TextBox1.Text, ",") = 0 Then Exit Sub
  MyAry = Split(TextBox1.Text, ",")
  UserForm1.Hide
  UserForm2.Show
End Sub

○UserForm2モジュール

Private Sub UserForm_Initialize()
  ListBox1.List() = MyAry
End Sub

Private Sub UserForm_Terminate()
  Unload UserForm1
End Sub 

【11345】Re:フォームを開くときに配列を渡すには
回答  Jカーター  - 04/3/6(土) 8:05 -

引用なし
パスワード
   こんにちは。
(何型の配列を渡したいのか不明なので3例ほど)

UserForm1モジュール
------------------------------------------------------------------------
Option Explicit
'Showの前にUserForm2側のプロシージャを使って配列を渡す
Private Sub CommandButton1_Click()
  Dim sAR(2) As String
  Dim lAR(2) As Long
  Dim vAR  As Variant
  
  sAR(0) = "A"
  sAR(1) = "B"
  sAR(2) = "C"
  
  lAR(0) = 1
  lAR(1) = 2
  lAR(2) = 3
  
  vAR = Array("XX", "YY", "ZZ")
  
  With UserForm2
    Call .ArraySet(sAR(), lAR(), vAR)
    .Show
  End With
End Sub

UserForm2モジュール
---------------------------------------------------------------------
'変数宣言はDimでOK
Option Explicit
Dim StrT() As String
Dim LngT() As Long
Dim VntT  As Variant

'配列を受け取るプロシージャ
Sub ArraySet(STmp() As String, LTmp() As Long, VTmp As Variant)
  StrT = STmp
  LngT = LTmp
  VntT = VTmp
End Sub

'確認用
Private Sub CommandButton1_Click()
  Dim V As Variant
  For Each V In StrT
    MsgBox V
  Next V
  For Each V In LngT
    MsgBox V
  Next V
  For Each V In VntT
    MsgBox V
  Next V
End Sub

ちょっとややこしいけど
標準モジュールはできれば使いたくないので・・・

※例なので
String,Long,Variantの三つを同時に書いています。
必要なところだけに絞って下さい。

【11346】Re:フォームを開くときに配列を渡すには
回答  Jカーター  - 04/3/6(土) 8:19 -

引用なし
パスワード
   補足です。

前のレスでは配列の使用目的不明のため
三種類ほど書きかましたが

もし
ListBoxとかComboBoxのリストのためなら
変数を使う必要はありません。

開かれる側のコントロールは開く側から見えるので
「Showの前に」リストを設定してあげるだけです。

繰り返しますが
モーダルフォームの場合は「Showの前」に設定することが必須です。

【11412】Re:フォームを開くときに配列を渡すには
お礼  倉本正弐  - 04/3/8(月) 20:58 -

引用なし
パスワード
   ▼Jカーター さん:
>補足です。
>
>前のレスでは配列の使用目的不明のため
>三種類ほど書きかましたが
>
>もし
>ListBoxとかComboBoxのリストのためなら
>変数を使う必要はありません。
>

どうもありがとうございます。
[11345]の方法で、思っていたことが実現できました。
実際は、ListBoxのためなのですが、
変数を使う必要がないという趣旨が解りかねます。
もっと簡単にできるのでしょうか?

【11414】Re:フォームを開くときに配列を渡すには
回答  Jカーター  - 04/3/8(月) 21:16 -

引用なし
パスワード
   こんばんは。
もう少し詳しく書くと
「受け取り側に変数は不要」ということです。

開く側で配列を作っておいて
開かれる側をShowする前に設定してあげるだけです。
たとえば
VntListがリストに設定したい配列なら
----------------------------------------------------
With UserForm2
  .ListBox1.List = VntList
  .Show
End With

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