2012-04-15 5 views
7

Özel adı olan bir Çalışma Kitabını diske kaydetmeden oluşturmak mümkün mü? Varsayılan "Çalışma Kitabı x" adlarından kaçınmak istiyorum ancak kullanıcının çalışma kitabını kaydetmesini istemiyorum. Geçici olarak otomatik olarak kaydedersem, kullanıcı "Kaydet" i tıklarsa "Farklı Kaydet ..." iletisini almaz, bu da kafa karıştırıcı olabilir.Özel ada sahip bir Çalışma Kitabını diske kaydetmeden oluşturma

cevap

4

Basitçe çalışma kitabını oluşturun ve kullanıcı kaydetmeye çalıştığında, kullanıcı "Farklı Kaydet" İstemi'ni alacaktır. Kullanıcı bunu kapatmaya çalışırsa, kullanıcı kapatmadan önce kullanıcının (Tekrar Kaydet iletişim kutusu) kaydetmek isteyip istemediğini sorar. Şimdi bu komut isteminin görünümü yeni oluşturulan çalışma kitabında bazı değişiklikler yaptığınız gerçeğine bağlı olacaktır. Çalışma kitabı "Kitap *" olarak adlandırılan ancak kullanıcı

"Farklı Kaydet" do yapmak için bir şans elde edecek şekilde bu gerçekten önemli olmamalı Varsayılan olarak

Sub Sample() 
    Dim wb As Workbook 

    Set wb = Workbooks.Add 
End Sub 

Örneğin

Ctrl + S O sh olur basarak İZLEMİNDE

Farklı Kaydet ... iletişim kutusu tıpkı çalışma kitabının hiç kaydedilmediği gibi. Aklıma ancak kod üzerinde çalışırken, ben 2 seçenekten :)

YOLU 1

ile geldi tek bir yolu olduğunu belirtilen olsa

a) Yeni bir çalışma kitabı oluşturun

b) JAN 2012.XLSM, kullanıcının Temp dizinine kaydedin

kullanıcı CTRL + S bastığında Şimdi zaman

c)) Excel bunu yapmanın

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 

YOL 2 (Komplike yolu

bir Farklı Kaydet isteyecektir,)

d Readonly için dosya özelliklerini değiştirme

a) yeni bir çalışma kitabı

b) dedikleri gibi, kullanıcının Temp dizininde

için, JAN 2012.XLSM, sakla oluştur

c) Ctrl + S devre dışı bırakmak için bir kod enjekte ve sadece oluşturulması ve çalışma kitaplarını tasarrufu yönetmek için Uygulama Olaylar kullanabilirsiniz

+0

Siddarth, Çalışma Kitabını "Kitap x" den farklı şekilde adlandırmak istiyorum. Makromum birkaç çalışma kitabı oluşturuyor ve bunlara "Çalışma Kitabı 1", "Çalışma Kitabı 2" kullanıcı için kafa karıştırıyor. Çalışma kitaplarının "JAN 2012", "FEB 2012" vb. Olmasını istiyorum ve kullanıcının onları kurtarmak isteyip istemediğine karar vermesini istiyorum. – Cutter

+0

Ve kullanıcı çalışma kitabını nasıl kaydeder? Ctrl + S/Excel menüsüne veya koduna basarak mı? –

+0

Ctrl + S tuşlarına basarak, Farklı Kaydet ... iletişim kutusunu çalışma kitabının hiç kaydedilmediği gibi gösterir. – Cutter

0

Farklı Kaydet izin verir.

Daha fazla bilgi için CPearson'ın sitesinden Application Events adresine bakın.

Benim önerim: Yeni çalışma kitaplarını yönetmek için bir uygulama olay işleyicisi ile bir eklenti oluşturun: Bu kodun incluse, eklenti ThisWorkbook modülde

(veya Pearson tarafından açıklandığı gibi bir sınıf modülü kullanmak)

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