2017-04-25 35 views
1

私は、ユーザーフォームにある2つのリストボックスの間で "アイテム"の管理と交換を実現しようとしています。 I.私はListBox1(私は複数選択を使用する)の項目を持っているし、 "追加"コマンドボタンをクリックし、すべての項目がListBox2に追加されます。 - そのコードが動作します。私はまた、選択または "すべてクリア"コマンドボタンに基づいてListBox2から項目を削除することができます。リストボックス間のアイテムの追加と削除

"追加"コマンドボタンに "削除"コマンドボタンで使用される同様のコードを追加すると、エラーが発生します。私の目標は、ListBox1からアイテムを削除して、ListBox2でアイテムを再度追加または複製しないようにすることです。エラーは「実行時エラー」 - 2147467259(80004005) ':不明なエラーです。

私はソースに問題を絞り込んだが、解決方法はわからない。問題は、私がListBox1を埋める方法です。現在、名前付き範囲を使用してListBox1を設定していますが、この名前付き範囲はテーブル内の列を参照します。

MyUserForm.ListBox1.RowSource = "ListOfItems" 

私は、次のコードを使用している場合、私は同じエラーを取得しないとすべてが正常に動作します。

With MyUserForm.ListBox1. 
    .AddItem "Item 1" 
    .AddItem "Item 2" 
    .AddItem "Item 3" 
    .AddItem "Item 4" 
End With 

名前付き範囲は、ダイナミックかつ頻繁に変更する予定であると私は本当に、ListBox1をの移入の最初の「方法」に固執したいと思います。

ここには動作するコードがあります。私は(私は簡単に参照するためにコード行の番号が付けられている)ListBox2にアイテムを「追加」するためのコードをusethis:

(1)For i = 0 To LIstBox1.ListCount - 1 
(2) If ListBox1.Selected(i) = True Then 
(3)  ListBox2.AddItem ListBox1.List(i) 
(4) End If 
(5)Next 

そして、ここではすでにされている私はLitBox1から項目を削除するために使用するコードですListBox2に追加:

(6)For i = ListBox1.ListCount - 1 To 0 Step -1 
(7) If ListBox1.Selected(i) = True Then 
(8)  ListBox1.Selected(i) = False 
(9)  ListBox1.RemoveItem (i) 
(10) End If 
(11)Next 

上記のエラーが(9)私はデバッグをクリックしたときにライン上にあります。私は8行目と8行目の両方でコードを試しましたが、運はありません。

ご協力いただきますようお願い申し上げます。

お探しのポストに申し訳ありませんが、あまりにも多くの詳細を与えるのが良いと思いました。

答えて

0

AddItemメソッドの名前(コマンドボタンの下に

Private Sub UserForm_Initialize() 
Dim cell As Range 
With Me.ListBox1 
    For Each cell In Range("ListOfItems") 
     .AddItem cell 
    Next cell 
End With 
End Sub 

そして...代わりに、このようなイベントを初期化するユーザーフォームの間の範囲ListOfItemsをループでアイテムを追加、ListBox1をのためのRowSourceプロパティを設定しないでください。サンプルコードで)選択した項目をListBox2に追加するには、次のコードを配置します。

Private Sub AddItem_Click() 
Dim i As Long 
With Me.ListBox1 
    For i = 0 To .ListCount - 1 
     If .Selected(i) Then 
      Me.ListBox2.AddItem .List(i) 
     End If 
    Next i 
    For i = .ListCount - 1 To 0 Step -1 
     If .Selected(i) Then 
      .RemoveItem i 
     End If 
    Next i 
End With 
End Sub 
0

名前付き範囲をループすることでリストボックスを作成しようとします。私はそれが動的なままにすることができると思うが、一度に1つのものを追加します。

For each entry in sheet1.range("ListOfItems") 'adjust sheet as necessary 
    MyUserForm.ListBox1.AddItem entry 
next 
+0

ありがとうSobigenとsktneer。あなたが提案したソリューションは完全に機能します!私は、 "エントリ"は範囲として宣言されるべきだと考えました。 – IzakG

関連する問題