Hi sorry I know it would make it easier but I wouldn't feel comfortable even producing a desensitised copy unless it was a last resort.
Option Explicit
Const WelcomePage = "View 2"
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Turn off events to prevent unwanted loops
Application.EnableEvents = False
'Evaluate if workbook is saved and emulate default propmts
With ThisWorkbook
If Not .Saved Then
Select Case MsgBox("Do you want to save the changes you made to '" & .Name & "'?", _
vbYesNoCancel + vbExclamation)
Case Is = vbYes
'Call customized save routine
Call CustomSave
Case Is = vbNo
'Do not save
Case Is = vbCancel
'Set up procedure to cancel close
Cancel = True
End Select
End If
'If Cancel was clicked, turn events back on and cancel close,
'otherwise close the workbook without saving further changes
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)
Dim newWB As Workbook
Dim nameWB As String
nameWB = ThisWorkbook.Name
nameWB = Left(nameWB, Len(nameWB) - 4) & "xltx"
'Turn off events to prevent unwanted loops
Application.EnableEvents = False
'Call customized save routine and set workbook's saved property to true
'(To cancel regular saving)
' Call CustomSave(SaveAsUI)
'Cancel = True
'Turn events back on an set saved property to true
ThisWorkbook.Saved = True
Application.DisplayAlerts = False
Sheet27.Cells.Copy
Set newWB = Workbooks.Add
With newWB
.Sheets(1).Range("A1").PasteSpecial xlPasteValues
.Sheets(1).Range("A1").PasteSpecial xlPasteFormats
.Sheets(1).Range("A1").PasteSpecial xlPasteColumnWidths
.Sheets(1).Range("A1").Select
.Sheets(1).Name = "View 2"
.Sheets(1).Protect Password = "abc"
.SaveAs Filename:="D:\" & nameWB, FileFormat:= _
xlOpenXMLTemplate
.Close False
End With
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
Private Sub Workbook_Open()
'Unhide all worksheets
Application.ScreenUpdating = False
Call ShowAllSheets
Application.ScreenUpdating = True
Sheet27.Activate
End Sub
Private Sub CustomSave(Optional SaveAs As Boolean)
Dim ws As Worksheet, aWs As Worksheet, newFname As String
'Turn off screen flashing
Application.ScreenUpdating = False
'Record active worksheet
Set aWs = ActiveSheet
'Hide all sheets
Call HideAllSheets
'Save workbook directly or prompt for saveas filename
If SaveAs = True Then
newFname = Application.GetSaveAsFilename( _
FileFilter:="Excel Files (*.xlsm), *.xls")
If Not newFname = "False" Then ThisWorkbook.SaveAs newFname
Else
ThisWorkbook.Save
End If
'Restore file to where user was
Call ShowAllSheets
aWs.Activate
'Restore screen updates
Application.ScreenUpdating = True
End Sub
Private Sub HideAllSheets()
'Hide all worksheets except the macro welcome page
Dim ws As Worksheet
Worksheets(WelcomePage).Visible = xlSheetVisible
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = WelcomePage Then ws.Visible = xlSheetHidden
Next ws
Worksheets(WelcomePage).Activate
ActiveWindow.ScrollColumn = 1
ActiveWindow.ScrollRow = 1
End Sub
Private Sub ShowAllSheets()
Sheets("Rota").Visible = xlSheetVisible
Sheets("Hours").Visible = xlSheetVisible
Sheets("View 2").Visible = xlSheetVisible
End Sub
Haha well I use 2007 at home and 2010 at work.
The work book is saved as both a .xlsm and a .xlsx at the same time in two locations however it was doing the "active content error" before I started saving it as a .xlsx as well.
Could it just be that the admin's at my work have made it so that it automatically disabled active content?
Bookmarks