天天看点

Excel VBA常用功能加载宏——工作表隐藏

有些时候制作的表格,一些基础的设置数据可能不希望使用者看到并被修改掉,这个时候一般可能会选择把表格隐藏起来。

工作表的隐藏很简单,只需要右键点击工作表名称,然后点击隐藏就可以。

但是取消隐藏也差不多,右键点击后,选择某个工作表名称。

这种基本的操作,大多数人Excel用过一段时间的应该都会,所以保证不了其他人不会发现隐藏起来的表格。

其实Excel里还有一个深度的隐藏,这种隐藏后,右键点击取消隐藏是看不到的,这样应该就能瞒过大多数人了。

这个可以通过VBA代码编辑器里的属性窗口,设置工作表的Visible属性为xlSheetVeryHidden来实现,当然使用VBA来设置肯定就更为方便快捷了:

Excel VBA常用功能加载宏——工作表隐藏

首先在customUI.xml中增加代码:

<menu id="rbmenuShtHide" label="工作表隐藏&#13;" size="large" imageMso="WindowSplit">
      <button id="rbbtnVeryHideActiveSht" label="深度隐藏当前工作表" onAction="rbbtnVeryHideActiveSht"/>
      <button id="rbbtnVeryHideExceptActiveSht" label="深度隐藏当前工作表之外工作表" onAction="rbbtnVeryHideExceptActiveSht"/>

      <menuSeparator id="rbSepShtHidet01" title="================="/>

      <button id="rbbtnUnHideAllSht" label="显示所有工作表" onAction="rbbtnUnHideAllSht"/>
     </menu>           

复制

回调函数:

'工作表隐藏
Sub rbbtnVeryHideActiveSht(control As IRibbonControl)
    Call MShtWk.VeryHideActiveSht
End Sub
Sub rbbtnVeryHideExceptActiveSht(control As IRibbonControl)
    Call MShtWk.VeryHideExceptActiveSht
End Sub
Sub rbbtnUnHideAllSht(control As IRibbonControl)
    Call MShtWk.UnHideAllSht
End Sub           

复制

函数实现:

Sub VeryHideActiveSht()
    Dim i As Long
    Dim sht As Worksheet
    
    For Each sht In Worksheets
        If sht.Visible = xlSheetVisible Then i = i + 1
    Next
    
    If i > 1 Then
        ActiveSheet.Visible = xlSheetVeryHidden
    Else
        MsgBox "至少要保证有一个可见工作表。", vbCritical
    End If
End Sub

Sub VeryHideExceptActiveSht()
    Dim sht As Worksheet
    
    For Each sht In Worksheets
        If sht.Name <> ActiveSheet.Name Then sht.Visible = xlSheetVeryHidden
    Next
End Sub

Sub UnHideAllSht()
    Dim sht As Worksheet
    
    For Each sht In Worksheets
        sht.Visible = xlSheetVisible
    Next
End Sub           

复制

函数比较简单,就是去设置工作表的Visible属性即可。

在设置当前工作表隐藏的时候,需要判断工作簿是否还有其他的可见工作表,否则会报错。