2014-11-17 2 views
1

У меня возникает проблема при попытке поиска в комбинированном поле, которое динамически фильтрует непрерывную форму. Код выглядит следующим образом:Проблемы с ошибкой Runtime '2185' при использовании комбинированного поля для динамического поиска в непрерывной форме

Private Sub cboFormFilter_Change() 

    If Nz(Me.cboFormFilter.Text) = "" Then 
     Me.Form.Filter = "" 
     Me.FilterOn = False 

     ElseIf Me.cboFormFilter.ListIndex <> -1 Then 
      Me.Form.Filter = "[Description] = '" & _ 
       Replace(Me.cboFormFilter.Text, "'", """") & "'" 
      Me.FilterOn = True 

     Else 
      Me.Form.Filter = "[Description] Like '*" & _ 
       Replace(Me.cboFormFilter.Text, "'", """") & "*'" 
      Me.FilterOn = True 

    End If 

    Me.cboFormFilter.SetFocus 
    Me.cboFormFilter.SelStart = Len(Me.cboFormFilter.Text) 

End Sub 

Этот код работает отлично, но второй я печатаю то, что не на непрерывной форме, он даст мне ошибку времени выполнения «2185'

, например, если в моей непрерывной форме есть записи под названием «Hello World», и я набираю Hello Worlds, она выдает ошибку.

Я искал в Интернете, чтобы узнать, что происходит, но не мог понять У других людей были проблемы, похожие на то, что у меня есть, и они сказали удалить .Text, но это все еще приводит к ошибке 2185. У меня нет идей и мой мозг растаял. Есть идеи?

+0

В теории, я хотел бы его вернуть сообщение, уведомляющее пользователя о том, что нет никаких записей, или даже позволяют пользователю печатать, даже если записи не найдены. Однако вместо этого он дает мне ошибку 2185. – Dylan

ответ

1

Ошибка выполнения 218 'при запуске Googling дает результаты об ошибке, возникающей при попытке доступа к свойствам элемента управления без фокуса элемента управления (было бы неплохо включить в ваш вопрос сообщение об ошибке).

Кажется странным, что управление не будет иметь фокуса, так как это , который управляет, поднимая Change событие, которое вы обрабатываете здесь.

Так что я бы просто обернуть код в обработчик ошибок и работать оттуда:

On Error GoTo CleanFail 

    'your code 

CleanExit: 
    Exit Sub 
CleanFail: 
    If Err.Number = 2158 Then 
     'handle the error - msgbox, whatever 
     Err.Clear 
     Resume CleanExit 
    End If 
+1

.text НЕ является свойством по умолчанию. свойство по умолчанию - .value. Оба .value и .text могут рассматриваться независимо друг от друга, однако свойство .text доступно ТОЛЬКО, когда элемент управления имеет фокус. Как «общий» подход, мы всегда используем значение и, следовательно, фокус не имеет значения. Однако значение «control» не обновляется до тех пор, пока фокус управления не изменится. Поэтому для большинства кода со списком он должен быть помещен в событие после обновления, а свойство .value по умолчанию может и СЛЕДУЕТ использоваться. Единственное «реальное» использование .text находится в событии on-change для проверки текущего содержимого элемента управления. –

+0

@ AlbertD.Kallal Полезно знать; Я признал это предположение. Отредактировал эту часть для правильности. Благодаря! –

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