10

是否可以创建具有自定义名称的工作簿而不将其保存到磁盘?我想避免使用默认的“Workbook x”名称,但我不想要求用户保存工作簿。如果我在某个临时位置自动保存它,如果用户单击“保存”,他将不会得到“另存为...”对话框,这可能会造成混淆。

4

2 回答 2

7

只需创建工作簿并且不保存它,因此当用户尝试保存它时,用户将收到“另存为”提示。如果用户尝试关闭它,那么用户将在关闭之前收到提示用户是否要保存(同样是另存为对话框)文件。现在,此提示的外观将取决于您对新创建的工作簿进行了一些更改。

例如

Sub Sample()
    Dim wb As Workbook

    Set wb = Workbooks.Add
End Sub

默认情况下,工作簿将被命名为“Book*”,但这并不重要,因为用户将有机会执行“另存为”

跟进

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

虽然我提到我只能想到一种方法,但是在处理代码时,我想出了 2 个选项 :)

方式 1

a) 创建一个新的工作簿

b) 将其保存为 JAN 2012.XLSM 到用户的 Temp 目录

c) 将文件属性更改为只读

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

方式2(复杂的做法)

a) 创建一个新的工作簿

b) 将其保存为 JAN 2012.XLSM 到用户的 Temp 目录

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

于 2012-04-15T20:12:38.013 回答
0

您可以使用应用程序事件来管理创建和保存工作簿。

有关更多信息,请参阅CPearson 网站上的应用程序事件

我的建议:创建一个带有应用程序事件处理程序的插件来管理新工作簿:

在插件ThisWorkbook模块(或使用 Pearson 描述的类模块)中,包含此代码

Option Explicit

' Establish object to handle events
Public WithEvents App As Application
Private Sub Workbook_Open()
    Set App = Application
End Sub

' Handle new workbook 
Private Sub App_NewWorkbook(ByVal Wb As Workbook)
    MsgBox "New Book..."
    Wb.SaveAs "Your Path and File Name Here"
End Sub

' Intercept save event
Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal SaveAsUI As Boolean, Cancel As Boolean)
    MsgBox "Saving " & Wb.Name

End Sub
于 2012-04-15T21:54:51.870 回答