Como salir de excel sin guardar mediante una macro

Respuesta de
a
Usuario
Hola

Ojala me puedas ayudar... sabes necesito hacer código en una macro, para que cuando termine de ejecutarse salga sin guardar, ¿y qué no muestre el mensaje desea guardar los cambios?, bueno si es que se puede hacer, estaré super agradecida..

Juliana
Avatar
Experto

Hola, Juliana!

Usa la siguiente instrucción:

ActiveWorkbook.Close False

El secreto está en la cláusula FALSE.

Espero que sea lo que buscas.

Un abrazo!
Fernando
Usuario
Hola Fernando

Muchas gracias por tu respuesta, solucionado mi problema, pero tengo otro, ojala me puedas ayudar también... resulta que tengo tengo una macro para copiar un archivo donde ya existe uno con el mismo nombre y debo reemplazarlo, pero no me tiene que preguntar si deseo reemplazarlo, ya que debe ser todo sin que el usuario vea, puedo hacer todo lo demás, que copie, solo que me pregunta si quiero reemplazar, en código no se como es, igual sigo probando...

Esperando tu ayudita...

Juliana

Muchas gracias de antemano...
Avatar
Experto

Hola, Juliana!

La siguiente sentencia evitará que aparezcan los mensajes:

Application.Displayalerts = False

Una vez copiado el archivo recuerda reactivarla de nuevo por si hubiera mensajes que sí te interesa mostrar. Esto sería:

Application.Displayalerts = True

Adicionalmente, si quieres que no se muestre en pantalla lo que está haciendo la macro puedes usar, ademas, esta otra instrucción:

Application.Screenupdating = False

Espero que puedas resolver tu problema con esto.

Un abrazo!
Fernando
Usuario
Hola

Perdona que te moleste tanto, muchas gracias por todas tus respuesta, la ultima es la única que no la he aplicado bien, pues cuando me dice que ya existe un archivo con ese nombre y si lo deseo reemplazar, entonces el mensaje para decir que si, me sigue apareciendo, si escribo la sentencia que me das no la reemplaza... pero bueno esa problemilla tengo, pero tengo otro peor, por ejecutar macros se me pega el pc, a cada momento, cuando hago control + alt+ sup, para cerrar los programas que están en loop, me aparecen hojas de excel, varios, quedan en memoria y me causan que al final todo se pega y tengo que reiniciar, mi consulta es como puedo cerrar todas esas aplicaciones que quedan en memoria, o mejor como no permitir que queden en memoria... si me ayudas en esto me sacaras de un gran lio en que me encuentro... ya que me están reclamando...

De antemano... muchas gracias
Avatar
Experto
Que tal, Juliana!

La sentencia
Application.DisplayAlerts = False
Efectivamente evita que el mensaje de reemplazo de archivo existente aparezca.

Supongamos la siguiente macro:

Sub GRABArch()

EnCarpeta = ActiveWorkbook.Path 'indica en qué carpeta grabar
ArchNombre = ActiveWorkbook.Name 'indica con qué nombre

Application.DisplayAlerts = False ' Anula mensajes
ActiveWorkbook.SaveAs EnCarpeta & "\" & ArchNombre 'graba en dirección dada
Application.DisplayAlerts = True ' Restituye mensajes

End Sub

Esta macro graba el archivo donde está (pero puedes indicarle otra carpeta en la variable EnCarpeta) y no pregunta si lo deseo reemplazar. Directamente, lo hace sin mostrar mensaje alguno.

Intentalo nuevamente y luego dime.

---

Tu segunda consulta es más difícil de resolver, pues depende mucho de qué es lo que hagan las macros de ese archivo, que tamaño tenga, si tiene gráficos y/o tablas dinámicas, etc.

Mi sugerencia es evaluar dónde se produce el problema, ejecutando la macro en el modo Paso a paso.

Haciendo "Herramientas" | "Macro" | "Macros...", elige (un sólo click sobre) la macro que genera el problema y presiona el botón "Paso a paso". Esdto te llevará al editor de Visual Basic marcando la primer instrucción que tu macro va a realizar.
Aquí te conviene, modificar el tamaño de esta ventana para que veas el código y qué está pasando en tu archivo de Excel, en cada instrucción.
PAra que avance a la siguiente línea de código, presiona F8 y así sucesivamente hasta que encuentres la instrucción o el loop que provoca el congestinamiento.

Espeor que esto te ayude. NO es posible ayudarte a distancia en un problema como el que planteas, dado que hay muchas variables involucradas (¿equipo, sistema operativo, virus?, tamaño de archivo, fórmulas y macros que contiene, complementos que se cargan al iniciar MS Excel, configuración de la red, etc.)

