Excel精英培训网

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

[已解决]如何自动隐藏符合条件的列?

[复制链接]
发表于 2014-8-27 04:09 | 显示全部楼层 |阅读模式
本帖最后由 tinytiger 于 2014-8-27 15:31 编辑

当T2~AB2单元格为空时,如何自动隐藏该单元格所在的列?如果不为空的时候,又能自动恢复显示?
最佳答案
2014-8-27 08:26
本帖最后由 fffox 于 2014-8-27 08:29 编辑

复制代码
注意,应先取消S1:AC1的合并单元格!
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim Rng As Range
  3.     For Each Rng In Range("t2:ab2")
  4.         If Rng.Value = "" Then
  5.             Rng.EntireColumn.Hidden = True
  6.         Else
  7.             Rng.EntireColumn.Hidden = False
  8.         End If
  9.     Next
  10. End Sub
复制代码
发表于 2014-8-27 08:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 fffox 于 2014-8-27 08:29 编辑

复制代码
注意,应先取消S1:AC1的合并单元格!
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     Dim Rng As Range
  3.     For Each Rng In Range("t2:ab2")
  4.         If Rng.Value = "" Then
  5.             Rng.EntireColumn.Hidden = True
  6.         Else
  7.             Rng.EntireColumn.Hidden = False
  8.         End If
  9.     Next
  10. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-8-27 09:37 | 显示全部楼层
fffox 发表于 2014-8-27 08:26
注意,应先取消S1:AC1的合并单元格!

谢谢!如果不能取消合并有什么办法吗?
回复

使用道具 举报

发表于 2014-8-27 10:19 | 显示全部楼层
本帖最后由 yangyangzhifeng 于 2014-8-27 10:25 编辑

试试看
  1. Private Sub Worksheet_Change(ByVal Target As Range)    Dim Rng As Range
  2.     If Not Intersect(Target, Range("a2:ab2")) Is Nothing Then
  3.     Me.Unprotect
  4.     Application.ScreenUpdating = False
  5.         For Each Rng In Range("t2:ab2")
  6.             If Rng.Value = "" Then
  7.                 Rng.EntireColumn.Hidden = True
  8.             Else
  9.                 Rng.EntireColumn.Hidden = False
  10.             End If
  11.         Next
  12.     End If
  13.     Application.ScreenUpdating = True
  14.     Me.Protect
  15. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-8-27 10:28 | 显示全部楼层
本帖最后由 tinytiger 于 2014-8-27 10:30 编辑
yangyangzhifeng 发表于 2014-8-27 10:19
试试看

老师,我按您的要求取消了合并单元格,条件改成T1-AB1,实现了自动隐藏,谢谢!
回复

使用道具 举报

 楼主| 发表于 2014-8-27 10:35 | 显示全部楼层
本帖最后由 tinytiger 于 2014-8-27 11:03 编辑
yangyangzhifeng 发表于 2014-8-27 10:19
试试看

现在是选中每个单元格的时候都自动刷新,我想只有汇总表__科室人员变动(增加或删除)的时候才实现自动隐藏和恢复显示,怎么实现?谢谢!
回复

使用道具 举报

发表于 2014-8-27 14:49 | 显示全部楼层
tinytiger 发表于 2014-8-27 10:35
现在是选中每个单元格的时候都自动刷新,我想只有汇总表__科室人员变动(增加或删除)的时候才实现自动隐 ...

用我写的代码就不会出现你说的问题,只有你要检测单元格变化时才会执行代码。要将你原来Worksheet_SelectionChange的代码删掉,用我写的Worksheet_Change代码就好了
回复

使用道具 举报

 楼主| 发表于 2014-8-27 15:02 | 显示全部楼层
yangyangzhifeng 发表于 2014-8-27 14:49
用我写的代码就不会出现你说的问题,只有你要检测单元格变化时才会执行代码。要将你原来Worksheet_Select ...

我改成了打开工作薄时执行一次,代码如下:
Private Sub Workbook_Open()
Dim Rng As Range
    For Each Rng In Range("登记表!T1:登记表!AB1")
        If Rng.Value = "" Then
            Rng.EntireColumn.Hidden = True
        Else
            Rng.EntireColumn.Hidden = False
        End If
    Next
End Sub
但是有缺点,更新了科室人员后,只能下次打开工作薄才能更新,如有12张(1-12月份)表时该怎么处理?

回复

使用道具 举报

 楼主| 发表于 2014-8-27 15:07 | 显示全部楼层
yangyangzhifeng 发表于 2014-8-27 14:49
用我写的代码就不会出现你说的问题,只有你要检测单元格变化时才会执行代码。要将你原来Worksheet_Select ...

用什么代码改成选定S1单元格才更新?
回复

使用道具 举报

发表于 2014-8-27 15:12 | 显示全部楼层
tinytiger 发表于 2014-8-27 15:02
我改成了打开工作薄时执行一次,代码如下:
Private Sub Workbook_Open()
Dim Rng As Range

公式计算不会触发change事件,你可以自己将代码改成你要检测的单元格区域来触发change事件。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-2 17:02 , Processed in 0.317796 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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