2017-11-08 1 views
1

배열 datesArr의 모든 항목VBA : 콤보는 Workbook_Open 이벤트 후 하나 개의 항목을 보여주는 나는 <strong><code>Workbook_Open</code></strong> 이벤트가 있으므로 사용자가 <code>Worksheet("Benchmarking")</code>에 갈 때, 그들은 그 포함에서 선택할 수있는 미리 채워진 목록을 가지고있는 컨트롤 콤보 을 채울 수있는 시도하고

내가, 스프레드 시트를 열고 Worksheet("Benchmarking")로 이동시, 난 단지 드롭 다운 목록에서 하나 개의 항목을보고하고있다 데 문제 :

Current situation with ComboBox1

내가 그 항목 목록을 선택하면 실제로 웁니다

Full list appearing when selecting initial single item

원하는 결과 :

ComboBox1_Change 이벤트가 시작된 후에뿐만 아니라 사용자가 처음 선택을 시도 할 때부터 전체 목록을 사용할 수 있기를 원합니다.

예 : 하여 Workbook_Open 이벤트 코드에 다음과 같은 Sometimes the ActiveX Combobox only shows one row, why?, Populating Combo Box on WorkBook Open 내가 시도 여러 가지 접근 방법 :

.ListFillRange = "DropDownDates" 
.List = DateArrToStrAr 

는 또한 콤보 상자에 항목을 추가 배열을 반복했다. 내가 드롭 다운 결과에서 동일한 1 개의 보이는 항목을 얻을 때마다.

누군가 내가 잘못 가고 있다고 말할 수 있습니까?

Private Sub ComboBox1_Change() 'QH 2/11/17 

    Dim datesArr() As String 
    Dim ws As Worksheet 

    Set ws = ThisWorkbook.Worksheets("Lkup") 

    datesArr = DateArrToStrArr 'function that reads a named range of dates and converts to string to avoid dd/mm becoming mm/dd 

    If ComboBox1.Value = vbNullString Then ComboBox1.Value = "01/04/2016" 

    ComboBox1.List = datesArr 

    '.....other code 

End Sub 

참고 :

배열

나의 현재 코드에서 ThisWorkbook

Private Sub Workbook_Open() 

    With Worksheets("Benchmarking").OLEObjects("ComboBox1").Object 
     .Clear 
     .List = DateArrToStrArr '   
    End With 

End Sub 

2) 워크 ("벤치 마크")

1) datesArr"DropDownDates" (통합 문서 범위)의 명명 된 범위를 읽고 문자열 배열로 변환하는 DateArrToStrArr() 함수로 채워집니다. 그런 다음 ComboBox에 할당됩니다. 엑셀 2016 64 비트 Windows :

DropDownDates는 공식 =OFFSET(Lkup!$F$16,,,Lkup!$M$12,)

셋업과 동적 명명 된 범위입니다.

+0

컨트롤 상자 인 경우 '입력 범위'속성을 직접 'DropDownDates'로 설정할 수 있으며 값이 표시됩니다. 프로그래밍 방식으로이 작업을 수행 할 이유가 있습니까? –

+0

나는 지금 프로그래밍 방식으로 왜 그것을하고 있었는지 기억한다. 콤보 상자에 숫자 또는 mm/dd/yyyy 형식이 표시되지 않도록 문자열이 채워져 있는지 확인했습니다. 이것은 "dd/mm/yyyy"가 항상 표시되도록합니다. 소스 범위는 DateArrToStrArr() 함수가 string으로 변환되기 전의 날짜입니다. – QHarr

+0

범위'DropDownDates'의 날짜가 고정되었거나 계산 되었습니까? 계산 된 경우 recalc를 사용하기 전에 강제로 시도하십시오. – CLR

답변

0

내가 recalcs에 대해 생각하게 해주신 @CLR에게 감사드립니다. 나는 다음과 같이이 문제를 내 방식을 해킹하기로 결정했다 : 나는 Worksheet("Benchmarking")Worksheet_Activate 이벤트를 추가하고 Workbook_Open 코드를 제거한

.이것은 트릭을 수행하는 것 같다

관련 문제