2012-04-15 18 views
7

¿Es posible crear un libro de trabajo con un nombre personalizado sin guardarlo en el disco? Quiero evitar los nombres predeterminados de "Libro de trabajo x" pero no deseo que el usuario guarde el libro de trabajo. Si lo guardo de forma automática en algunos temporales, el usuario no obtendrá el cuadro de diálogo "Guardar como ..." si hace clic en "Guardar", lo que puede ser confuso.Crear un libro de trabajo con un nombre personalizado sin guardarlo en el disco

Respuesta

4

Simplemente cree el libro de trabajo y no lo guarde para que cuando el usuario intente guardarlo, el usuario obtenga un mensaje de "Guardar como". Y si el usuario intenta cerrarlo, entonces el usuario recibirá un aviso si los usuarios quieren guardar (Nuevamente un diálogo de Guardar como) el archivo antes de cerrar. Ahora, la aparición de este aviso dependerá del hecho de que haya realizado algunos cambios en el libro de trabajo recién creado.

Por ejemplo

Sub Sample() 
    Dim wb As Workbook 

    Set wb = Workbooks.Add 
End Sub 

Por defecto, el libro será nombrado como "libro *", pero que en realidad no debería importar que el usuario tendrá la oportunidad de hacer hacer un "Guardar como"

FOLLOWUP

pulsando Ctrl + S. sería sh El diálogo Guardar como ... como si el libro de trabajo nunca se hubiera guardado.

Aunque he mencionado que sólo hay una manera que puedo pensar, pero mientras se trabaja en el código, me ocurrió con 2 opciones :)

WAY 1

a) Cree un nuevo libro de trabajo

b) Guárdelo, por ejemplo, JAN 2012.XLSM, en el directorio Temp del usuario

c) Cambiar las propiedades del archivo de sólo lectura

d) Ahora, cuando el usuario presiona CTRL + S, Excel le pedirá un Guardar como

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 

MANERA 2 (forma complicada de hacerlo)

a) Crear un nuevo libro

b) Guardarlo como decir, ENE 2012.XLSM, al directorio temp del usuario

c) Inyectar un código para desactivar Ctrl + S y sólo permiten Guardar como

+0

Siddarth, quiero nombrar los libros de trabajo de manera diferente que "Libro x". Mi macro crea algunos libros de trabajo y tenerlos llamados "Libro de trabajo 1", "Libro de trabajo 2" es confuso para el usuario. Quiero que los libros de trabajo se llamen "JAN 2012", "FEB 2012", etc. ... y deje que el usuario decida si quiere guardarlos y dónde los quiere guardar. – Cutter

+0

¿Y cómo el usuario guardará el libro de trabajo? ¿Presionando el menú Ctrl + S/Excel o mediante el código? –

+0

Al presionar Ctrl + S. Se mostraría el cuadro de diálogo Guardar como ... como si el libro de trabajo nunca se hubiera guardado. – Cutter

0

Puede utilizar eventos de aplicación para gestionar la creación y guardar libros.

Consulte Application Events del sitio de CPearson para obtener más información.

Mi sugerencia: crear un complemento con un manejador de sucesos de aplicación para gestionar los nuevos libros:

En el módulo de complemento ThisWorkbook (o utilizar un módulo de clase como se describe por Pearson), incluse este código

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 
Cuestiones relacionadas