Excel精英培训网

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

[已解决]VBA 自订自动筛选问题(选择“包含”公式)

[复制链接]
发表于 2017-3-29 16:07 | 显示全部楼层 |阅读模式
本帖最后由 lkk0063 于 2017-4-5 10:28 编辑

程式码如下,若想要达成以下条件,该如何设定
1.jpg
=========================================================
Private Sub CommandButton3_Click()
ActiveSheet.AutoFilterMode = False
Dim Rng As Range
Dim lotno, xrr
Set Rng = Sheets("AA").Range("a5:a" & Sheets("AA").[a65536].End(3).Row)
With Rng
  xrr = Split(Me.Range("G2").Value, "-")
  lotno = IIf(UBound(xrr) = 2, xrr(0) & "-" & xrr(1), xrr(0))
  .AutoFilter Field:=1, Criteria1:=xrr(0), Operator:=xlAnd
  End With
  End Sub

=========================================================
最佳答案
2017-3-30 15:38
回答如下:
1、sheets("11")处于保护状态,所以无法显示全部,解决方法同autofilter按钮:
    Sheets("11").Unprotect Password:="1"
    If Sheets("11").AutoFilterMode = True Then Sheets("11").ShowAllData
    Sheets("11").Protect Password:="1"

2、BB工作表的G2单元格无数据时,由于无法正确取得内容,赋予了lotno不存在的数组元素,所以会出错,解决方法:If [g2] <> "" Then lotno = IIf(UBound(xrr) = 1, xrr(0) & "-" & xrr(1), xrr(0))

3、AutoFilter按钮你现在的设定是sheets("11")筛选后不做任何操作,当然不会移除自动筛选设定。
  a.移除自动筛选设定:Sheets("11").AutoFilterMode = False
   或
   b.显示全部数据:Sheets("11").ShowAllData
   添加代码到合适的位置。

VBA-test.zip

65.58 KB, 下载次数: 8

发表于 2017-3-29 16:31 | 显示全部楼层
  1. .AutoFilter Field:=1, Criteria1:="*" & xrr(0) & "*", Operator:=xlAnd
复制代码
回复

使用道具 举报

 楼主| 发表于 2017-3-30 13:48 | 显示全部楼层
本帖最后由 lkk0063 于 2017-3-30 14:01 编辑

你好,
程式码可以使用, 但仍有小问题仍需解决, 如下
1) 当Sheet "BB"无资料, 按下 "Add data"按钮, 会出现 执行错误"1004":Classw Worksheet的ShowAllData方法失败 1.jpg
2) 当Sheet "BB"无资料, 按下 "AutoFilter"按钮, 会出现 执行错误"9":阵列所引超出范围
2.jpg
3) 当按下 "AutoFilter"按钮,会解除密码, 执行完会再恢复密码, 但 Sheet "11"无法移除自动筛选设定, 有办法解决吗?
3.jpg


VBA-test.zip

54.96 KB, 下载次数: 6

回复

使用道具 举报

发表于 2017-3-30 15:38 | 显示全部楼层    本楼为最佳答案   
回答如下:
1、sheets("11")处于保护状态,所以无法显示全部,解决方法同autofilter按钮:
    Sheets("11").Unprotect Password:="1"
    If Sheets("11").AutoFilterMode = True Then Sheets("11").ShowAllData
    Sheets("11").Protect Password:="1"

2、BB工作表的G2单元格无数据时,由于无法正确取得内容,赋予了lotno不存在的数组元素,所以会出错,解决方法:If [g2] <> "" Then lotno = IIf(UBound(xrr) = 1, xrr(0) & "-" & xrr(1), xrr(0))

3、AutoFilter按钮你现在的设定是sheets("11")筛选后不做任何操作,当然不会移除自动筛选设定。
  a.移除自动筛选设定:Sheets("11").AutoFilterMode = False
   或
   b.显示全部数据:Sheets("11").ShowAllData
   添加代码到合适的位置。
回复

使用道具 举报

发表于 2017-3-30 15:43 | 显示全部楼层
第2个解释错误,不管IIF里面哪个选项是正确的,所有的选项VBA都会判断一次,所以xrr(1)不存在时肯定会出错,改成这样:lotno = IIf(InStr([g2], "-"), [g2], xrr(0))
回复

使用道具 举报

 楼主| 发表于 2017-3-30 16:43 | 显示全部楼层
大灰狼1976 发表于 2017-3-30 15:38
回答如下:
1、sheets("11")处于保护状态,所以无法显示全部,解决方法同autofilter按钮:
    Sheets("11 ...

你好,感谢你的回复, 当按下 "AutoFilter"按钮, sheet "11" 就算有密码保护也可以达成以下图示功能(可手动取消筛选)
1.jpg
2.jpg


VBA-test.zip

55.75 KB, 下载次数: 3

回复

使用道具 举报

发表于 2017-3-30 16:47 | 显示全部楼层
不明白你是什么意思,是还有问题还是找到了新方法。
在保护工作表时选择可以自动筛选后,处于保护状态也能手动筛选,但是自动筛选好像不行。
回复

使用道具 举报

 楼主| 发表于 2017-3-30 16:57 | 显示全部楼层
本帖最后由 lkk0063 于 2017-3-30 16:59 编辑
大灰狼1976 发表于 2017-3-30 16:47
不明白你是什么意思,是还有问题还是找到了新方法。
在保护工作表时选择可以自动筛选后,处于保护状态也能 ...

你好,
在保护工作表时,当按下 "AutoFilter"按钮自动筛选后, 无法选择批号(被锁定), 我想要达成, 就算在保护工作表下, 仍可手动筛选选择批号在保护工作表下, 可手动筛, 还是自动筛选后, 无法手动筛选选择批号选选择批号(我想要的结果)
1.jpg
在保护工作表下, 无法手动筛选选择批号
2.jpg



回复

使用道具 举报

发表于 2017-3-30 17:14 | 显示全部楼层
你先手动取消工作表保护,保持自动筛选模式,然后重新保护,在跳出的对话框下方“启用自动筛选”复选框内打勾。
回复

使用道具 举报

 楼主| 发表于 2017-3-31 09:14 | 显示全部楼层
大灰狼1976 发表于 2017-3-30 17:14
你先手动取消工作表保护,保持自动筛选模式,然后重新保护,在跳出的对话框下方“启用自动筛选”复选框内打 ...

有办法直接透过VB做这个动作吗?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:10 , Processed in 0.380069 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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