1

我一直在尝试让典型的隐藏表/取消隐藏表代码来鼓励启用宏。由于我锁定了保存,因此我需要做的操作与通常将其放入 Workbook_BeforeClose Sub 略有不同。

但是...我的隐藏子

Sub HideSheets()
'Error Handling when workbook is unprotected.
On Error GoTo EH
'Unprotect the workbook to allow conditional formatting changes.
ThisWorkbook.Sheets("Field Service Report").Unprotect Password:="x"
ThisWorkbook.Sheets("Prompt").Unprotect Password:="x"

'Main Sub Code
    Application.EnableCancelKey = xlDisabled
    Sheets("Prompt").Visible = xlSheetVisible
    Sheets("Field Service Report").Visible = xlSheetVeryHidden
    Application.EnableCancelKey = xlInterrupt

'Reprotect worksheet before ending sub.
ThisWorkbook.Sheets("Field Service Report").Protect Password:="x", UserInterfaceOnly:=True
ThisWorkbook.Sheets("Prompt").Protect Password:="x"

Exit Sub
EH:
Call EH
Resume Next

End Sub

和我的取消隐藏子

Sub UnhideSheets()
'Error Handling
On Error GoTo EH
'Unprotect the workbook to allow conditional formatting changes.
ThisWorkbook.Sheets("Field Service Report").Unprotect Password:="x"
ThisWorkbook.Sheets("Prompt").Unprotect Password:="x"

'Main Sub Code
    Application.EnableCancelKey = xlDisabled
    Sheets("Field Service Report").Visible = xlSheetVisible
    Sheets("Prompt").Visible = xlSheetVeryHidden
    Application.EnableCancelKey = xlInterrupt

'Reprotect worksheet before ending sub.
ThisWorkbook.Sheets("Field Service Report").Protect Password:="x", UserInterfaceOnly:=True
ThisWorkbook.Sheets("Prompt").Protect Password:="x"

Exit Sub
EH:
Call EH
Resume Next

End Sub

....从即时窗口调用时工作正常。工作表适当地隐藏和取消隐藏。

但是,当我通过 sub 时,它实际上并没有做任何事情。这个想法是在保存之前将工作表设置为“提示”工作表,保存,然后在保存后恢复为可用。但我什至看不到该代码是否正常工作(看起来),因为单步执行实际的隐藏/取消隐藏潜艇并没有做任何事情。

编辑:没有错误,只是不更改任何设置来隐藏或取消隐藏工作表。

想法?

编辑:因此,鉴于下面的评论,我的潜艇在从即时窗口运行并通过调试器单步执行时工作。他们适当地隐藏和取消隐藏工作表。所以,唯一可能出错的是调用这些子程序的代码。所以,这里还有两个潜艇。一个是保存按钮的按钮代码,另一个是 Workbook_BeforeSave Sub。

Sub Save_Form()

'Error Handling ...
On Error GoTo EH

'Unprotect the workbook ...
ThisWorkbook.Sheets("Field Service Report").Unprotect Password:="x"

'Variable to disable any other save but this button.
Module1.SaveChk = 1

'Code to automatically save a copy ...
Module1.UserPath = Environ("USERPROFILE")
Module1.Path = UserPath & "\Desktop\"
If Module1.EditChk = "Y" Then
    Module1.SaveName = "FSR Master"
Else
    Module1.SaveName = Range("AF6").Value
End If

ThisWorkbook.SaveAs _
    Filename:=Path & SaveName & ".xlsm", _
    FileFormat:=52

If Module1.SaveError <> 1 Then
    'User Display of Save Success
    MsgBox "Filename = " & SaveName & vbNewLine _
    & "File is saved to your desktop."
Else
    Module1.SaveError = 0
End If

'Reset SaveChk variable
Module1.SaveChk = 0

'Reprotect Worksheet
ThisWorkbook.Sheets("Field Service Report").Protect Password:="x", UserInterfaceOnly:=True

Exit Sub

EH:
Call ErHa
Resume Next

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

'Error Handling ...
On Error GoTo EH

'Save Initiation Check
If Module1.SaveChk <> 1 Then
    Cancel = True
    MsgBox "Please Use Form Save Button", vbOKCancel + vbExclamation, "SAVE CANCELLED"
    Exit Sub
End If

If Module1.EditChk <> "Y" Then 'Skips the whole block if EditChk = Y

    'Create the final range of cells for checking
    Set Module1.Required = Application.Union(Module1.Fixed, Module1.Drive, Module1.Stage)
    'Check if all required cells are filled in
    If WorksheetFunction.CountA(Module1.Required) < Module1.Required.Count Then
        Cancel = True
        MsgBox "Please Completed Shaded Cells!", vbOK + vbExclamation, "SAVE CANCELLED"
        Module1.SaveError = 1
    Else
        'Set the report date before saving
        Application.EnableEvents = False
        Range("AE59") = Format(Now(), "mm-dd-yyyy hh:mm:ss AM/PM")
        Application.EnableEvents = True
    End If
End If
'Renable Macro Splash Screen Before Save
Call HideSheets

Exit Sub

EH:
Call ErHa
Resume Next

End Sub
4

0 回答 0