Excel精英培训网

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

[已解决]能不能加个取消筛选的代码?

[复制链接]
发表于 2013-3-2 21:48 | 显示全部楼层 |阅读模式
本帖最后由 dadasdas 于 2013-3-3 11:14 编辑

有AB工作簿,把A工作簿筛选出来的数据粘贴到B工作簿,执行宏以后A工作簿处于筛选状态,
能不能加个取消A工作簿筛选的代码?
附件: AB.rar (10.28 KB, 下载次数: 25)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-3-2 21:52 | 显示全部楼层
先检测是否打开筛选,如果打开,则取消。
回复

使用道具 举报

发表于 2013-3-2 21:54 | 显示全部楼层
  1. Sub aa()
  2.     Rows("4:4").AutoFilter
  3.     Selection.AutoFilter Field:=5, Criteria1:="1"
  4.     Rows("4:4").AutoFilter
  5. Call bb
复制代码
回复

使用道具 举报

发表于 2013-3-2 21:55 | 显示全部楼层
Range.AutoFilter 方法
使用“自动筛选”筛选一个列表。
语法

表达式.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)

表达式   一个返回 Range 对象的表达式。

参数

名称 必选/可选 数据类型 说明
Field 可选 Variant 相对于作为筛选基准字段(从列表左侧开始,最左侧的字段为第一个字段)的字段的整型偏移量。
Criteria1 可选 Variant 筛选条件(一个字符串;例如,“101”)。使用“=”可查找空字段,或者使用“<>”查找非空字段。如果省略该参数,则搜索条件为 All。如果将 Operator 设置为 xlTop10Items,则 Criteria1 指定数据项个数(例如,“10”)。
Operator 可选 XlAutoFilterOperator 指定筛选类型的 XlAutoFilterOperator 常量之一。
Criteria2 可选 Variant 第二个筛选条件(一个字符串)。与 Criteria1 和 Operator 一起组合成复合筛选条件。
VisibleDropDown 可选 Variant 如果为 True,则显示筛选字段的自动筛选下拉箭头。如果为 False,则隐藏筛选字段的自动筛选下拉箭头。默认值为 True。

返回值
Variant

说明


如果忽略全部参数,此方法仅在指定区域切换自动筛选下拉箭头的显示。

回复

使用道具 举报

 楼主| 发表于 2013-3-2 22:06 | 显示全部楼层
hwc2ycy 发表于 2013-3-2 21:54

不行啊,这样把A工作簿全部数据复制过去了,要的是筛选的数据到B工作簿?
回复

使用道具 举报

发表于 2013-3-2 22:17 | 显示全部楼层
本帖最后由 hwc2ycy 于 2013-3-2 22:18 编辑
  1. Sub aa()
  2.     Rows("4:4").AutoFilter Field:=5, Criteria1:="1"
  3.     Call bb
  4.     Rows("4:4").AutoFilter
  5. End Sub
复制代码
没注意你用的BB
回复

使用道具 举报

 楼主| 发表于 2013-3-3 10:35 | 显示全部楼层
hwc2ycy 发表于 2013-3-2 22:17
没注意你用的BB

能不能把这两个宏合成一个?
回复

使用道具 举报

发表于 2013-3-3 10:47 | 显示全部楼层
这样分开不好嘛?
模块化一点。
合并肯定是可以的。你把BB的代码放到AA里,。
回复

使用道具 举报

发表于 2013-3-3 10:50 | 显示全部楼层    本楼为最佳答案   
  1. Sub aa()
  2.     Rows("4:4").AutoFilter
  3.     Rows("4:4").AutoFilter Field:=5, Criteria1:="1"
  4.     '-------------原来的BB 过程代码------------------------
  5.     Dim arr, brr(), i%, lr&, sh As Worksheet, c As Range
  6.     Application.ScreenUpdating = False
  7.     arr = Array(0, 0, 5, 7, 8, 0, 9, 17)
  8.     Set sh = ActiveSheet
  9.     lr = sh.UsedRange.Row + sh.UsedRange.Rows.Count - 1
  10.     ReDim brr(1 To lr, 1 To 1)
  11.     With Workbooks.Open(ThisWorkbook.Path & "\B.xls")
  12.         With .Sheets(1)
  13.             For i = 2 To UBound(arr)
  14.                 If arr(i) Then
  15.                     m = 0
  16.                     For Each c In Intersect(sh.Cells(5, arr(i)).Resize(lr), sh.Columns(arr(i)).SpecialCells(12))
  17.                         m = m + 1
  18.                         brr(m, 1) = c.Value
  19.                     Next
  20.                     .Cells(4, i).Resize(m) = brr
  21.                 End If
  22.             Next
  23.         End With
  24.         .Close True
  25.     End With
  26.     Application.ScreenUpdating = True
  27.     '---------------BB过程代码-------------

  28.     Rows("4:4").AutoFilter

  29. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 07:30 , Processed in 0.351425 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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