¿Como cerrar un formulario y guardar los cambios automáticamente en Excel VB?

Tengo una planilla de ingreso de datos a través de un UserForm que se vee así:

Me gustaría saber si hay alguna forma de que, al cerrar el userform, se guarden los cambios automáticamente, sin la necesidad de que me pregunte si deseo guardar los cambios, la idea es que sea al cerrar el UserForm ya que después de un tiempo solo será visible el UserForm, y no la planilla utilizando la instruccion:

Private Sub Workbook_Open()
UserForm1.Show
Application.Visible = False
End Sub

Se agradecen los aportes, la pagina me ah ayudado bastante en la creación del código de esta planilla.

3 Respuestas

Respuesta
-1

Puedes poner la línea

ActiveWorkbook. Save

al final del código de un botón.

Lo que no te aseguro es si siga funcionando cuando el documento esté oculto.

Respuesta
1

Investigando en la página de TODOEXPERTOS, encontré una pregunta similar a la mía, en la cual Elsa Matilde sube el siguiente código:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
ActiveWorkbook.Close savechanges:=True
ThisWorkbook. Close
Application. Quit
End Sub

Con esto, al cerrar el form, los cambios se guardan, y ya no pide la confirmación de guardado, espero sirva a alguien que busque información similar. (Dejo el link de la pregunta original respondida por Elsa):

Guardar cambios y cerrar excel al cerrar formulario

Respuesta
1

Agrega en el botón de cerrar el formulario

ThisWorkbook. Save

Hola Sebas, es prácticamente la misma instrucción que me adjunto Daniel en el comentarios de arriba, pero no funciona... Lo agregue en los dos botones que generan cambios en la planilla, y aun así al cerrar el form y la planilla, me sigue pidiendo confirmación de guardado...

Yo lo uso siempre asi y me funciona impecable =/

ahora probe nuevamente por las dudas haciendo este senscillo userform

y sin dudas funciona impecable ...

te dejo los codigos de esos botones quizas tu estes haciendo algo mal que se yo...

Private Sub BTNGYS_Click()
' Este guarda los cambios y cierra el libro
ActiveWorkbook.Save
Application.Quit
Application.ScreenUpdating = False
Application.Visible = True
Application.ScreenUpdating = True
'
End Sub
Private Sub BTNMUESTRA_Click()
' Esta macro muestra el libro
Application.Visible = True
'
End Sub
Private Sub BTNOCULTA_Click()
' Esta macro oculta el libro
Application.Visible = False
'
End Sub
Private Sub UserForm_Initialize()
' Esto es para que cuando se inicie el formulario se oculte el libro
On Error Resume Next
Application.Visible = False
UserForm1.Show 0 ' El "0" es para que te permita modificar la hoja con el formulario abierto
'
End Sub

Y para que se abra el formulario al abrir el archivo y no se muestre la hoja pon esto en un modulo

Sub Auto_Open()
Application.ScreenUpdating = False
UserForm1.Show 0
Application.ScreenUpdating = True
End Sub

Recuerda que si guardas los cambios con el formulario, pero haces algunos clicks sobre la hoja para excel eso ya es un cambio, entonces al cerrarlo te va a preguntar si deseas guardar los cambios.. quizás sea ese tu problema

Si tu una vez que guardas los cambios cierras el formulario quizás te sea más practico el botón que te sugerí arriba (Guarda y cierra excel)

Gracias Sebas, probare también con tu código, aun que encontré uno funcional en una pregunta similar en TODOEXPERTOS que hasta ahora me funciona al 100%. Aun así gracias por tu ayuda.! :)

No hay de que compañero, estamos para ayudar..

Tu código lo que hace es cerrar el libro solo si cierras el formulario desde la POR no es muy practico

Quizás te seria más útil eliminar la POR para que lo tengan que cerrar unicamente desde el botón "Guardar y cerrar excel"

Donde dice por es "X" la página corrigió mal ja ja te dejo debajo los códigos para eliminar la POR si te interesa

'Esto va en un modulo normal
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
Public Const GWL_STYLE As Long = -16&
Public Const WS_SYSMENU As Long = &H80000
'Esto va en cada formulario que no quieras que tenga la X
Private Sub UserForm_Initialize()
Dim hWnd As Long
Dim lngWstyle As Long
hWnd = FindWindow(vbNullString, Me.Caption)
lngWstyle = GetWindowLong(hWnd, GWL_STYLE)
SetWindowLong hWnd, GWL_STYLE, lngWstyle And (Not WS_SYSMENU)
DrawMenuBar hWnd

No olvides agregar el botón de cerrar sino no tendrás como cerrarlo je je

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas