2015-03-28 2 views
2

Я создаю пользовательскую форму в Excel, которая позволяет пользователю просматривать все записи, которые были введены в выбранную дату. Дата выбирается с использованием комбинированного списка, заполненного датами текущей недели. Затем все остальные действия запускаются с помощью командной кнопки.Как заполнить combobox с набором данных, который соответствует определенной дате

Я пытаюсь выяснить, как заполнить обзорный список и/или просмотреть список со всеми данными из именованного диапазона, который соответствует выбранной дате. Любая помощь приветствуется. Следующий код включает команду Vlookup, которая является мертвой.

лист: Data_Entry
именованный диапазон: Records_Entered
UserForm: ufrmDataEntry1
Дата выпадающий: CboReviewWeek
Кнопка Команда: CmdReviewCount
обзор выпадающий: CboReviewRecords
обзор ListBox: LstReviewRecords

Private Sub UserForm_Initialize() 
    'fill combobox 
    Me.CboReviewWeek.List=[index(Text(today()-weekday(today(),2)+row(1:7),"mm/dd/yyyy"),)] 
End Sub 

Private Sub CmdReviewCount_Click() 
    'Step 1) pass selection of CboReviewWeek to "Formulas" sheet 
    ActiveWorkbook.Sheets("Formulas").Range("A4") = Me.CboReviewWeek 
    'Step 2) Return count of total records entered on selected date 
    Me.TxtReviewCount = ActiveWorkbook.Sheets("Formulas").Range("A5") 
    'Step 3) Return records entered to listbox 
    var1 = WorksheetFunction.VLookup(CboReviewWeek.Value, Worksheets("Data_Entry").Range("Records_Entered"), 2, False) 
    LstReviewRecords.Value = var1 
    CboReviewRecords.Value = var1 
    'Me.LstReviewRecords.List = ActiveWorkbook.Sheets("Data Entry").Range("Records_Entered") 
    'Is broke here 
End Sub 

ответ

1

Там это несколько способов получить желаемые результаты. Решение может зависеть от двух проблем, о которых вы не упомянули, - сохраняете ли вы только даты или даты и сортируете ли ваши данные по дате ввода или в каком-либо другом порядке. Последнее имеет решающее значение - если данные сортируются по дате ввода, то группа записей, которую вы ищете, является непрерывной. Если нет, то они будут разбросаны по вашему рабочему листу.

Предполагая, что ваши записи в порядке, вам просто нужно найти начальную и конечную строки. Я предполагаю, что дата, которую вы ищете в диапазоне Records_Entered, находится в первом столбце, а если нет, вам нужно будет изменить «1» в соответствующем коде.

Dim R as Range, NumRows as integer 

NumRows=Worksheets("Data_Entry").Range("Records_Entered").Rows.Count 
Set R=Worksheets("Data_Entry").Range("Records_Entered").Columns(1).Find(What:=CboReviewWeek.Value, after:=Worksheets("Data_Entry").Cells(NumRows,1)) 
Do While R.value=CboReviewWeek.Value 
    CboReviewReviewRecords.addItem R.value (Or, if you want to return the second column like in your VLOOKUP above, use R.offset(0,1).value) 
    Set R=R.offset(1,0) 
Loop 

«После» атрибут в находке необходимо, потому что, к сожалению, Excel начинает поиск с первой сотой и только смотрит на клетки после нее - то есть, если выбранная дата фактически является первой датой в диапазон, поиск приведет к второй строке. Начав поиск в последней строке, он заставляет Excel переносить в первую строку, чтобы начать поиск.

Если записи не сортируются в порядке, или если вы просто хотите более гибкое решение, вы могли бы использовать FindNext вместо:

Dim R as Range, NumRows as integer, FirstCell as Range 

NumRows=Worksheets("Data_Entry").Range("Records_Entered").Rows.Count 
Set R=Worksheets("Data_Entry").Range("Records_Entered").Columns(1).Find(What:=CboReviewWeek.Value, after:=Worksheets("Data_Entry").Cells(NumRows,1)) 
Set FirstCell = Nothing 
Do While Not R is Nothing and R<>FirstCell 
    If FirstCell is Nothing then Set FirstCell = R 
    CboReviewReviewRecords.addItem R.value (Or, if you want to return the second column like in your VLOOKUP above, use R.offset(0,1).value) 
    Set R=Worksheets("Data_Entry").Range("Records_Entered").Columns(1).FindNext 
Loop 

Если у вас есть дата/время в столбце вы смотрите , он становится намного более сложным

Надеюсь, это поможет вам направиться в правильном направлении

Смежные вопросы