excel如何使用vba代码取消隐藏行

excel如何使用vba代码取消隐藏行,第1张

以填写数据的区域B5:G99为例。

1、按Alt+F11打开代码编辑器。

2、在左侧栏中双击需要添加代码的工作表。

3、在右侧输入或粘贴代码。

4、如图,你只修改两个参数即可,其他代码不用动。

5、改好后关闭代码编辑器即可。

Private Sub Worksheet_Change(ByVal Target As Range) '值变更时触发事件

  '

  Dim s As Range, c$, r&

  Set s = Range("B5:G99") '请修改此参数,日常填写数据的区域

  r = 100                 '请修改此参数,合计结果输出的行号

  c = "B/C/D/G"           '不求和的列号字母,若有多个,请用/分隔

  '

  '显隐处理

  Dim g As Range, ir&

  Set g = sFind("", , , , , xlPrevious)

  If g Is Nothing Then

      ir = s(1)Row

  Else

      ir = WorksheetFunctionMin(s(sCount)Row, gRow + 1)

  End If

  Rows(s(1)Row & ":" & ir)Hidden = False  '上部分,全部设为显示

  If ir < s(sCount)Row Then

      Rows(ir + 1 & ":" & s(sCount)Row)Hidden = True '下部分全部设为隐藏

  End If            '可修改此参数,合计结果写到第几行

  '退出机制

  Set g = Intersect(Target, s)

  If g Is Nothing Then Exit Sub '如果目标不在s区域内,则直接退出sub

  '合计处理

  Dim m&, n&

  m = s(1)Row '获取s区域的起始行号

  n = s(sCount)Row - m + 1 '获取s区域的总行数

  ApplicationEnableEvents = False '关闭事件触发

  Dim i%, h$

  c = "/" & c & "/" '在c的两端补全斜杠

  For i = g(1)Column To g(gCount)Column '遍历g所涉及到的列

      h = Replace(Cells(1, i)Address(0, 0), "1", "") '计算当前列号字母

      If InStr(c, "/" & h & "/") = 0 Then '如果h不包含在c中

          Cells(r, i) = WorksheetFunctionSum(Cells(m, i)Resize(n)) '输出合计

      End If

  Next

  ApplicationEnableEvents = True '开启事件触发

End Sub

这是很简单的事情,有人居然说不能实现?你新建一个窗体,加一个LABEL1,然后在程序开始时调用窗体:UserForm1Show 0:DoEvents,d出提示,在程序结束时卸载窗体:Unload UserForm1,就搞定了。通过UserForm1Label1Caption = "字符串"语句还可以在过程中根据环境设置不同的提示。上传了一个附件,大家放心使用,为本人编写,不存在版权问题。

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub test()

Dim i&

UserForm1Show 0

DoEvents    '没有DoEvents,窗体会空白

UserForm1Label1Caption = "正在载入数据,请稍等……"

DoEvents

For i = 1 To 100    '可以把循环替代成具体事务

    Sleep 100: DoEvents

Next

UserForm1Label1Caption = "正在进行计算,请稍等……"

DoEvents

For i = 1 To 100

    Sleep 100: DoEvents

Next

Unload UserForm1

End Sub

请参考

>

>Dim sh As Worksheet

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Sheet1Visible = True

 For Each sh In ThisWorkbookSheets

         If shName <> "空白" Then

        shVisible = xlSheetVeryHidden

         End If

     Next

      ActiveWorkbookSave

  End Sub

  Private Sub Workbook_Open()

      For Each sh In ThisWorkbookSheets

         If shName <> "空白" Then

              shVisible = xlSheetVisible

         End If

      Next

     Sheet1Visible = xlSheetVeryHidden

 End Sub

代码解析:

第2行到第10行代码是工作簿的BeforeClose事件过程,在工作簿关闭前隐藏除“空白”表以外的所有的工作表。

第3行代码将“空白”表的Visible属性设置为True,使其可见。

应用于Charts和Worksheets对象的Visible属性决定对象是否可见,语法如下:

expressionVisible

参数expression是必需的,该表达式返回上面的对象之一。

Visible属性可以设置为表格 28 1所示的XlSheetVisibility常量之一。

常量 值 描述

xlSheetHidden 0 隐藏对象,可以通过“格式”→“工作表”→“取消隐藏”菜单使对象重新可见,等同于设置为False。

xlSheetVisible -1 使对象重新可见,等同于设置为True。

xlSheetVeryHidden 2 隐藏对象,使该对象重新可见的唯一方法是将此属性设置为True或xlSheetVisible。

表格 28 1 XlSheetVisibility常量

第4行到第8行代码使用For EachNext语句遍历工作簿中所有的工作表,将除“空白”表以外的所有工作表的Visible属性设置为xlSheetVeryHidden,使之隐藏。

Visible属性设置为xlSheetVeryHidden后工作表不能通过“格式”→“工作表”→“取消隐藏”菜单来显示隐藏的工作表。

第9行代码使用Save方法保存代码所在工作簿的更改,在关闭工作簿时不显示消息框。

第10行到第18行代码是工作簿的Open事件过程,在打开工作簿时将除“空白”表以外的所有工作表的Visible属性设置为xlSheetVisible,取消隐藏。如果打开工作簿时禁用宏,则工作簿中除了“空白”表以外,其他的工作表还处于深度隐藏的状态,如图 28 2所示,这样就达到强制用户启用宏的效果,当然这还需要VBA工程保护的配合。

以上就是关于excel如何使用vba代码取消隐藏行全部的内容,包括:excel如何使用vba代码取消隐藏行、请问在VBA,制作窗体,在程序运行时窗体显示“正在运行……”,程序运行完后,窗体自动隐藏。、EXCEL 如何用vba隐藏工作表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9698697.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存