2012-04-15 9 views
7

ワークブックをディスクに保存せずにカスタム名で作成することはできますか?私はデフォルトの "ブック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)ユーザーが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(それを行うための複雑な方法)として保存を促すメッセージが表示されます)

DをREADONLYするために、ファイルのプロパティを変更

a)の新規ブック

b)の言うように、ユーザーのTempディレクトリ

0123に、JAN 2012.XLSMを、それを保存を作成します。

c)は、Ctrlキー+ Sを無効にするためのコードを挿入し、唯一のあなたが作成し、ワークブックを保存管理するためにアプリケーションイベントを使用することができます

+0

incluse Siddarth、 "Book x"とは別にWorkbookの名前を付けたい。私のマクロはいくつかのワークブックを作成し、それらに "ワークブック1"、 "ワークブック2"という名前を付けるのは混乱します。ワークブックの名前を「JAN 2012」、「FEB 2012」などにして、保存するかどうか、どこで保存するかをユーザーに決定させてください。 – Cutter

+0

そして、ユーザーはブックをどのように保存しますか? Ctrl + S/Excelメニューを押すか、コードを介して? –

+0

Ctrl + Sを押すと、ブックが保存されていないかのように[名前を付けて保存...]ダイアログが表示されます。 – Cutter

0

として保存を可能にします。

詳細については、CPearsonのサイトのApplication Eventsを参照してください。

私の提案:新しいワークブックを管理するためのアプリケーションイベントハンドラでアドインを作成します。アドインThisWorkbookモジュールで

(またはピアソンによって記載されているように、クラスモジュールを使用)、このコード

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 
関連する問題