小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VBA代碼庫10:強(qiáng)制用戶啟用宏

 hercules028 2021-05-06


有時(shí),必須確保用戶在打開工作簿時(shí)啟用宏,否則就不能實(shí)現(xiàn)工作簿的效果。由于無法使用宏去打開宏,因此需要一種確保用戶啟用宏的技術(shù)。下面講解的方法隱藏除“歡迎”工作表(告訴用戶啟用宏)之外的所有工作表,并在每次保存工作簿時(shí)強(qiáng)制執(zhí)行該工作表。如果用戶在啟用了宏的情況下打開工作簿,則宏將不會(huì)隱藏所有工作表。還可以使用Excel的 VeryHidden屬性來實(shí)現(xiàn)工作表的隱藏,這意味著不能使用Excel的菜單來取消隱藏工作表。但是,這只會(huì)影響該工作簿,因此用戶可以使用另一個(gè)工作簿中的宏取消隱藏所有工作表。但是,如果用戶非常熟練,他們總是可以始終進(jìn)入你的文件中。注意:為防止某些事件循環(huán)問題,此代碼需要覆蓋Excel內(nèi)置的Save事件,并且還需要復(fù)制Excel的“工作簿已更改,您要保存”提示和操作,代碼負(fù)責(zé)所有這些工作。但是,在關(guān)閉文件時(shí)確實(shí)會(huì)產(chǎn)生一個(gè)非常小的問題。如果用戶嘗試退出該應(yīng)用程序,它將關(guān)閉工作簿,而不是Excel。再次退出將完全關(guān)閉Excel。

下面是代碼:

Const WelcomePage = '歡迎'

Private Sub Workbook_BeforeClose(Cancel As Boolean)

   '關(guān)閉事件以阻止不必要的循環(huán)

    Application.EnableEvents = False

   '評(píng)估是否保存工作簿并模擬默認(rèn)的提示信息

    With ThisWorkbook

        If Not .Saved Then

            Select Case MsgBox('你想保存對(duì) '' &.Name & '' 工作簿所做的變化嗎?', _

                vbYesNoCancel + vbExclamation)

            Case Is = vbYes

                 '調(diào)用自定義的保存程序

                Call CustomSave

            Case Is = vbNo

                 '不保存

            Case Is = vbCancel

                 '設(shè)置過程來取消關(guān)閉

                Cancel = True

            End Select

        End If

        '如果單擊取消, 重新打開事件并取消關(guān)閉,

        '否則不保存改變而關(guān)閉工作簿.

        If Not Cancel = True Then

            .Saved = True

            Application.EnableEvents = True

            .Close savechanges:=False

        Else

            Application.EnableEvents = True

        End If

    End With

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

   '關(guān)閉事件以阻止不必要的循環(huán)

    Application.EnableEvents = False

   '調(diào)用自定義的保存程序并設(shè)置工作簿的saved屬性為true

   '(取消常規(guī)的保存)

    Call CustomSave(SaveAsUI)

    Cancel = True

   '重新打開事件并設(shè)置saved屬性為true

    Application.EnableEvents = True

    ThisWorkbook.Saved = True

End Sub

Private Sub Workbook_Open()

    '取消隱藏所有工作表

    Application.ScreenUpdating = False

    Call ShowAllSheets

    Application.ScreenUpdating = True

End Sub

Private Sub CustomSave(Optional SaveAs As Boolean)

    Dim ws As Worksheet, aWs As Worksheet,newFname As String

   '關(guān)閉屏幕更新

    Application.ScreenUpdating = False

   '設(shè)置為活動(dòng)工作表

    Set aWs = ActiveSheet

   '隱藏所有工作表

    Call HideAllSheets

   '直接保存工作簿或提示另存為文件名

    If SaveAs = True Then

        newFname =Application.GetSaveAsFilename( _

        fileFilter:='Excel Files (*.xls*),*.xls*')

        If Not newFname = 'False'Then ThisWorkbook.SaveAs newFname

    Else

        ThisWorkbook.Save

    End If

   '恢復(fù)文件還原到用戶所在的位置

    Call ShowAllSheets

    aWs.Activate

   '恢復(fù)屏幕更新

    Application.ScreenUpdating = True

End Sub

Private Sub HideAllSheets()

   '隱藏除'歡迎'外的所有工作表

    Dim ws As Worksheet

    Worksheets(WelcomePage).Visible =xlSheetVisible

    For Each ws In ThisWorkbook.Worksheets

        If Not ws.Name = WelcomePage Thenws.Visible = xlSheetVeryHidden

    Next ws

    Worksheets(WelcomePage).Activate

End Sub

Private Sub ShowAllSheets()

   '顯示除'歡迎'外的所有工作表

    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets

        If Not ws.Name = WelcomePage Thenws.Visible = xlSheetVisible

    Next ws

    Worksheets(WelcomePage).Visible =xlSheetVeryHidden

End Sub

說明:

1. 代碼放置在ThisWorkbook代碼模塊中。

2. 工作簿中應(yīng)該有一個(gè)名為“歡迎”的工作表,否則你要將代碼前面的常量WelcomePage設(shè)置為用戶沒有啟用宏時(shí)的提示工作表名稱。

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

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多