2016-07-21 2 views
0

옵션 스타일 (왼쪽의 chk 상자)이있는 다중 선택 목록 상자가 있습니다. 선택한 데이터를 워크 시트에 전송하기 위해 아래 코드를 사용했습니다 (목록 상자 자체가 동적 명명 된 범위로 입력되므로 동적이어야합니다). 이 일을하고 싶어하지만 명령은 첫 번째 루프 후 목록 상자 데이터를 선택 해제 따라서 만 목록 상자에서 첫 번째 선택을 전치되는 프로그램을 실행할 때 내가 생각처럼MultiSelection Listbox Userform

Private Sub cmdRun_Click() 

Dim i As Integer 

i = 0 

Do While i < lstProperties.ListCount + 1 
    If lstProperties.Selected(i) = True Then 
    Sheet7.Cells(i + 1, 1) = lstProperties.List(i) 
    End If 
    i = i + 1 
Loop 

End Sub 

는 것 같습니다.

아무도이를 피하는 방법을 알고 있습니까?

당신이 목록 상자에서 항목을 선택한 경우에만를 증가 할 수 있도록 행 참조에 대한 별도의 변수를해야합니다

답변

0

...

이 이후 수
Private Sub cmdRun_Click() 

Dim Rw As Integer 
Dim i As Integer 

Sheet7.Columns(1).ClearContents 

Rw = 1 
i = 0 
Do While i < lstProperties.ListCount 
    If lstProperties.Selected(i) = True Then 
     Sheet7.Cells(Rw, 1) = lstProperties.List(i) 
     Rw = Rw + 1 
    End If 
    i = i + 1 
Loop 

End Sub 
+0

,하지만 여전히 단지를 추가합니다 워크 시트의 첫 번째 선택. 첫 번째 루프 이후 userform을 호출하는 것처럼 느껴 지므로 코드를 다시 실행할 때 아무 것도 선택되지 않습니다. –

+0

코드는 선택된 모든 항목을 항상 행 1부터 워크 시트에 복사합니다. 기존 결과를 바꾸려면 코드를 다시 실행하기 전에 열을 지워야합니다. 다음 사용 가능한 행으로 복사하려면'Rw = 1'을 변경하여 사용 가능한 다음 행을 변수에 할당해야합니다. – Domenic

+0

제공 한 코드를 정확히 복사하면 매번 첫 번째로 선택한 항목이 행 1에 복사됩니다. 예를 들어 목록 항목 ABC & DEF가 선택된 경우 ABC를 행 1에 복사합니다. DEF를 선택한 경우 DEF를 Row 1로 복사합니다. 어떻게 초기화합니까? '개인 서브 Userform_Initialize() Me.lstProperties.RowSource = "의 FilterData" Me.lstStmts.RowSource = "propsNOI" Me.lstLoans.RowSource = "FilterLoans" 끝 Sub' –