分享

VBA代码库11:强制用户启用宏(续)

 hercules028 2021-05-07

excelperfect

在《VBA代码库10:强制用户启用宏》中,讲解了一段用户在打开工作簿时必须启用宏才能使用工作簿功能的代码。本文给出另一段同样可以实现强制用户启用宏的代码。

如果用户没有启用宏,那么当打开工作簿时,一个特定的工作表将提示用户启用宏,而工作簿中的其他工作表则被隐藏。

代码如下:

Private Sub Workbook_Open()

    With Application

        '禁用ESC键

        .EnableCancelKey = xlDisabled

        .ScreenUpdating = False

        Call UnhideSheets

        .ScreenUpdating = True

        '重新启用ESC键

        .EnableCancelKey = xlInterrupt

    End With

End Sub

Private Sub UnhideSheets()

    Dim Sheet As Object

    For Each Sheet In Sheets

        If Not Sheet.Name = '提示' Then

            Sheet.Visible = xlSheetVisible

        End If

    Next

    Sheets('提示').Visible = xlSheetVeryHidden

   'Application.Goto Worksheets(1).[A1], True '< 可选的

    Set Sheet = Nothing

    ActiveWorkbook.Saved = True

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    With Application

        .EnableCancelKey = xlDisabled

        .ScreenUpdating = False

        Call HideSheets

        .ScreenUpdating = True

        .EnableCancelKey = xlInterrupt

    End With

End Sub

Private Sub HideSheets()

    Dim Sheet As Object '< 包括工作表和图表工作表

    With Sheets('提示')

         '工作表的隐藏构成了一种变化,这种变化产生了

         '自动的'保存?'提示,所以如果工作簿已经

         '在此之前被保存,那么下一行和前几行

         '与下面的.[A100]有关,绕过“保存?”对话...

        If ThisWorkbook.Saved = True Then.[A100] = 'Saved'

        .Visible = xlSheetVisible

        For Each Sheet In Sheets

            If Not Sheet.Name = '提示' Then

                Sheet.Visible =xlSheetVeryHidden

            End If

        Next

        If .[A100] = 'Saved' Then

            .[A100].ClearContents

            ThisWorkbook.Save

        End If

        Set Sheet = Nothing

    End With

End Sub

注:本文的代码整理自vbaexpress.com。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多