Excel精英培训网

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

[已解决]谁帮忙修改下VBA

[复制链接]
发表于 2015-12-16 14:16 | 显示全部楼层 |阅读模式
本帖最后由 teddyjin1984 于 2015-12-17 08:30 编辑

现在语句出错,请帮忙改一下,然后再帮忙增加几项功能,要求在表1中的行2上,每个都有筛选功能,就和现在的C2一样
最佳答案
2015-12-16 22:52
本帖最后由 七彩屋 于 2015-12-16 23:09 编辑


E列要设为文本格式后才能筛选
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address = "$C$2" Then
  3. ActiveSheet.AutoFilterMode = False
  4. Range("C5:C" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [c2] & "*"
  5. End If
  6. If Target.Address = "$E$2" Then
  7. ActiveSheet.AutoFilterMode = False
  8. i = Range("a65536").End(xlUp).Row
  9. Range("E6:E" & i).NumberFormatLocal = "@"
  10. Range("E6:E" & i).FormulaR1C1 = Range("E6:E" & i).Formula
  11. Range("E5:E" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [E2] & "*"
  12. End If
  13. End Sub
复制代码

跟踪表样张.rar

407.06 KB, 下载次数: 13

发表于 2015-12-16 14:27 | 显示全部楼层
回复

使用道具 举报

发表于 2015-12-16 14:33 | 显示全部楼层
出错的这句Range("A6:U" & Range("a65536").End(xlUp).Row).ClearContents,
修改成
i = Range("a65536").End(xlUp).Row
If i > 5 Then Range("A6:U" & i).ClearContents
回复

使用道具 举报

 楼主| 发表于 2015-12-16 16:02 | 显示全部楼层
七彩屋 发表于 2015-12-16 14:33
出错的这句Range("A6:U" & Range("a65536").End(xlUp).Row).ClearContents,
修改成
i = Range("a65536") ...

出错的语句可以了,谢谢!筛选功能是有的,请看图。
21.png
回复

使用道具 举报

 楼主| 发表于 2015-12-16 18:34 | 显示全部楼层
help!
回复

使用道具 举报

发表于 2015-12-16 18:53 | 显示全部楼层
  1. Sub 汇总并排序()
  2. Dim sh As Worksheet
  3. Application.ScreenUpdating = False
  4. ActiveSheet.AutoFilterMode = False
  5. i = Range("a65536").End(xlUp).Row
  6. If i > 5 Then Range("A6:U" & Range("a65536").End(xlUp).Row).ClearContents
  7.     For Each sh In Worksheets
  8.         If sh.Name <> "全部" Then
  9.            sh.Range("A5:U" & sh.Range("a65536").End(xlUp).Row).Copy Sheets("全部").Range("A" & Range("a65536").End(xlUp).Row + 1)
  10.         End If
  11.     Next
  12. Range("A5:U" & Range("a65536").End(xlUp).Row).Sort Key1:=Columns("A"), Key2:=Columns("B"), Header:=xlYes
  13.   Range("C5:U5").AutoFilter
  14. Application.ScreenUpdating = True
  15. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2015-12-16 21:09 | 显示全部楼层
七彩屋 发表于 2015-12-16 18:53

这个汇总的语句是对了,你之前把错的也已经发过了,我现在想问的是,这个筛选的功能能改成所有列都有吗现在的语句是:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$C$2" Then Exit Sub
ActiveSheet.AutoFilterMode = False
Range("C5:C" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [c2] & "*"
If Target.Address <> "$E$2" Then Exit Sub
ActiveSheet.AutoFilterMode = False
Range("E5:E" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [e2] & "*"
End Sub



但是这个只能筛选C2列的,在C2里面输入值可以做筛选,我想在行2里面所有的列都能筛选。
回复

使用道具 举报

发表于 2015-12-16 22:52 | 显示全部楼层    本楼为最佳答案   
本帖最后由 七彩屋 于 2015-12-16 23:09 编辑


E列要设为文本格式后才能筛选
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Address = "$C$2" Then
  3. ActiveSheet.AutoFilterMode = False
  4. Range("C5:C" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [c2] & "*"
  5. End If
  6. If Target.Address = "$E$2" Then
  7. ActiveSheet.AutoFilterMode = False
  8. i = Range("a65536").End(xlUp).Row
  9. Range("E6:E" & i).NumberFormatLocal = "@"
  10. Range("E6:E" & i).FormulaR1C1 = Range("E6:E" & i).Formula
  11. Range("E5:E" & [C65536].End(3).Row).AutoFilter Field:=1, Criteria1:="=*" & [E2] & "*"
  12. End If
  13. End Sub
复制代码
回复

使用道具 举报

发表于 2015-12-17 09:27 | 显示全部楼层
学习
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 02:35 , Processed in 0.270523 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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