Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 范围类的自动筛选方法失败-表_Vba_Excel_Autofilter - Fatal编程技术网

Vba 范围类的自动筛选方法失败-表

Vba 范围类的自动筛选方法失败-表,vba,excel,autofilter,Vba,Excel,Autofilter,我正在尝试这样做,它运行良好,我得到了基于条件筛选的表,但它给了我错误:range类的Autofilter方法失败 我不确定是否使用了正确的事件来触发此代码: 这是最后一行给出错误的部分代码 Private Sub ComboBox1_Change() Application.EnableEvents=False Dim wt As Worksheet Dim wib As Worksheet Dim i As Long, j As Long, frow As Long, ck As Boo

我正在尝试这样做,它运行良好,我得到了基于条件筛选的表,但它给了我错误:range类的Autofilter方法失败

我不确定是否使用了正确的事件来触发此代码:

这是最后一行给出错误的部分代码

Private Sub ComboBox1_Change()

Application.EnableEvents=False

Dim wt As Worksheet
Dim wib As Worksheet
Dim i As Long, j As Long, frow As Long, ck As Boolean, scol As Long, ecol As Long
Dim manName As String

manName = Me.ComboBox1.Value
Set wt = Sheet3
Set wib = Sheet9   'IB Skills Sheet

wt.Activate
wt.Range("A1") = 2

If Trim(manName) = "" Then
    MsgBox "Manager Selected is Invalid"
    Exit Sub
End If

wib.Activate
wib.Range("C2").Select
wib.AutoFilterMode = False
wib.ListObjects("Table1").Range.AutoFilter Field:=3, Criteria1:= _
    manName
我也尝试了这个,但我得到了另一个错误:

wib.AutoFilterMode = False
frow = wib.Range("A" & Rows.Count).End(xlUp).Row
wib.Range("A1:BH:" & frow).AutoFilter Field:=3, Criteria1:=manName
有趣的是,如果我在这之前放置
Debug.Print“Blah Blah…”
,我会在即时窗口中打印两次

wib.ListObjects("Table1").Range.AutoFilter Field:=3, Criteria1:= _
    manName
我不知道为什么会这样?也许我在这里使用了错误的事件处理程序?我需要你的帮助。多谢各位

例如:

如果我使用这个:

wib.Activate
wib.Range("C2").Select
wib.AutoFilterMode = False
Debug.Print "Bla.."
wib.ListObjects("Table1").Range.AutoFilter Field:=3, Criteria1:= _
    manName
MsgBox "Table Filtered"
我在即时窗口中看到这个

布拉

布拉


我从未收到Msgbox提示符,因为错误发生在它前面的行上。但是当我检查工作表上的表时,它会被过滤。

UserForm
控件事件不受
应用程序的影响。EnableEvents
属性

所以你必须适当地处理它们

如果要控制单个UserForm事件,可能需要添加一个模块级变量(例如,
EnableEvents
),并将其前后设置为
True
False
,以防止某些多事件触发

比如说

Option Explicit

Dim EnableEvents As Boolean '<~~ declare a UserForm scoped variable to account for its event handling
                            '    -> need to add a check in every event handler sub you want to control with it

Private Sub UserForm_Initialize()
    EnableEvents = True '<~~ initialize UserForm event handling variable to True
End Sub


Private Sub ComboBox1_Change()
Dim wt As Worksheet
Dim wib As Worksheet
Dim i As Long, j As Long, frow As Long, ck As Boolean, scol As Long, ecol As Long
Dim manName As String

If EnableEvents = True Then '<~~ let it "fire" the first time

    Application.EnableEvents = False '<~~ this may not be necessary anymore

    manName = Me.ComboBox1.Value
    Set wt = Sheet3
    Set wib = Sheet9   'IB Skills Sheet

    wt.Activate
    wt.Range("A1") = 2

    If Trim(manName) = "" Then
        MsgBox "Manager Selected is Invalid"
        Exit Sub
    End If

    wib.Activate
    wib.Range("C2").Select
    wib.AutoFilterMode = False

    EnableEvents = False '<~~ set UserForm event handling variable to False so as not to have this event fired again till next setting it to True
    wib.ListObjects("Tabella1").Range.AutoFilter Field:=3, Criteria1:=manName
    EnableEvents = True '<~~ set UserForm event handling variable back to True to have this event fired normally

    Application.EnableEvents = True ''<~~ this may not be necessary anymore

