是否可以创建具有自定义名称的工作簿而不将其保存到磁盘?我想避免使用默认的“Workbook x”名称,但我不想要求用户保存工作簿。如果我将其自动保存在某些临时内容中,则用户点击“保存”时将无法显示“另存为...”对话框,这可能会造成混淆。
答案 0 :(得分:6)
只需创建工作簿,不要保存,以便在用户尝试保存时,用户将获得“另存为”提示。如果用户试图关闭它,那么用户将在关闭之前提示用户是否要保存文件(再次作为另存为对话框)。现在,此提示的外观将取决于您对新创建的工作簿进行了一些更改。
例如
Sub Sample()
Dim wb As Workbook
Set wb = Workbooks.Add
End Sub
默认情况下,工作簿将被命名为“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
第2道路(复杂的做法)
a)创建一个新工作簿
b)将它保存为JAN 2012.XLSM,保存到用户的Temp目录
c)注入代码以禁用Ctrl + S并仅允许另存为
答案 1 :(得分:0)
您可以使用应用程序事件来管理创建和保存工作簿。
有关详细信息,请参阅CPearson网站上的Application Events。
我的建议:使用应用程序事件处理程序创建一个Addin来管理新工作簿:
在addin 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