Диапазон автофильтрации в UserForm приводит к преждевременному отключению функции без ошибок

Excel 15.0.4833.1001
Win 7 Pro 64 бит


Обновить:

У меня есть приблизительная причина. Фильтрующий диапазон данных также является RowSource для списка в моем UserForm . Я изменил функцию, чтобы скопировать все данные во временный лист, а затем выполнить все операции, и теперь он работает нормально.


У меня есть функция GetFileredDataRange которая принимает имя providerName , соответственно фильтрует rawDataRange и копирует отфильтрованные результаты на новый рабочий лист.


Функция:

  Public Function GetFilteredDataRange(ByVal providerName As String) As Range '/ returns range containing filtered data Const PROVIDER_COLUMN As Long = 2 Dim rawFinalrow As Long rawFinalrow = wsInputs.Cells(1, 1).End(xlDown).Row Dim rawFinalColumn As Long rawFinalColumn = wsInputs.Cells(1, 1).End(xlToRight).Column Dim rawDataRange As Range Set rawDataRange = wsInputs.Range(wsInputs.Cells(1, 1), wsInputs.Cells(rawFinalrow, rawFinalColumn)) If wsInputs.AutoFilterMode And wsInputs.FilterMode Then wsInputs.ShowAllData If providerName <> "All" Then '/========================================================== '/============== Unexpected behaviour here (#1) ============ '/========================================================== On Error GoTo cleanFail '/ causing unexpected exit when called from userform rawDataRange.AutoFilter Field:=PROVIDER_COLUMN, Criteria1:=providerName On Error GoTo 0 End If wsFilteredInputs.Cells.ClearContents wsInputs.Cells(1, 1).CurrentRegion.Copy wsFilteredInputs.Cells(1, 1).PasteSpecial xlPasteValues If wsInputs.AutoFilterMode Then wsInputs.Cells.AutoFilter Set GetFilteredDataRange = wsFilteredInputs.Cells(1, 1).CurrentRegion Exit Function cleanFail: Debug.Print "Error Triggered" Stop End Function 

Эта функция отлично работает, когда вызывается так из непосредственного окна:

 GetFilteredDataRange "Aegon" 

Однако, если я вызываю эту функцию из UserForm , например:

 Private Sub ProviderSelectBox_Click() '/ (#2) Dim selectedName As String selectedName = "Aegon" '/ set manually for now while testing functionality Dim filteredDataRange As Range Set filteredDataRange = GetFilteredDataRange(selectedName) AccountSelectBox.RowSource = filteredDataRange.Address End Sub 

Затем происходит странное поведение. В частности:

Код будет работать, как ожидалось, в проблемной строке (# 1).
Затем диапазон будет автоматически фильтроваться, но выполнение кода вернется к вызывающей процедуре (# 2) в пользовательской форме.
Затем он снова запустится и либо повторит то же поведение, либо, в конце концов, ошибку, потому что эта строка:

  If wsInputs.AutoFilterMode And wsInputs.FilterMode Then wsInputs.ShowAllData 

не срабатывает после первого раза. Поэтому он пытается установить Autofilter уже отфильтрованный диапазон.

Мысли о том, что вызывает это странное поведение преждевременного выхода-без ошибок и / или как его избежать?


Спекуляция:

Что-то делать с пользовательскими формами, не отбрасывая фокус активного окна, пока они не будут закрыты или дезактивированы.


Давайте будем гением компьютера.