2012-01-19 5 views
6

"ListBox"를 "사용자 정의 폼"이 아닌 "SHEET"에 추가했습니다. 마우스로이 작업을 수행했습니다. 작은 망치와 렌치 아이콘을 클릭했습니다.변수 이름을 사용하여 워크 시트의 컨트롤 개체를 어떻게 참조합니까?

ListBox1.Clear 

또는

그러나
ListBox1.AddItem("An option") 

, I가이리스트 박스의 세 가지 (이름, 편리에 ListBox1, ListBox2, 및 :

이 목록 상자는 쉽게 이와 같은 코드를 사용하여 참조 할 것 ListBox3) 배열 데이터를 채우는 함수를 다음과 같이 작성하려고합니다.

Call populate_listbox(ListBox2, designAreaArray) 

첫 번째 인수는 목록 상자 이름이고 두 번째 인수는 데이터입니다.

그러나 "ListBox2"를 올바르게 보내는 방법을 모르거나 기능에서 올바르게 참조 할 수 없습니다. 예를 들어

:

Dim controlName as string 
controlName = "ListBox1" 

다음과 같이 I 함수를 정의 되더라도 작동하지 않는다 :

Sub populate_listbox(LB As ListBox, dataArray As Variant) 
    Dim i As Integer: i = 0 
    For i = LBound(dataArray, 2) + 1 To UBound(dataArray, 2) ' Skip header row 
     LB.AddItem (dataArray(index, i)) 
    Next i 
End Sub 

분명히 이것은 미스 매칭 데이터 입력 오류가 발생. ListBox로 "controlName"을 정의하려고 시도했지만 그 중 하나가 작동하지 않습니다 ...

아마도 그것은 listBox에 대한 나의 참조입니다. 제어 객체를 참조하는 방법이 너무 많습니다. ...

MSForms.ListBox. 
ME.ListBox 
Forms.Controls. 
Worksheet.Shapes. 

목록은 계속 켜져 있고 나에게 도움이되는 것은 없습니다.

답변

6

이 시도 : 또한

Dim cMyListbox As MSForms.ListBox 

Set cMyListbox = Sheet1.ListBox1 '// OR Worksheets("YourSheetName").Listbox1 

cMyListbox.AddItem("An option") 

당신이 목록 상자를 채울 수있는 배열을 통해 루프를하지 않고,이 시도 :

Dim cMyListbox As MSForms.ListBox 
Dim vArray As Variant 

Set cMyListbox = Sheet1.ListBox1 

vArray = Range("A1:A6").Value 
cMyListbox.List = vArray 
+0

감사합니다. 나는 justnS의 대답에 대한 내 sub를 수정하고 위에서 언급 한 것처럼 내 변수 (cMyListbox)를 설정하면 조합이 작동합니다. 팁을 작성해 주셔서 감사합니다. – Symmitchry

+0

아무런 문제가 없으니 기쁘다. – Reafidy

3

변경에게 서브 서명이 일치하도록 :

Sub populate_listbox(LB As MSForms.ListBox, dataArray As Variant)

이제 tryi와 같이 전달할 수 있습니다. 원래는.

참고 :이 기능은 목록 상자의 "ActiveX"버전을 사용한 경우에만 작동합니다. ListBox1을 모듈에서 바로 호출 할 수 있기 때문에 나는 당신이라고 추측합니다.

PS : ActiveX 컨트롤은 부모 시트 개체의 멤버입니다. 따라서 sheet1에 listbox1이있는 경우 Sheet1.ListBox1과 같이 호출 할 수 있으므로 여러 개의 목록 상자가있는 여러 시트가있는 경우 혼동하지 않습니다. 또한, 혼자서도 쉽게 이름을 바꿀 수도 있습니다.

+0

응답 해 주셔서 감사합니다. Reafidy의 대답에 따라 변수 선언을 수정하고 내 하위 항목을 수정했습니다. 이제 작동합니다. – Symmitchry

관련 문제