View Full Version : Solved: Sheetprotection and Save dialog
Gert Jan
12-27-2006, 03:57 AM
Hi :hi: 
I'm using this KBase entry http://vbaexpress.com/kb/getarticle.php?kb_id=578 (thanks John) in a workbook.
I would like to have the sheet ("Prompt") protected, but as you see there has to be an entry in A100,
Private Sub HideSheets() 
'
Dim Sheet As Object '< Includes worksheets and chartsheets
'
With Sheets("Prompt") 
'
'the hiding of the sheets constitutes a change that generates
'an automatic "Save?" prompt, so IF the book has already
'been saved prior to this point, the next line and the lines
'relating to .[A100] below bypass the "Save?" dialog...
If ThisWorkbook.Saved = True Then .[A100] = "Saved" 
'
.Visible = xlSheetVisible 
'
For Each Sheet In Sheets 
If Not Sheet.Name = "Prompt" Then 
Sheet.Visible = xlSheetVeryHidden 
End If 
Next 
'
If .[A100] = "Saved" Then 
.[A100].ClearContents 
ThisWorkbook.Save 
End If 
'
Set Sheet = Nothing 
End With 
'
End Sub
When i protect the sheet and put Unprotect and Protect in the code, the "Save?" dialog keeps popping up.
How and where do I have to put in "Unprotect" and at which point the "Protect" statement to prevent the Save-dialog?
 
Gert Jan
Bob Phillips
12-27-2006, 04:15 AM
Option Explicit
 
Private Const WS_MASTER As String = "Prompt"
Private Sub Workbook_Open()
     
    With Application
         'disable the ESC key
        .EnableCancelKey = xlDisabled
        .ScreenUpdating = False
         
        Call UnhideSheets
         
        .ScreenUpdating = True
         're-enable ESC key
        .EnableCancelKey = xlInterrupt
    End With
     
End Sub
 '
Private Sub UnhideSheets()
Dim sh As Object
    
    For Each sh In Sheets
        Sheet.Visible = xlSheetVisible
    Next
    Sheets("Prompt").Visible = xlSheetVeryHidden
    Application.Goto Worksheets(1).Range("A1"), True '< Optional
    ActiveWorkbook.Saved = True
     
End Sub
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    With Application
        .EnableCancelKey = xlDisabled
        .ScreenUpdating = False
         
        Call HideSheets
         
        .ScreenUpdating = True
        .EnableCancelKey = xlInterrupt
        Cancel = True
    End With
End Sub
 
Private Sub HideSheets()
Dim sh As Object '< Includes worksheets and chartsheets
    With ThisWorkbook
    
        With .Sheets(WS_MASTER)
            .Unprotect
             'the hiding of the sheets constitutes a change that generates
             'an automatic "Save?" prompt, so IF the book has already
             'been saved prior to this point, the next line and the lines
             'relating to .range("A100").Value below bypass the "Save?" dialog...
            If ThisWorkbook.Saved = True Then .Range("A100").Value = "Saved"
    
            .Visible = xlSheetVisible
    
            For Each sh In Sheets
                If Not Sheet.Name = WS_MASTER Then
                    Sheet.Visible = xlSheetVeryHidden
                End If
            Next
    
            If .Range("A100").Value = "Saved" Then
                .Range("A100").Value.ClearContents
            End If
             
            .Protect
            
        End With
        
        .Save
        
    End With
End Sub
Gert Jan
12-27-2006, 04:44 AM
Hi Bob,
Thanks for your reply, seems yor no fan of shorthand notation :devil2: 
I get an error 424 "Object required" and this line is highligted:
.Range("A100").Value.ClearContents
What would be causing that?
 
Gert Jan
Gert Jan
12-27-2006, 05:00 AM
I changed 
.Range("A100").Value.ClearContents into .Range("A100").ClearContents no more error but the workbook isn't closing down
Bob Phillips
12-27-2006, 05:27 AM
Sorry about that Gert Jan, a block replace that went askew.
And yes, I do dislike shorthand notation with a passion. Sloppy, lazy and unnecessary IMO.
Anyway, tested code
Option Explicit
 
Private Const WS_MASTER As String = "Prompt"
 
Private Sub Workbook_Open()
     
    With Application
         'disable the ESC key
        .EnableCancelKey = xlDisabled
        .ScreenUpdating = False
         
        Call UnhideSheets
         
        .ScreenUpdating = True
         're-enable ESC key
        .EnableCancelKey = xlInterrupt
    End With
     
End Sub
 '
Private Sub UnhideSheets()
    Dim sh As Object
     
    For Each sh In Sheets
        sh.Visible = xlSheetVisible
    Next
     
    Sheets("Prompt").Visible = xlSheetVeryHidden
     
    Application.Goto Worksheets(1).Range("A1"), True '< Optional
     
    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 sh As Object '< Includes worksheets and chartsheets
     
    With ThisWorkbook
         
        With .Sheets(WS_MASTER)
             
            .Unprotect
             'the hiding of the sheets constitutes a change that generates
             'an automatic "Save?" prompt, so IF the book has already
             'been saved prior to this point, the next line and the lines
             'relating to .range("A100").Value below bypass the "Save?" dialog...
            If ThisWorkbook.Saved = True Then .Range("A100").Value = "Saved"
             
            .Visible = xlSheetVisible
             
            For Each sh In Sheets
                If Not sh.Name = WS_MASTER Then
                    sh.Visible = xlSheetVeryHidden
                End If
            Next
             
            If .Range("A100").Value = "Saved" Then
                .Range("A100").ClearContents
            End If
             
            .Protect
             
        End With
         
        .Save
         
    End With
     
End Sub
Gert Jan
12-27-2006, 05:47 AM
Thanks, got it working now,
 
Sloppy, lazy and unnecessary IMO
 
Oh-Oh you're gonna get yourself into trouble on this one :rotlaugh:
Bob Phillips
12-27-2006, 05:53 AM
Already have ... many times.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.