
以填写数据的区域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隐藏工作表等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)