excel vba - para - Crear un libro de trabajo con un nombre personalizado sin guardarlo en el disco
macro para cerrar un libro de excel y guardar cambios (2)
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, el usuario recibirá un aviso para indicarle a los usuarios si desean guardar ( nuevamente el cuadro de diálogo 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 de trabajo se llamará "Libro *", pero eso no debería importar, ya que el usuario tendrá la oportunidad de hacer un "Guardar como".
SEGUIR
Al presionar Ctrl + S. Se mostraría el cuadro de diálogo Guardar como ... como si el libro de trabajo nunca se hubiera guardado.
Aunque mencioné que solo hay una manera en que puedo pensar, pero mientras trabajaba en el código, se me ocurrió 2 opciones :)
FORMA 1
a) Crea un nuevo libro de trabajo
b) Guárdelo, por ejemplo, JAN 2012.XLSM, en el directorio Temp del usuario
c) Cambie las propiedades del archivo a Solo lectura
d) Ahora cuando el usuario presiona CTRL + S, Excel solicitará 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
FORMA 2 (forma complicada de hacerlo)
a) Crea un nuevo libro de trabajo
b) Guárdelo, por ejemplo, JAN 2012.XLSM, en el directorio Temp del usuario
c) Inyectar un código para deshabilitar Ctrl + S y solo permitir Guardar como
¿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.
Puede usar Eventos de aplicación para administrar la creación y el almacenamiento de libros de trabajo.
Consulte Eventos de la aplicación desde el sitio de CPearson para obtener más información.
Mi sugerencia: crear un complemento con un controlador de eventos de aplicaciones para administrar libros nuevos:
En el módulo add ThisWorkbook
(o use un módulo de clase como lo describe Pearson), incluya 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