发新话题
打印

用VBA自动隐藏“有公式但显示为空白行”怎么弄?

用VBA自动隐藏“有公式但显示为空白行”怎么弄?

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

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

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

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

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

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

附件

1.xls (34.5 KB)

2016-9-2 11:47, 下载次数: 54

回复 3楼帖子 的帖子

[24]  我去试下
引用:
原帖由 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 发表
代入以下代码:
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 编辑 ]
接上楼

Selection.SpecialCells(xlCellTypeFormulas, 22).Select

关键是这句吗?这句是什么意思
引用:
原帖由 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 发表
如果可以你上传附件说明。不需要真实数据。
我再试一下。不是因为跨表引用。

不知道我的表有什么问题,我再研究一下。周一我整理一下发附件上来。
找到真正的原因了。
是因为引用的结果是文字。就会给隐藏。

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

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

附件

1(修改) - 副本.xls (25.5 KB)

2016-9-2 18:04, 下载次数: 24

引用:
原帖由 zhendeaini 于 2016-9-5 09:46 发表
稍微改动下:
A7=IF(A1=1,Sheet1!A1,FALSE),采用逻辑关系。不然的话都为文本,系统无法识别。
这个完美 [12]
这代码只对表的sheet1有效
有两个新问题:
1、如何单独扩展到sheet2
2、扩展到整个工作簿

[ 本帖最后由 maximus 于 2016-9-5 15:27 编辑 ]
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 发表
可以用如下代码:
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 编辑 ]
[3]  习惯还没有养好。下次不会了。

看附件

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

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

附件

1(修改) - 副本 (1).xls (24.5 KB)

2016-9-5 16:26, 下载次数: 29

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


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

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

   我自己试了一下午,都没有战胜这个小问题[45]
引用:
原帖由 zhendeaini 于 2016-9-6 17:34 发表
呵呵,你太追求完美了,这样会很累的哦,好吧,再次修改了下。
[3]  学习上精益求精。

[39] 想虐下版主你结果没成功。
发新话题
查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布]  预览帖子  恢复数据  清空内容