Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2709|回复: 5

[已解决]求修复代码,原代码运行慢!谢谢!

[复制链接]
发表于 2017-9-26 16:49 | 显示全部楼层 |阅读模式
自己网上参考写了段代码,运行很慢,求修改!比如只查找“南”字,运行起来要约35秒时间。求各位老师帮忙,谢谢! 模糊查找.rar (81.56 KB, 下载次数: 12)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-9-26 17:04 | 显示全部楼层
  1. Private Sub CommandButton1_Click()
  2. If TextBox1.Text = "" Then
  3. MsgBox "请输入要查找的简称!": Exit Sub
  4. End If
  5. Application.ScreenUpdating = False
  6. Application.Calculation = xlCalculationManual
  7. Rows("31:10000").Hidden = False
  8. Range("a31:i" & [b65536].End(3).Row).AutoFilter Field:=2, Criteria1:="*" & TextBox1 & "*", Operator:=xlFilterValues
  9. Application.Calculation = xlCalculationAutomatic
  10. Application.ScreenUpdating = True
  11. End Sub

  12. Private Sub CommandButton2_Click()
  13.     VBA.Unload UserForm1
  14. End Sub

  15. Private Sub CommandButton3_Click()
  16. Application.ScreenUpdating = False
  17. Application.Calculation = xlCalculationManual
  18. Range("a31:i" & [b65536].End(3).Row).AutoFilter
  19.          
  20. Application.Calculation = xlCalculationAutomatic
  21. Application.ScreenUpdating = True
  22. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-9-26 17:41 | 显示全部楼层

怎么我的运行起来出错呢,运行时错误‘1004’  类range的autofilter方法无效。不知哪里错了,帮我看看啊
回复

使用道具 举报

发表于 2017-9-26 21:53 | 显示全部楼层    本楼为最佳答案   
Private Sub CommandButton1_Click()
If TextBox1.Text = "" Then
    MsgBox "请输入要查找的简称!": Exit Sub
End If
Dim arr, rgs As Range
t = Timer
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Rows("31:10000").Hidden = False
arr = Range("b1:b10000")
For i = 31 To 10000
    If (arr(i, 1) Like "*" & TextBox1.Text & "*") = False Then
        If rgs Is Nothing Then
        Set rgs = Range("a" & i)
        Else
        Set rgs = Union(rgs, Range("a" & i))
        End If

    End If
'    If (Cells(i, 2) Like "*" & TextBox1.Text & "*") = False Then
'        Range("a" & i).EntireRow.Hidden = True
'    End If
Next
rgs.EntireRow.Hidden = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox Timer - t
End Sub
用数组会快点
回复

使用道具 举报

发表于 2017-9-27 09:00 | 显示全部楼层
有现成的自动筛选功能不用真是可惜,处理这种问题的速度无出其右。
代码出错可能是你套用的问题,我把附件给你测试一下。
注意:由于我的EXCEL版本问题,VBA里面的汉字内容都用“!”代替了,你自己重新改下。

模糊查找.zip

107 KB, 下载次数: 5

评分

参与人数 2 +15 收起 理由
苏子龙 + 12 来学习
fggf + 3 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-9-27 13:04 | 显示全部楼层
大灰狼1976 发表于 2017-9-27 09:00
有现成的自动筛选功能不用真是可惜,处理这种问题的速度无出其右。
代码出错可能是你套用的问题,我把附件 ...

谢谢您哈![em17]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 22:52 , Processed in 0.334469 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表