在UserForm中的自动过滤器范围导致过早的功能退出而没有错误

时间:2016-07-04 16:23:34

标签: excel vba runtime-error execution userform

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已经过滤的范围。

关于导致这种奇怪的过早退出 - 无错误行为和/或如何避免它的想法?

推测:

与用户表格有关的事项在关闭或停用之前不放弃活动窗口焦点。

0 个答案:

没有答案