Is it possible to create a Workbook with a custom name without saving it to disk? I want to avoid the default "Workbook x" names but I don't want to require the user to save the workbook. If I save it automatically in some temporary, the user won't get the "Save As..." dialog if he clicks on "Save", which may be confusing.
If you do not want to save the opened workbook as new workbook to rename it, you can use a handle add-in – Office Tab which can help you view and edit multiple opened workbooks in a single tabbed window.
To RENAME an Excel file that is stored on your computer, you need to use the “NAME” statement. In this statement, you need to define the old file name and the new name that you want to apply.
Simply create the workbook and don't save it so when the user tries to save it, the user will get a "Save As" Prompt. And if the user tries to close it, then the user will get a prompt whether the users want to save (Again a Save As dialog) the file before closing. Now the appearance of this prompt will depend on the fact that you have made some changes to the newly created workbook.
For example
Sub Sample()
Dim wb As Workbook
Set wb = Workbooks.Add
End Sub
By default the workbook will be named as "Book*" but that really shouldn't matter as the user will get a chance to do do a "Save As"
FOLLOWUP
By pressing Ctrl + S. It would show the Save As... dialog just as if the workbook had never been saved.
Though I mentioned that there is only one way that I can think of but while working on the code, I came up with 2 options :)
WAY 1
a) Create a new workbook
b) Save it as say, JAN 2012.XLSM, to user's Temp directory
c) Change the file properties to Readonly
d) Now when the user presses CTRL+S, Excel will prompt a Save As
Option Explicit
Private Declare Function GetTempPath Lib "kernel32" Alias "GetTempPathA" _
(ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Const MAX_PATH As Long = 260
Sub Sample()
Dim wb As Workbook
Set wb = Workbooks.Add
With wb
.SaveAs Filename:=TempPath & "JAN 2012.xlsm" _
, FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'.SaveAs Filename:=TempPath & "JAN 2012.xlsx" _
, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
.ChangeFileAccess Mode:=xlReadOnly, WritePassword:="admin"
End With
End Sub
Function TempPath() As String
TempPath = String$(MAX_PATH, Chr$(0))
GetTempPath MAX_PATH, TempPath
TempPath = Replace(TempPath, Chr$(0), "")
End Function
WAY 2 (Complicated way of doing it)
a) Create a new workbook
b) Save it as say, JAN 2012.XLSM, to user's Temp directory
c) Inject a code to disable Ctrl + S and only allow Save As
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With