ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1053|回复: 6

[求助] 怎样实现自动筛选

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-3-30 16:48 | 显示全部楼层 |阅读模式
我一张汇总表,一张明细表,有没有方法可以实现在汇总表上点击产品名称后会自动打开明细表并进行筛选?

1.jpg
2.jpg
3.jpg

自动筛选.rar

6.43 KB, 下载次数: 28

TA的精华主题

TA的得分主题

发表于 2021-3-31 08:51 | 显示全部楼层
供参考。

等闲人物_自动筛选.rar

10.3 KB, 下载次数: 80

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 09:21 | 显示全部楼层
能用,但怎么实现的呀,感觉很神奇,却完全一脸懵,求教!!

TA的精华主题

TA的得分主题

发表于 2021-3-31 09:47 | 显示全部楼层
等闲人物 发表于 2021-3-31 09:21
能用,但怎么实现的呀,感觉很神奇,却完全一脸懵,求教!!

右键点击工作表标签,选择“查看代码”。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 10:08 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这是用到了宏编程?看着好复杂的样子啊。

TA的精华主题

TA的得分主题

发表于 2021-3-31 12:35 | 显示全部楼层
这个帖子也许可以成为你学编程的启蒙课。
1、用户需求
在汇总表上点击产品名称后会自动打开明细表并进行筛选?
这里的一个关键词是“点击”,这里的点击,指的是“点击单元格”。
我们希望点击单元格(产品名称)后自动打开明细表;
或者,点击单元格后,自动生成一个当前日期……
或者,点击单元格后,自动填充一个颜色……
或者,点击单元格后,自动汇总一个数据……
等等

2、认识工作表事件
在Excel中,系统为我们提供一个事件,SelectionChange,就是处理“选定一个新的单元格区域”后,简称“点击”后,允许用户处理表格或数据。
在当前工作表模块中,添加下面两行代码:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)

  2. End Sub
复制代码
新手看这行代码,第一反应也是是“记不住”,这个不用担心,我也没记住。
在代码窗口工作表模块中,用鼠标点击对象框的下拉箭头,选择“Worksheet”,窗口中就会自动添加上面这两行代码。
QQ截图20210331112514.png

把你想做的事,写在代码块中间就可以,代码编写完毕后,返回工作表,只要选定了新的单元格(区域),系统就会执行这段代码。
3、Target 参数
括号里面的Target是一个参数,代表所选定的单元格,选定的是A1,Target就代表A1,选定B3:G7,Target就代表B3:G7,在程序中可以使用Target代表所选定的单元格。
举个简单的例子,选定哪个单元格,哪个单元格就显示数字1,代码可以这样写:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Target = 1
  3. End Sub
复制代码

首尾两行是系统自动生成的,我们要写的就是中间的一句代码。
当点击单元格时,希望显示当前日期,代码可以这样写:
Target=Date
如果希望,把选定的单元格合并,代码可以这样写:
Target.Merge

Target是系统默认的参数名,也可以使用自定义名称,如:Dyg、单元格:
  1. Private Sub Worksheet_SelectionChange(ByVal 单元格 As Range)
  2. 单元格 = Date
  3. End Sub
复制代码

4、VBA语法
VBA是一种编程语言,是语言就有语法。其中“if……then……”是最常用的一种语法,称条件语句,就是“如果……就……”的意思。
当单元格为空时,自动给该单元格填充当前时间,否则,清空该单元格。
编程实现这个需求,就要用上条件语句:
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If Target.Value = "" Then  '如果单元格的值等于空,则
  3.         Target.Value = Time    '给单元格赋值:系统时间
  4.     Else                       '否则
  5.         Target.Value = ""      '给单元格赋值:空值
  6.     End If                     '结束条件语句
  7. End Sub
复制代码
注意:上面的代码,当选定多个单元格时会出错。
5、对象、属性与方法
前面代码中,Target代表选定是单元格,它是一个对象。如果要引用其它单元格,可以使用Range(),见程序示例。
Value是单元格其中一个属性,意思是“值”,Target.Value理解为单元格的值。Merge是单元格的一个方法——将单元格合并。

6、示例
Private Sub Worksheet_SelectionChange(ByVal Target As Range) '选定新的单元格区域时,自动执行下面的代码(Target引用选定的单元格区域)
    Dim cCP$, nRow% '定义两个变量
    If Target.Row = 1 Or Target.Column > 1 Then Exit Sub '如果选定的单元格在第1行,或者不是第1列,则退出程序,不再运行下面的代码
    If Target.CountLarge > 1 Then Exit Sub '如果选定超过1个单元格的区域,则退出程序
    If Target.Value = "" Then Exit Sub '如果选定的单元格为空,则退出程序
    cCP = Target.Value '把当前单元格的值保存到变量cCP中
    With Sheets("明细") '在“明细”工作表中
        nRow = .Range("a65536").End(xlUp).Row '获得A列数据最大行号,并保存到变量nRow中
        .Range("$A$1:$D$" & nRow).AutoFilter Field:=1, Criteria1:=cCP '自动筛选
        .Activate '激活工作表
    End With
End Sub



评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-3-31 13:09 | 显示全部楼层
学excel的编程应该是一门系统的学科,如果有其他语言的基础应该会容易一些吧?
有什么教材推荐,我想好好学一下,不求多精通,至少以后遇到类似表格的时候希望自己能够独立解决,或者通过查找资料自己能独立解决。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-22 13:01 , Processed in 0.039724 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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