2015-06-25 5 views
1

У меня есть форма с суб-формой (непрерывная форма), на которой я хотел бы применить фильтр диапазона дат. Дело в том, что оно работает частично.Фильтр диапазона доступа MS Access, отображающий только записи только для определенного диапазона

Я использую простой кусок VBA, который, кажется, является методом. Я использую два элемента управления (start & End) и кнопку для применения фильтра.

Он мой пример кода

With Me.Sub_Desi_Schedule.Form 
    .Filter = "[Task_End] " & " BETWEEN " & "#" & DateStart & "#" & " AND " & "#" & DateEnd & "#" 
    .FilterOn = True 

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

Я думал, что это могло быть что-то с форматом даты. Я пытался заставить его DDMMYYY. Нет эффекта, и у него было такое же странное поведение.

И для других диапазонов отборных позже на месяц, он работает отлично ...

ли кто-нибудь здесь имел эту проблему раньше? Есть ли что-то очевидное, что мне не хватает?

ответ

1

Я подозреваю, что вы правы, что проблема связана с форматом даты.

Изучите заполненную строку фильтра, которую создает код. Сделайте это, используя переменную для ее удержания. Затем вы можете использовать Debug.Print, чтобы увидеть его, а затем назначить переменной свойству .Filter.

Dim strFilter As String 
With Me.Sub_Desi_Schedule.Form 
    strFilter = "[Task_End] BETWEEN #" & DateStart & "# AND #" & DateEnd & "#" 
    Debug.Print strFilter ' <- view this in Immediate window; Ctrl+g will take you there 
    .Filter = strFilter 
    .FilterOn = True 
End With 

Вы можете избежать проблем, связанных с форматом даты, используя недвусмысленную формат гггг-м-д для значений даты/времени.

strFilter = "[Task_End] BETWEEN " & Format(DateStart, "\#yyyy-m-d\#") & " AND " & Format(DateEnd, "\#yyyy-m-d\#") 

Я добавил # разделители внутри Format выражений. Но вам не нужно так поступать; Я думаю, что это тоже должно работать ...

strFilter = "[Task_End] BETWEEN #" & Format(DateStart, "yyyy-m-d") & "# AND #" & Format(DateEnd, "yyyy-m-d") & "#" 
+1

Нет причин предполагать. Проблема (отсутствующий) формат даты является проблемой. – Gustav

+0

HansUp, ты прибил его! Это работает как freakin charm ... Я предполагаю, что отныне единственный формат даты, который будет использоваться в ЛЮБОЙ vba, будет недвусмысленным yyyy-md ... Это прекрасный день сегодня: я узнал что-то полезное , Спасибо вам! –

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