2017-04-25 6 views
1

내 사용자 정의 폼에있는 두 목록 상자간에 "항목"을 관리하고 교환하려고합니다. I.E. 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을 채우는 최초의 "방법"에 충실하고 싶습니다.

다음은 작동하는 코드입니다. 나는 (I 쉽게 참조 할 수 있도록 코드 줄 번호가 있습니다) 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 행을 사용하거나 사용하지 않고 코드를 시도했지만 행운은 없습니다.

도움이 될 것입니다.

찾고있는 게시물에 대해 유감스럽게 생각합니다. 너무 적은 세부 정보를 제공하는 것이 더 좋습니다.

답변

0

대신에 ListBox1에 대한 행 원본 속성을 설정 같은 이벤트를 초기화 사용자 정의 폼 동안 범위 LISTOFITEMS 통해 반복하여 항목을 추가하지 마십시오 ...

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 

가 그리고있는 명령 아래 (AddItem을 이름 샘플 코드에서 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

명명 된 범위를 반복하여 목록 상자를 채우십시오. 나는 그것이 동적 인 것을 남겨 둘 수 있다고 생각하지만 한 번에 하나씩 물건을 추가하십시오.

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

감사합니다. Sobigen 및 sktneer. 당신이 제안한 솔루션은 완벽하게 작동합니다! 나는 "엔트리"가 범위로 ​​선언되어야한다고 생각했다. – IzakG

관련 문제