Saludos!
Fernando
Usuario
Hola

Antes que nada muchas gracias por ayudarme y resolver mis problemillas, muy buenas tus respuestas, solo la ultima aun no la puedo solucionar, no se como asegurarme de cerrar una hoja, si tu pudieras decirme ¿cómo es la forma correcta de cerrar cuando termino la macro?...¿Por ultimo como puedo saber si una hoja de excel ya esta abierta?, esto me ha ocasionado varios problemillas ya que se interrumpe la aplicación, pues en la macro yo le digo que abra un archivo pero si esta ya esta abierta me arroja error, por ultimo como puedo saber si una hoja a donde envío ciertos datos (esto desde visual basic 6.0 a excel), ¿esta oculta en el libro que ya existe y donde quiero enviar los datos?, esto también me arroja error... uy pregunte demasiado parece... estoy llena de dudas... bueno pero si son las ultimas pues me daría vergüenza molestarte otra vez... muchas muchas gracias de antemano...

Muchos saludos y te felicito por tener la voluntad de ayudar a personas sin experiencia como yo...
Avatar
Experto

Hola, Juliana!

Que nunca te avergüence preguntar: es la mejor forma de aprender. (Aunque sí puedes hacerlo en otra pregunta nueva, pues esta ya está muy larga).

OK. Haré un compendio de todas las respuestas anteriores. Tu macro debería ser:


EnCarpeta = ActiveWorkbook.Path 'indica en qué carpeta grabar
ArchNombre = ActiveWorkbook.Name 'indica con qué nombre

Application.DisplayAlerts = False ' Anula mensajes
ActiveWorkbook.SaveAs EnCarpeta & "\" & ArchNombre 'graba en dirección dada
Application.DisplayAlerts = True ' Restituye mensajes

ActiveWorkbook.Saved = True ' ASUME QUE EL ARCHIVO ESTAQ GRABADO y NO PREGUNTA SI DESEA GUARDARLO

ActiveWorkbook.Close False 'Cierra el libro sin preguntar por la grabación. Esta debe ser la ultima instrucción

Nota que el cierre del libro debe ser la última instrucción de la macro pues al cerrarse no podrás ejecutar ningún otro comando (la macro ya no estará en memoria)


Respecto a averiguar si un archivo ya está abierto, esta rutina te será de ayuda:

Dim chk As String
Dim FileOp As Workbook

PathFold = "C:\Mis Documentos\Juliana 'indica en qué carpeta buscar el archivo.
MyFileName = LibroAbrir.xls 'indica qué nombre tiene el archivo que quieres abrir

chk = Dir(PathFold & "\" & MyFileName)

'control de archivo abierto
On Error Resume Next
Set FileOp = Workbooks(chk)
If Err <> 0 Then
Workbooks.Open PathFold & "\" & MyFileName
Else
MsgBox = "El archivo YA ESTA abierto"
End If
On Error GoTo 0
End If


Por último, la macro que sigue averigua si la hoja que le indiques en ella está oculta. Si así fuera, solicita que le ingreses el nombre del hoja alternativa. L macro volverá a indagar si esta otra está oculta hasta que le ingreses una visible. Luego te llevará a ella. Agrega, donde te indico, la macro que hayas creado para pegar los datos en tal hoja.

Sub IndicaHoja()

HojaAenviarDatos = "Hoja3"

88: If Not Sheets(HojaAenviarDatos).Visible Then
HojaAenviarDatos = InputBox("La hoja seleccionada está Oculta." & Chr(10) & "Ingrese nombre de la nueva hoja destino", "HOJA DESTINO NO ACCESIBLE")

GoTo 88
End If
Sheets(HojaAenviarDatos).Select

'aqui va tu instrucción para copiar datos

End Sub

Fiuuú! Espero que con esto puedas resolver tu problema. En caso contrario, ya sabes que estoy aquí para ayudar(te).

Un beso!
Fernando
Avatar
Experto
Hola, Juliana

Serías tan amable de finalizar esta pregunta.

Hay gente que no puede consultarme porque tengo muchas preguntas sin finalizar.

Cordialmente
Fernando
Usuario
Hola Fernando

Antes que nada te pido disculpas por no finalizar mi pregunta, estaba de vacaciones y no sabia que no podías contestar otras si no había finalizado yo esta, bueno quiero agradecer tu ayuda la que me ha ayudado un montón, gracias por la voluntad de ayudar a otros...

Muchos saludos

Patty