2013-03-14 4 views
1

배열을 사용하여 목록으로 스타일 지정된 콤보 상자의 ListFillRange 속성을 설정하고자하는 Excel 2007의 VBA 프로 시저가 있습니다.배열 요소를 사용하여 VBA에서 콤보 상자 채우기

내가 "콤보 상자를 오른쪽 클릭하고"Sheet1! $ F2 : $ F17 ""ListFillRange "속성 옆에 작성하면이 작동 알 수 있습니다. 코드에서도이 작업을 수행 할 수 있습니다. 그러나 배열에 할당하여이 속성의 값을 동적으로 설정하는 데 관심이 있습니다.

필자가 테스트 한 어레이가 제대로 작동하는지 알고 있습니다. 나는이 작업을 수행 할 때

ThisWorkbook.Worksheets("Sheet1").OLEObjects("cmbS").ListFillRange = ar 

내가 얻을 : "형식 불일치"오류 여기에 구문 오류가 아마있다.

이 작업의 결과는 배열의 요소 (0) ...에서 마지막 요소 (n-1)까지 배열 요소로 채워야합니다. 어떤 포인터, 정말 고마워요! 여기

가 도움이 경우 콤보 상자의 속성입니다 "권한 거부"

ThisWorkbook.Worksheets("Sheet1").cmbS.list = ar 

을하고 말한다 :

나는 또한 시도 테스트 및 시도 후 enter image description here

,이 발견 작품 :

ThisWorkbook.Worksheets("Sheet1").cmbS.ListFillRange = "" 

Dim i As Integer 
For i = LBound(ar) To UBound(ar) 
    ThisWorkbook.Worksheets("Sheet1").cmbS.AddItem (ar(i)) 

Next 

그러나 더 신속한 효과를 위해을 모두 으로 채우는 데 관심이 있습니다. 요소를 추가하는 것뿐만 아니라 을 추가하는 것이 아닙니다.

+0

additem을 사용하기 전에 항상 느린 화면 업데이트를 설정하십시오. –

답변

0

콤보 박스를 배열 내용으로 채울 수있는 유일한 방법은 요소별로 수행하는 것입니다. 배열이 얼마나 큰 지 상관없이 느린 프로세스가 될 것이라고 믿기가 어렵습니다.

+5

사실이 아닙니다. 2D 배열을'.List' 속성에 할당 할 수 있습니다. 콤보 상자와 목록 상자 모두에서 작동합니다 (예 : 'MyComboBox.List = My2DArray' – blackworx

3

나는 그 늦은 것을 알고 있지만 어쩌면 다른 누군가를 도울 것입니다. 적어도 다음 코드가 작동합니다 (요소의 요소보다 훨씬 빠릅니다).

dim arr() as variant 

arr = Worksheets("Total").Range("C2:"&lrow).Value 
Worksheets("Menu").ComboBox2.List = arr 
관련 문제