ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教前辈:如何使用VBA根据指定的条件隐藏工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-1-16 17:02 | 显示全部楼层 |阅读模式

各位VBA前辈好,最近晚辈在学习VBA,但也只是学了些皮毛,学习中遇到一些问题,来这里求教,还希望大神能不吝赐教,谢谢

VBA求教:满足条件隐藏工作表和行.zip

151.65 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2021-1-16 17:32 | 显示全部楼层
  1. Sub test()
  2. Dim i&, rng As Range, s$
  3. With Sheets("首页")
  4.   For i = 3 To 19 '根据需要修改
  5.     If .Cells(i, "i") = "完成" Then
  6.       If rng Is Nothing Then Set rng = .Rows(i) Else Set rng = Union(rng, .Rows(i))
  7.       s = s & "," & .Cells(i, 1)
  8.     End If
  9.   Next i
  10. End With
  11. If Not rng Is Nothing Then
  12.   rng.RowHeight = 0
  13.   Sheets(Split(Mid(s, 2), ",")).Visible = False
  14. End If
  15. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-16 20:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

厉害了老师,我足足弄了一天都没解决,大神终究是大神

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-16 20:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
取消隐藏工作表我尝试着写出来了,但取消首页隐藏的行不会

TA的精华主题

TA的得分主题

发表于 2021-1-16 21:18 | 显示全部楼层
Sub 条件隐藏()

    Dim rng As Range
    Dim i As Integer, j As Integer, m As Integer, n As Integer, k As Integer
    Dim sht As Worksheet
   
    Set sht = Worksheets("逾期或未完成的情况说明")
    i = Worksheets("首页").Cells(Rows.Count, "i").End(xlUp).Row
   
    For Each rng In Worksheets("首页").Range("i3:i" & i)
        If rng.Text = "完成" Or rng.Offset(0, 6).Value = "100%" Then
            rng.EntireRow.Hidden = True
            Worksheets(rng.Offset(0, -8).Value).Visible = False
        Else
            j = Worksheets(rng.Offset(0, -8).Value).Cells(Rows.Count, 1).End(xlUp).Row
            m = j - 7
            For n = 1 To m
                k = k + 1
                sht.Range("a" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("a" & n + 7)
                sht.Range("b" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("b" & n + 7)
                sht.Range("c" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("c" & n + 7)
                sht.Range("d" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("d" & n + 7)
                sht.Range("e" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("k" & n + 7)
                sht.Range("f" & k + 2) = Worksheets(rng.Offset(0, -8).Value).Range("j" & n + 7)
                sht.Range("g" & k + 2) = m
               
            Next
            m = 0
        End If
    Next

End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-17 15:02 | 显示全部楼层
tiger1976 发表于 2021-1-16 21:18
Sub 条件隐藏()

    Dim rng As Range

谢谢老虎老师,这个代码把我的两个问题都解决了,太强了!!
我昨天研究灰狼老师的代码终于尝试着把显示全部行和工作表的代码凑出来了,因为我的原始表格首页和表单全部都有设有密码保护(因为表单里很多公式,我怕制表的人不小心改动公式),所以昨天在灰狼老师的代码基础上加上了两段(一段是操作前解开密码,一段是操作完后再加密),没办法我VBA学的太浅,只能用这个笨办法。
然后接着又“研究”把其他工作表符合条件的摘过来,弄到晚上十一点也没能成功,虽然心里觉得可能是要用上遍历工作表的方法
最后再次感谢两位老师

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-1-17 16:16 | 显示全部楼层
tiger老师,还有个问题,就是我只需要抓取工作表中逾期、终止、取消、暂停这种数据所在的行,这段代码是把未完成的整个项目的所有行都抓取过来了(比如项目10有10个小项目里面有1行逾期记录,我只抓取这一行,其他已经完成的就不用抓取了,然后被抓取过来后任务数量不需要统计,只统计成1就可以了,就是”逾期或未完成的情况说明“表的G列不需要统计),这样是否可以实现呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-4-27 01:32 , Processed in 0.051462 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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