Board logo

标题: 用VBA自动隐藏“有公式但显示为空白行”怎么弄? [打印本页]

作者: maximus    时间: 2016-9-2 11:45     标题: 用VBA自动隐藏“有公式但显示为空白行”怎么弄?

我设置了自动隐藏一般的空白行。但有些行是含有公式的就隐藏不了。

而且我的隐藏是要按一下按钮的。

1:能隐藏带公式的空白行(底色为绿色只是为了告诉看的人那些行有公式,实际使用时候底色是白色的)

2:随着数据的变化自动隐藏和显示。(去掉按钮)

注:数据的变化是根据最上面标红色的数字:可录入1.2.3.4.

[ 本帖最后由 maximus 于 2016-9-2 11:50 编辑 ]

附件: 1.xls (2016-9-2 11:47, 34.5 KB) / 该附件被下载次数 53
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=147999
作者: 匿名    时间: 2016-9-2 12:46

进来学习下[39]
作者: zhendeaini    时间: 2016-9-2 13:02     标题: 回复 1楼帖子 的帖子

一点思路:
Sub 隐藏()
    Range("A1:D20").Select  '这个区域可根据实际确定
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    Selection.EntireRow.Hidden = True
End Sub



是否符合要求?
作者: maximus    时间: 2016-9-2 14:04     标题: 回复 3楼帖子 的帖子

[24]  我去试下
作者: maximus    时间: 2016-9-2 14:07

引用:
原帖由 zhendeaini 于 2016-9-2 13:02 发表
一点思路:
Sub 隐藏()
    Range("A1:D20").Select  '这个区域可根据实际确定
    Selection.SpecialCells(xlCellTypeFormulas, 23).Select
    Selection.EntireRow.Hidden = True
End Sub



是否符合要 ...
试了下。当条件发生变化。带公式的行有数据而不是空的时候。还是给隐藏了。
作者: zhendeaini    时间: 2016-9-2 14:46     标题: 回复 5楼帖子 的帖子

代入以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
Application.ScreenUpdating = False
  Application.DisplayAlerts = False
    Rows("2:69").Select
     Selection.EntireRow.Hidden = False
      Range("A1:D69").Select
     Selection.SpecialCells(xlCellTypeFormulas, 22).Select
    Selection.EntireRow.Hidden = True
    Sheet1.[A1].Select
   Application.ScreenUpdating = True
  Application.DisplayAlerts = True
End If
End Sub

应该是这样的效果。

附件: 1(修改).xls (2016-9-2 14:46, 25 KB) / 该附件被下载次数 36
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148003
作者: maximus    时间: 2016-9-2 15:07

