registros para nuevo macro libro habilitado guardar crear con como cerrar cambios botones archivo excel-vba

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