2013-09-23 2 views
3

Excel 테이블에 대한 필터를 만들려고합니다. 테이블 목록을 새로 고칠 때 호출되는 매크로에 항목 목록이 동적으로 추가 된 2 개의 드롭 다운 상자가 있습니다.Excel (VBA)의 코드에서 드롭 다운 선택을 설정하는 방법

Set selectBook = Worksheets("Report").DropDowns("DropDownBook") 
selectBook.RemoveAllItems 

For Each b In books 
     selectBook.AddItem (b) 
Next 

"books"는 새로운 값을 가진 배열입니다. "작성자"와 다른 드롭 다운의 코드는 유사합니다. 이 매크로를 실행 한 후 초기 선택 항목이 표시되지 않습니다. 난 둘 드롭 다운

Set books = Worksheets("Report").DropDowns("DropDownBook") 
bookSelect = books.List(books.ListIndex) 

의 선택을 읽고 필요한 필터링을 수행하는 dropdownchange 이벤트에 매크로를 첨부했다. 문제는 내가 저자를 선택하면, 매크로는

Run time error '1004': 
Unable to get the List property of the DropDown class 

와 위에서 주어진 코드의 두 번째 줄에 중단하고 내가 책을 선택하는 경우, 그것은 저자 위해 동일을 할 것입니다. 상자에 초기 선택이 없기 때문에 이런 일이 일어난다 고 생각합니다. 그러나 코드에서 하나를 만드는 방법을 찾을 수없는 것 같습니다. 시도했습니다.

selectBook.ListIndex = 0, selectBook.Value=0 etc. 

그러나 아무 것도 작동하지 않았습니다. 나는 명백한 것을 놓치고 있는가? 어떤 도움이라도 대단히 감사하겠습니다.

+0

이상하게 작동합니다 .... –

+0

파일을 볼 수 있습니까? 그렇다면 어떤 파일 공유 웹 사이트에 업로드하고 여기에 링크를 공유하십시오 .. –

+0

불행히도 비즈니스에 민감하므로 실제 파일을 게시 할 수 없으며 오류를 복제하는 모의 사례가 없습니다. 어떤 옵션이 효과가 있습니까? .ListIndex = 0? – user2808401

답변

1

이 질문이 게시 된 이후로 잠시 동안은 알고 있지만 대답이 없으므로 제공하기 위해 최선을 다할 것입니다.

항목을 하나씩 추가하는 대신 한꺼번에 추가 할 수 있습니다. 먼저 모든 옵션을 쉼표로 구분하여 'booklist'를 만든 다음이를 셀에 추가하십시오. 아래 예제를 참조하십시오.

' Create option list 
books = Array("The Very Hungry Caterpillar", "A Christmas Carol", "Ulysses") 
booklist = Join(books, ",") 

' Set drop down list 
With Sheets("Books").Cells(1, 1).Validation 
    .Delete 
    .Add Type:=xlValidateList, Formula1:=booklist 
End With 

드롭 다운을 동적으로 추가하려는 경우 언제든지 호출 할 수있는 별도의 절차로이를 래핑 할 수 있습니다.

Sub SetDropDown(cellRef As Range, valueArray As Variant) 

    ' Declare variables 
    Dim valueFormula 

    ' Create formula 
    valueFormula = Join(valueArray, ",") 

    ' Set dropdown 
    With cellRef.Validation 
     .Delete 
     .Add Type:=xlValidateList, Formula1:=valueFormula 
    End With 

End Sub 
+0

코드 주셔서 감사합니다. 내 VBA 버전에서 필요하므로 초기화를 맨 위에 추가하고 싶습니다. 희소 도서로 변경 어둡게 booklist As String ' –

관련 문제