End If

End Sub

UserForm
控件事件不受
应用程序的影响。EnableEvents
属性

所以你必须适当地处理它们

如果要控制单个UserForm事件,可能需要添加一个模块级变量(例如,
EnableEvents
),并将其前后设置为
True
False
,以防止某些多事件触发

比如说

Option Explicit

Dim EnableEvents As Boolean '<~~ declare a UserForm scoped variable to account for its event handling
                            '    -> need to add a check in every event handler sub you want to control with it

Private Sub UserForm_Initialize()
    EnableEvents = True '<~~ initialize UserForm event handling variable to True
End Sub


Private Sub ComboBox1_Change()
Dim wt As Worksheet
Dim wib As Worksheet
Dim i As Long, j As Long, frow As Long, ck As Boolean, scol As Long, ecol As Long
Dim manName As String

If EnableEvents = True Then '<~~ let it "fire" the first time

    Application.EnableEvents = False '<~~ this may not be necessary anymore

    manName = Me.ComboBox1.Value
    Set wt = Sheet3
    Set wib = Sheet9   'IB Skills Sheet

    wt.Activate
    wt.Range("A1") = 2

    If Trim(manName) = "" Then
        MsgBox "Manager Selected is Invalid"
        Exit Sub
    End If

    wib.Activate
    wib.Range("C2").Select
    wib.AutoFilterMode = False

    EnableEvents = False '<~~ set UserForm event handling variable to False so as not to have this event fired again till next setting it to True
    wib.ListObjects("Tabella1").Range.AutoFilter Field:=3, Criteria1:=manName
    EnableEvents = True '<~~ set UserForm event handling variable back to True to have this event fired normally

    Application.EnableEvents = True ''<~~ this may not be necessary anymore

End If

End Sub

在Debug.Print语句中放置一个breakpoit。当您首先到达时,继续F5,下次使用Ctrl-L检查堆栈跟踪。然后您将发现Sub-Trugger中的哪个语句触发了事件again@DirkHorsten谢谢你的建议,我从来没有试过,但现在我会的。没有任何东西可以再次触发它,而且我在
应用程序中禁用了事件。EnableEvents=False
所以它不应该处理它吗?有循环吗?因为你的声明说它打印了两次。我看不出你的代码有任何错误。不要使用F5,而是将光标放在代码中,并使用F8移动每一行以识别错误。@Sixthsense感谢我尝试了它,程序的控制在筛选表后立即转到开始。筛选表会触发comboBox1_更改事件,因为它的rowsource属性链接到表,这就是原因。感谢您的帮助。但是为什么
应用程序.EnableEvents=False
不能防止出现任何关于如何避免这种情况的建议呢?请在Debug.Print语句中添加一个breackpoit。当您首先到达时,继续F5,下次使用Ctrl-L检查堆栈跟踪。然后您将发现Sub-Trugger中的哪个语句触发了事件again@DirkHorsten谢谢你的建议,我从来没有试过,但现在我会的。没有任何东西可以再次触发它,而且我在
应用程序中禁用了事件。EnableEvents=False
所以它不应该处理它吗?有循环吗?因为你的声明说它打印了两次。我看不出你的代码有任何错误。不要使用F5,而是将光标放在代码中,并使用F8移动每一行以识别错误。@Sixthsense感谢我尝试了它,程序的控制在筛选表后立即转到开始。筛选表会触发comboBox1_更改事件,因为它的rowsource属性链接到表,这就是原因。谢谢你的帮助。但是为什么
应用程序.EnableEvents=False
不能阻止任何关于如何避免这种情况的建议发生呢?非常感谢你的帮助:)我也不知道应用程序.EnableEvents不适用于Userform事件。欢迎你。除了这个问题之外,您可以在不使用任何
Activate
Select
语句的情况下清理代码,因为它们(几乎)总是不必要的。谢谢您的帮助:)我也不知道Application.EnableEvents不适用于Userform事件。欢迎您。除此问题外,您可以在不使用任何
Activate
Select
语句的情况下清理代码,因为它们(几乎)总是不必要的