使用自定义名称创建工作簿而不将其保存到磁盘

Cut*_*ter 10 excel vba excel-vba

是否可以创建具有自定义名称的工作簿而不将其保存到磁盘?我想避免使用默认的"Workbook x"名称,但我不想要求用户保存工作簿.如果我将其自动保存在一些临时状态,用户将无法获得"另存为..."对话框,如果他点击"保存",这可能会令人困惑.

Sid*_*out 6

只需创建工作簿而不保存它,以便当用户尝试保存时,用户将获得"另存为"提示.如果用户试图关闭它,那么用户将在关闭之前获得用户是否想要保存(再次作为另存为对话框)文件的提示.现在,此提示的外观将取决于您对新创建的工作簿进行了一些更改.

例如

Sub Sample()
    Dim wb As Workbook

    Set wb = Workbooks.Add
End Sub
Run Code Online (Sandbox Code Playgroud)

默认情况下,工作簿将被命名为"Book*",但这确实无关紧要,因为用户将有机会执行"另存为"

跟进

按Ctrl + S.它将显示"另存为..."对话框,就像工作簿从未保存过一样.

虽然我提到我只能想到一种方法,但在编写代码时,我想出了两个选项:)

方式1

a)创建一个新工作簿

b)将它保存为例如JAN 2012.XLSM,保存到用户的Temp目录

c)将文件属性更改为Readonly

d)现在当用户按下CTRL + S时,Excel将提示另存为

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
Run Code Online (Sandbox Code Playgroud)

方式2(复杂的方式)

a)创建一个新工作簿

b)将它保存为例如JAN 2012.XLSM,保存到用户的Temp目录

c)注入代码以禁用Ctrl + S并仅允​​许另存为