引用:
原帖由 zhendeaini 于 2016-9-2 14:46 发表
代入以下代码:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then
Application.ScreenUpdating = False
  Application.DisplayAlerts = False
    Rows("2: ...
太好了。这正是我想要的功能![12]

能讲解下代码的意思吗![68]  

因为我把代码弄到其他表格里面去。只改动代码指定的区域后,会把公式有数据的行给隐藏了。

[ 本帖最后由 maximus 于 2016-9-2 15:49 编辑 ]
作者: maximus    时间: 2016-9-2 15:58

接上楼

Selection.SpecialCells(xlCellTypeFormulas, 22).Select

关键是这句吗?这句是什么意思
作者: zhendeaini    时间: 2016-9-2 16:40     标题: 回复 8楼帖子 的帖子

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then   ‘当A1数据变化时
Application.ScreenUpdating = False   'Excel停止刷新,防止屏幕闪烁,目的是加快代码执行速度
  Application.DisplayAlerts = False     'Excel不显示警告和消息提示框
    Rows("2:69").Select                       '选择第2-69行,提示:这个你可以根据实际修改
     Selection.EntireRow.Hidden = False         '恢复第2-69行所隐藏的行,提示:这个你可以根据实际修改
      Range("A1:D69").Select              '选取A1:D69区域,提示:这个你可以根据实际修改
     Selection.SpecialCells(xlCellTypeFormulas, 22).Select      ‘将公式中逻辑和错误类型选择
    Selection.EntireRow.Hidden = True           '隐藏所中上一行代码的行
    Sheet1.[A1].Select                        ’以上操作后定位A1单元格
   Application.ScreenUpdating = True 'Excel启用刷新,代码执行后恢复
   Application.DisplayAlerts = True    'Excel显示警告和消息提示框
End If                                               '结束
End Sub
作者: maximus    时间: 2016-9-2 17:03

引用:
原帖由 zhendeaini 于 2016-9-2 16:40 发表
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then   ‘当A1数据变化时
Application.ScreenUpdating = False   'Excel停止刷新,防止屏幕闪烁,目的是加快代码执 ...
我找出原因了。因为我的表用了跨表引用,所以给判断为逻辑错误了。
这个怎么修改。

找到真正的原因了。和跨表引用没关系,而是因为单元格返回的数据有文字。就会给隐藏掉。

[ 本帖最后由 maximus 于 2016-9-5 08:51 编辑 ]
作者: zhendeaini    时间: 2016-9-2 17:05     标题: 回复 10楼帖子 的帖子

如果可以你上传附件说明。不需要真实数据。
作者: maximus    时间: 2016-9-2 17:50

引用:
原帖由 zhendeaini 于 2016-9-2 17:05 发表
如果可以你上传附件说明。不需要真实数据。
我再试一下。不是因为跨表引用。

不知道我的表有什么问题,我再研究一下。周一我整理一下发附件上来。
作者: maximus    时间: 2016-9-2 18:04

找到真正的原因了。
是因为引用的结果是文字。就会给隐藏。

A1输入数字1或2时,黄色格含有文字的数据行会给隐藏掉。这个怎么修改![30]

[ 本帖最后由 maximus 于 2016-9-5 08:49 编辑 ]

附件: 1(修改) - 副本.xls (2016-9-2 18:04, 25.5 KB) / 该附件被下载次数 24
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148011
作者: zhendeaini    时间: 2016-9-5 09:46     标题: 回复 13楼帖子 的帖子

稍微改动下:
A7=IF(A1=1,Sheet1!A1,FALSE),采用逻辑关系。不然的话都为文本,系统无法识别。

附件: 1(修改) - 副本.xls (2016-9-5 09:46, 27.5 KB) / 该附件被下载次数 30
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148015
作者: maximus    时间: 2016-9-5 11:09

引用:
原帖由 zhendeaini 于 2016-9-5 09:46 发表
稍微改动下:
A7=IF(A1=1,Sheet1!A1,FALSE),采用逻辑关系。不然的话都为文本,系统无法识别。
这个完美 [12]
作者: maximus    时间: 2016-9-5 15:05

这代码只对表的sheet1有效
有两个新问题:
1、如何单独扩展到sheet2
2、扩展到整个工作簿

[ 本帖最后由 maximus 于 2016-9-5 15:27 编辑 ]
作者: maximus    时间: 2016-9-5 15:39

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 1 And Target.Column = 1 Then ‘当A1数据变化时

这一条代码 放到sheet2时能否改成‘当SHEET1!A1数据变化时

[ 本帖最后由 maximus 于 2016-9-5 15:55 编辑 ]
作者: zhendeaini    时间: 2016-9-5 15:57     标题: 回复 17楼帖子 的帖子

可以用如下代码:
If sheet1.Target.Row = 1 And sheet1.Target.Column = 1
如果你单纯是要Sheet2也随Sheet1表的A1的值变化而变化,可以直接在原来的代码加上(比如): Sheet2.[A1]=Sheet1.[A1]←根据实际需要修改。
作者: maximus    时间: 2016-9-5 16:15

引用:
原帖由 zhendeaini 于 2016-9-5 15:57 发表
可以用如下代码:
If sheet1.Target.Row = 1 And sheet1.Target.Column = 1
如果你单纯是要Sheet2也随Sheet1表的A1的值变化而变化,可以直接在原来的代码加上(比如): Sheet2.[A1]=Sheet1.[A1]←根据实际需要修改 ...
试了一下。放sheet2时候vba显示是红色的。测试没有生效。
我加了个Then 后变黑色。但是也没有用。
我的sheet1工作表是有改名字的,这个有没有影响?

我看代码的理解是sheet是代表工作表排序的,而不是工作表的名字吧?!

[ 本帖最后由 maximus 于 2016-9-5 16:19 编辑 ]
作者: zhendeaini    时间: 2016-9-5 16:18     标题: 回复 19楼帖子 的帖子

要不你还是上传附件吧,这样描述,不知要达到怎样的效果。
作者: maximus    时间: 2016-9-5 16:26

[3]  习惯还没有养好。下次不会了。

看附件

我增加了一个工作表。名字叫"2"

改数字时候。工作表"1”隐藏了。工作表"2"没隐藏。

附件: 1(修改) - 副本 (1).xls (2016-9-5 16:26, 24.5 KB) / 该附件被下载次数 29
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148052
作者: zhendeaini    时间: 2016-9-6 08:42     标题: 回复 21楼帖子 的帖子

简单修改下,请参考:

附件: 1(修改) - 副本 (1).xls (2016-9-6 08:42, 34 KB) / 该附件被下载次数 26
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148053
作者: maximus    时间: 2016-9-6 09:47

引用:
原帖由 zhendeaini 于 2016-9-6 08:42 发表
简单修改下,请参考:
[12]  化繁为简。一点都不简单[39]


厉害。高手就高手。
作者: maximus    时间: 2016-9-6 10:04

引用:
原帖由 zhendeaini 于 2016-9-6 08:42 发表
简单修改下,请参考:
试用一下。太好用了!

[ 本帖最后由 maximus 于 2016-9-6 10:44 编辑 ]
作者: zhendeaini    时间: 2016-9-6 11:00     标题: 回复 23楼帖子 的帖子

客气,互相交流[82]
作者: maximus    时间: 2016-9-6 17:17

引用:
原帖由 zhendeaini 于 2016-9-6 11:00 发表
客气,互相交流[82]
sheet1能很完美隐藏,sheet3隐藏后单元格会有些线,这些能否增加一些定位的语句改善这个问题。

   我自己试了一下午,都没有战胜这个小问题[45]
作者: zhendeaini    时间: 2016-9-6 17:34     标题: 回复 26楼帖子 的帖子

呵呵,你太追求完美了,这样会很累的哦,好吧,再次修改了下。

附件: 1(修改) - 副本 (1).xls (2016-9-6 17:34, 34 KB) / 该附件被下载次数 26
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=148135
作者: maximus    时间: 2016-9-7 08:00

引用:
原帖由 zhendeaini 于 2016-9-6 17:34 发表
呵呵,你太追求完美了,这样会很累的哦,好吧,再次修改了下。
[3]  学习上精益求精。

[39] 想虐下版主你结果没成功。
作者: zhendeaini    时间: 2016-9-7 09:02     标题: 回复 28楼帖子 的帖子

不要再虐我了,我本菜鸟一枚。[25]




欢迎光临 BBS (http://hahabbs.w1.luyouxia.net/bbs/) Powered by Discuz! 6.0.0