使用自定义名称创建工作簿而不将其保存到磁盘
是否可以使用自定义名称创建工作簿而不将其保存到磁盘? 我想避免默认的“Workbook x”名称,但我不想要求用户保存工作簿。 如果我在一些临时文件中自动保存它,如果用户点击“保存”,用户将不会得到“另存为...”对话框,这可能会造成混淆。
只需创建工作簿,不要在用户尝试保存时保存它,用户将得到“另存为”提示。 如果用户试图关闭它,那么用户会在关闭之前得到一个提示,用户是否想要保存该文件(同样是另存为对话框)。 现在该提示的出现将取决于您对新创建的工作簿进行了一些更改的事实。
例如
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,只允许另存为
您可以使用应用程序事件来管理创建和保存工作簿。
有关更多信息,请参阅CPearson网站上的应用程序事件。
我的建议:使用应用程序事件处理程序创建一个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
链接地址: http://www.djcxy.com/p/58839.html
上一篇: Creating a Workbook with a custom name without saving it to disk