2013-03-28 75 views
0

我已经设置了一个ActiveX文本框,使用以下代码筛选1,400个奇数行的自动筛选数据;自动筛选结果的ActiveX文本框搜索非常缓慢 - Excel 2010

Private Sub TextBox3_Change() 

Application.Calculation = xlManual 

    Application.ScreenUpdating = False 
Selection.AutoFilter Field:=5, Criteria1:="*" & TextBox3.Value & "*", Operator:=xlOr 

On Error Resume Next 

If Range("B7:B1307").SpecialCells(xlCellTypeVisible).Count = 0 Then 
Call ClearAllFilters 

    ActiveSheet.Range("B7:B1307").AutoFilter Field:=5, Criteria1:="<>" 

Selection.AutoFilter Field:=6, Criteria1:="*" & TextBox3.Value & "*", Operator:=xlOr 
End If 
     Application.ScreenUpdating = True 
Application.Calculation = xlAutomatic 
End Sub 

的问题是,随着每一次击键它的计算 - 以高达每按键20秒。

有没有办法阻止它做任何事情,直到用户按下输入(优选!)或焦点从文本框中移除?

我的道歉,如果上面的代码不显示正确的!它看起来不错,但预览看起来有点棘手!

谢谢, 马特

回答

1

试试这个

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _ 
ByVal Shift As Integer) 
    '~~> Trap enter key 
    Select Case KeyCode 
     Case 13 
      '~~> Your code goes here 
    End Select 
End Sub 
+0

亚洲时报Siddharth先生,你”重新夺冠!我知道他们更愿意使用回车键进行搜索,所以在两种方法都行的时候,我会和你一起去。 谢谢你们两位! – Matteous 2013-03-28 07:50:23

+0

如果我想添加一个额外的问题,我需要提交一个新的问题?我去添加我需要帮助的代码,它说我超过了允许的字符数量。 对不起,新手,我已经搜查了规则等,但找不到任何东西。 基本上使用原始帖子中的代码,我希望能够在两个单独的列中搜索文本或数字的任何部分。 – Matteous 2013-03-28 09:04:58

+0

我会建议发布作为一个新的问题:)确保你发布最后的代码,你得到的错误信息(如果有的话)和线是哪里给你的错误:) – 2013-03-28 09:15:02

0

而在你的第二个想法,当用户离开你可以使用下面的事件文本框:

Private Sub TextBox1_LostFocus() 
    'your code goes here 

End Sub 
+0

太简单了!自从加入这个网站以来,我学到了很多东西,只有第二天!谢谢你KazJaw! – Matteous 2013-03-28 07:49:41