10

ディスクに保存せずにカスタム名でブックを作成することはできますか?デフォルトの「Workbookx」名は避けたいのですが、ユーザーにワークブックの保存を要求したくありません。一時的に自動的に保存すると、ユーザーが[保存]をクリックしても[名前を付けて保存...]ダイアログが表示されないため、混乱する可能性があります。

4

2 に答える 2

7

ブックを作成し、保存しないでください。ユーザーがブックを保存しようとすると、「名前を付けて保存」プロンプトが表示されます。また、ユーザーがファイルを閉じようとすると、閉じる前にファイルを保存するかどうか( [名前を付けて保存]ダイアログ)を確認するメッセージが表示されます。これで、このプロンプトの表示は、新しく作成されたブックにいくつかの変更を加えたという事実に依存します。

例えば

Sub Sample()
    Dim wb As Workbook

    Set wb = Workbooks.Add
End Sub

デフォルトでは、ワークブックの名前は「Book *」になりますが、ユーザーが「名前を付けて保存」を実行する機会が得られるため、これは実際には問題ではありません。

ファローアップ

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

私が考えることができる唯一の方法があると述べましたが、コードに取り組んでいる間、私は2つのオプションを思いつきました:)

方法1

a)新しいワークブックを作成する

b)たとえば、JAN2012.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)たとえば、JAN2012.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 に答える