2015-04-14 2 views
0

У меня есть книга, в которой есть список, в котором люди могут выбирать несколько строк. Я хочу, чтобы эта информация была однажды выбрана в другой ListBox в новой форме, которая будет отображаться после ее выбора.Excel VBA переместить элементы из списка в список в другой форме, которая будет другой всплывающей пользовательской формой

Я нашел примеры, которые переносят между списками в той же пользовательской форме, но мне нужна помощь в перемещении их между различными формами.

Этот код показывает, как передавать информацию между двумя пользовательскими формами в одной и той же форме. Но мне нужно изменить это, чтобы переместить его между двумя разными формами. Например, если вы нажмете кнопку «Отправить», появится еще один список с текстовыми полями.

Option Explicit 
'Move Listbox Items in UserForm 
'code from Dave Peterson 
'posted on www.contextures.com 


    Private Sub BTN_moveAllLeft_Click() 

    Dim iCtr As Long 

    For iCtr = 0 To Me.ListBox2.ListCount - 1 
     Me.ListBox1.AddItem Me.ListBox2.List(iCtr) 
    Next iCtr 

    Me.ListBox2.Clear 
End Sub 


Private Sub BTN_moveAllRight_Click() 

Dim iCtr As Long 

For iCtr = 0 To Me.ListBox1.ListCount - 1 
    Me.ListBox2.AddItem Me.ListBox1.List(iCtr) 
Next iCtr 

Me.ListBox1.Clear 
End Sub 


Private Sub BTN_MoveSelectedLeft_Click() 

Dim iCtr As Long 

For iCtr = 0 To Me.ListBox2.ListCount - 1 
    If Me.ListBox2.Selected(iCtr) = True Then 
     Me.ListBox1.AddItem Me.ListBox2.List(iCtr) 
    End If 
Next iCtr 

For iCtr = Me.ListBox2.ListCount - 1 To 0 Step -1 
    If Me.ListBox2.Selected(iCtr) = True Then 
     Me.ListBox2.RemoveItem iCtr 
    End If 
Next iCtr 

End Sub 


Private Sub BTN_MoveSelectedRight_Click() 

Dim iCtr As Long 

For iCtr = 0 To Me.ListBox1.ListCount - 1 
    If Me.ListBox1.Selected(iCtr) = True Then 
     Me.ListBox2.AddItem Me.ListBox1.List(iCtr) 
    End If 
Next iCtr 

For iCtr = Me.ListBox1.ListCount - 1 To 0 Step -1 
    If Me.ListBox1.Selected(iCtr) = True Then 
     Me.ListBox1.RemoveItem iCtr 
    End If 
Next iCtr 

End Sub 

Private Sub cmdOK_Click() 
Unload Me 
End Sub 

Private Sub UserForm_Initialize() 

Dim iCtr As Long 

With Me.ListBox1 
    For iCtr = 1 To 10 
     .AddItem "This is a test" & iCtr 
    Next iCtr 
End With 

With Me.ListBox2 
    For iCtr = 1 To 10 
     .AddItem "This is a not a test" & iCtr 
    Next iCtr 
End With 

Me.ListBox1.MultiSelect = fmMultiSelectMulti 
Me.ListBox2.MultiSelect = fmMultiSelectMulti 

End Sub 

ответ

0

Где вы видите Me вы можете ссылаться на другой UserForm.

Например, у меня есть две пользовательские формы: UserForm1 и UserForm2. Предположим, что наш начальный ListBox, ListBox1 находится на UserForm1 и содержит список цветов. UserForm1 также содержит командную кнопку CommandButton1, которая перемещает выбранные элементы из UserForm1 в другой список (также называемый ListBox1) в UserForm2 в следующую форму.

Код в UserForm1, начальный вид, показанный код на командной кнопке будет выглядеть следующим образом:

Private Sub CommandButton1_Click() 

    Dim i As Integer 

    For i = 0 To Me.ListBox1.ListCount - 1 
     If Me.ListBox1.Selected(i) = True Then 
      UserForm2.ListBox1.AddItem Me.ListBox1.List(i) 
     End If 
    Next i 

    UserForm2.Show 


End Sub