2012-04-15 14 views
7

是否可以使用自定義名稱創建工作簿而不將其保存到磁盤?我想避免默認的「Workbook x」名稱,但我不想要求用戶保存工作簿。如果我在一些臨時文件中自動保存它,如果用戶點擊「保存」,用戶將不會得到「另存爲...」對話框,這可能會造成混淆。使用自定義名稱創建工作簿而不將其保存到磁盤

回答

4

只需創建工作簿,不要保存,因此當用戶嘗試保存時,用戶將得到一個「另存爲」提示。如果用戶試圖關閉它,則用戶將在關閉之前得到一個提示用戶是否想要保存該文件(再次爲另存爲對話框)。現在該提示的出現將取決於您對新創建的工作簿進行了一些更改的事實。

例如

Sub Sample() 
    Dim wb As Workbook 

    Set wb = Workbooks.Add 
End Sub 

默認情況下,工作簿將被命名爲「書*」,但真的不應該的問題的用戶將有機會做一做「另存爲」

後續

按下Ctrl + S。這將SH另存爲...「對話框,就好像工作簿從未保存過一樣。

雖然我提到過,只有我能想到的,但在處理代碼時,我想出了2個選擇:)

WAY 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 

WAY 2(這樣做的複雜的方式)

a)創建一個新的工作簿

b)將它保存爲說,JAN 2012.XLSM,用戶的Temp目錄

C)注入代碼來禁用Ctrl + S鍵,只允許另存爲

+0

Siddarth,我想用不同於「Book x」的名字命名Workbooks。我的宏創建了幾個工作簿,並將它們命名爲「工作簿1」,「工作簿2」對用戶造成混淆。我希望工作手冊被命名爲「2012年1月」,「2012年2月」等,並讓用戶決定是否以及在何處保存它們。 – Cutter 2012-04-15 20:20:26

+0

用戶如何保存工作簿?按Ctrl + S/Excel菜單或通過代碼? – 2012-04-15 20:21:53

+0

通過按Ctrl + S.它將顯示「另存爲...」對話框,就像工作簿從未保存過一樣。 – Cutter 2012-04-15 20:25:53

0

您可以使用應用程序事件管理創建和保存工作簿。

查看Application Events從CPearson的網站獲取更多信息。

我的建議:建立一個插件與應用程序事件處置管理新的工作簿:

在插件ThisWorkbook模塊(或使用類模塊由皮爾遜描述),incluse這個代碼

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 
相關問題