Excel 15.0.4833.1001
赢得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
已经过滤的范围。
关于导致这种奇怪的过早退出 - 无错误行为和/或如何避免它的想法?
推测:
与用户表格有关的事项在关闭或停用之前不放弃活动窗口焦点。