2017-07-05 1 views
0

私のサブフォームからユーザーフォームを実行する配列の値を変更したいと考えています。これをどうやって行うのですか?ユーザーフォーム上のリストボックスの選択に応じて配列の値を変更します

A = [25, 50, 75, 100] 
UserForm1.Show 

UserForm1では、 "1" を選択するとオプション1、2または3
とリストボックスが含まれている "2"、 "3"、または:ここ

は、私が持っているものの一例ですそれらの複数の組み合わせ私はそれに応じてAの値を変更したい。

If "1" is selected Then 
A(0) = 10 
If "2" is selected Then 
A(1) = 0 
If "3" is selected Then 
A(2) = 1000 

どうすればいいですか?助けを前にありがとう。

+0

"1"は常に「= True」です。 "2"と "3"などと同じです。リストボックス内のアイテムが*選択されているかどうか? –

+0

選択されている場合はYesです。 –

答えて

1

これは、ListBox_AfterUpdate()イベントでテストされています。 ListBoxオブジェクト(変数lbに割り当てられています)でハンドルを取得し、lb.Listの項目を反復して、それぞれが選択されているかどうかを確認します。選択されている場合は、配列Aに位置値を割り当てます。

配列Aは、ここではモジュール/ユーザーフォームスコープ変数として宣言され、フォームの_Initializeイベント中にデフォルト/初期値が割り当てられます。これらの値は、ユーザーがListBoxで選択すると変更されます。あなたがA配列を初期化するとき/、あなたがこれを修正し、ListBox_ChangeまたはListBox_AfterUpdateイベントから呼び出す、または必要に応じて別のコントロールのイベントプロシージャから呼び出すことができた場所に応じ

Option Explicit 
Dim A() 
Private Sub UserForm_Initialize() 
'Assigns initial values to your array: 
A = Array(25, 50, 75, 100) 
'Assigns the default ListBox items: 
Me.ListBox1.List = Array("1", "2", "3") 
End Sub 
Private Sub ListBox1_AfterUpdate() 
Dim lb As MSForms.ListBox 
Dim i As Long, v As Long 
Set lb = Me.ListBox1 '# Modify as needed 
For i = 0 To lb.ListCount - 1 
    If lb.Selected(i) Then 
     Select Case lb.List(i) 
      Case "1" 
       v = 10 
      Case "2" 
       v = 0 
      Case "3" 
       v = 1000 
     End Select 
     'confirm prev & new values for array: 
     MsgBox (A(i) & " will be changed to: " & v) 
     A(i) = v 
     'Confirm the value in array has changed 
     MsgBox (A(i)) 
    End If 
Next 
End Sub 

+0

これはちょうど私が必要とするように見えます。リストボックスをダブルクリックして生成されたサブコードにこのコードを挿入しますか?どのようにデータを変更できるように配列を呼び出すのですか? –

+0

*あなたが何をしようとしているかによってあなたはそれを置くでしょう。私はあなたのためにそれに答えることはできません。私はあなたの2番目の質問を理解していません。 VBAの変数* scope *を理解していますか?そうでない場合は、調査し、適切な範囲を使用してください。おそらく、あなたは何をしようとしているかに依存して、UserFormモジュール内のパブリック変数が必要です。 –

+0

このコードをListBoxから呼び出す場合は、おそらく 'Click'イベントではなく、' Change'または 'AfterUpdate'イベントを提案します。 –

関連する問題