Macro SaveAs password from cell value

Hello,

I've looked all over the internet for a solution to my problem, but I can't find anything. I have a workbook which contains several sheets that are emailed to individual end users (each user has their own sheet). I have a macro that copies each sheet and emails based on the email within the sheet. What I want to do now is add a password to each created sheet based on a value that is in cell G3. So in the end everyone gets their own data that has a unique password.

Here is the code for my macro:

Sub Email_Each_Sheet()
'Working in 2000-2010
Dim Source As Range
Dim Dest As Workbook
Dim wb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim FileExtStr As String
Dim FileFormatNum As Long
Dim OutApp As Object
Dim OutMail As Object

For Each sht In ActiveWorkbook.Sheets
If sht.Range("A60").Value Like "?*@?*.?*" Then
sht.Activate
SendTo = sht.Range("A60").Value

Set Source = Nothing
On Error Resume Next
Set Source = Range("A2:H46").SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Source Is Nothing Then
MsgBox "The source is not a range or the sheet is protected, " & _
"please correct and try again.", vbOKOnly
Exit Sub
End If
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set wb = ActiveWorkbook

Set Dest = Workbooks.Add(xlWBATWorksheet)
Source.Copy
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
Application.CutCopyMode = False

End With
TempFilePath = Environ$("temp") & "\"
TempFileName = sht.Range("F3").Value & " Productivity " & Format(Now, "mm-dd-yy")
If Val(Application.Version) < 12 Then
'You use Excel 2000-2003
FileExtStr = ".xls": FileFormatNum = 56
Else
'You use Excel 2007-2010
FileExtStr = ".xls": FileFormatNum = 56
End If
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With Dest
.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum
On Error Resume Next
With OutMail
.to = SendTo
.CC = ""
.BCC = ""
.Subject = "subject"
.body = "body"
.attachments.Add Dest.FullName
'You can add other files also like this
'.Attachments.Add ("C:\test.txt")
.Display 'or use .Send
End With
On Error GoTo 0
.Close SaveChanges:=False
End With
Kill TempFilePath & TempFileName & FileExtStr
Set OutMail = Nothing
Set OutApp = Nothing
With Application
.ScreenUpdating = True
.EnableEvents = True
End With
End If
Next
End Sub

Please help!

Vishesh's picture

Sheet Protect

Here is your modified code...
.
.
.
With Dest.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial Paste:=xlPasteValues
.Cells(1).PasteSpecial Paste:=xlPasteFormats
.Cells(1).Select
.Protect .Range("G3") 'New Line
Application.CutCopyMode = False

End With
.
.
.

I ended up solving this

I ended up solving this problem by using code below:

.SaveAs TempFilePath & TempFileName & FileExtStr, _
FileFormat:=FileFormatNum, Password:=sht.Range("G3").Value

Thank you for your help!

Vishesh's picture

OK, you wanted the password

OK, you wanted the password on workbook not sheet.