Cerrar Word desde VBA

Anónimas
2024-07-19T23:29:50+00:00

Buenas tardes,

estoy intentando cerrar un Word llamado "Lots of Documents.docm" en vba pero no entiendo por que la macro no hace nada. Mando aquí abajo a ver si alguien pudiera ayudarme.

Sub Close_Doc()

Dim wd As Word.Application 

Set wd = GetObject(Class:="Word.Application") 

wd.Documents("Lots of Documents.docm").Close 

End Sub

Microsoft 365 y Office | Excel | Otros | Otros

Pregunta bloqueada. Esta pregunta se migró desde la Comunidad de Soporte técnico de Microsoft. Puede votar si es útil, pero no puede agregar comentarios o respuestas ni seguir la pregunta.

0 comentarios No hay comentarios

7 respuestas

Ordenar por: Muy útil
  1. Héctor Miguel 71,595 Puntos de reputación
    2024-07-21T06:51:01+00:00

    me contestas lo mismo que a Chandy.L - MSFT

    mi propuesta NO usa un objeto "wd.xxxxxxx" (lo pasa por alto y no es obligatorio)

    el error 4160 se evade con la linea de "on error resume next"

    SI se cierra el documento pero NO sale de word

    otro tema (ademas de lo ya comentado) es que...

    cuando instancias una aplicacion por metodos como getobject(... o createobject(...

    NO puedes usar las constantes 'por nombre' (en el caso de word: => wdDoNotSaveChanges)

    a menos que establezcas una referencia en tu proyecto de macros (excel) a la libreria de la aplicacion instanciada

    debes usar las contantes por su valor numerico: wdDoNotSaveChanges se cambia por 0 (cero)

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  2. Anónimas
    2024-07-20T22:04:42+00:00

    Hola Héctor, gracias por tu respuesta:

    Lo raro de todo esto es que alguna vez me ha funcionado y otras no. Estoy viendo que el OneDrive se está actualizando, no sé si pueda afectar.

    • La extensión ".docm" y el nombre del documento está correcto.
    • El "On Error Resume Next" es para que si en el caso de que no haya ningún Word abierto siga el código (este código es una parte de otro código).
    • La linea "wd.Documents("Lots of Documents.docm").Close SaveChanges:=wdDoNotSaveChanges" me da un error 4160 - Bad file name, pero está correcto.

    Muchas gracias por tu ayuda.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  3. Anónimas
    2024-07-20T21:59:47+00:00

    Hola Chandy, gracias por tu respuesta:

    Lo raro de todo esto es que alguna vez me ha funcionado y otras no. Estoy viendo que el OneDrive se está actulizando, no sé si pueda afectar.

    • La extensión ".docm" sí está en el código.
    • El "On Error Resume Next" es para que si en el caso de que no haya ningún Word abierto siga el código (este código es una parte de otro código).
    • La linea "wd.Documents("Lots of Documents.docm").Close SaveChanges:=wdDoNotSaveChanges" me da un error 4160 - Bad file name, pero está correcto.

    Muchas gracias por tu ayuda.

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  4. Héctor Miguel 71,595 Puntos de reputación
    2024-07-20T06:10:58+00:00

    puedes usar tu codigo con ligeras modificaciones (p.ej.)

    Option Compare Text 
    
    Sub cerrarDocWord(): On Error Resume Next 
    
      GetObject(, "word.application").Documents("lots of documents.docm").Close 
    
    End Sub
    

    option compare... es para que no distinga diferencias entre (may/min)usculas en el nombre

    on error resume... es para que no dispare alertas si word no esta en ejecucion o no esta abierto ese documento

    aun quedan (posibles) imponderables, p.ej.

    getobject(... detecta la primera instancia de la aplicacion (si hay mas de una... dar 'vueltas de tuerca')

    word (a diferencia de excel) puede tener abiertos dos (o mas) documentos con el mismo nombre

    (siempre y cuando esten en rutas diferentes)

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios
  5. Anónimas
    2024-07-20T04:32:53+00:00

    Buenas tardes! JavierPuig_85

    Bienvenido a la comunidad de Microsoft.

    Observo que intentas cerrar un documento de Word específico mediante VBA. Parece que vas por buen camino, sin embargo, hay un pequeño error en tu código. Debes incluir la extensión ".docm" al referirte al nombre del documento. Además, verifica que el documento esté abierto y que el nombre sea exactamente el mismo.

    Aquí tiene una versión revisada de su código:

    Sub Close_Doc()

    *Dim wd As Word.Application* 
    
    *' Attempt to get the running instance of Word* 
    
    *On Error Resume Next* 
    
    *Set wd = GetObject(Class:="Word.Application")* 
    
    *On Error GoTo 0* 
    
    *' Check if Word is running* 
    
    *If Not wd Is Nothing Then* 
    
        *' Close the specified document* 
    
        *wd.Documents("Lots of Documents.docm").Close SaveChanges:=wdDoNotSaveChanges* 
    
    *Else* 
    
        *MsgBox "Word application is not running."* 
    
    *End If* 
    
    *' Clear the object* 
    
    *Set wd = Nothing* 
    

    End Sub

    Here's a breakdown of what's happening:

    • Usando On Error Resume Siguiente para manejar la situación en la que es posible que Word no se esté ejecutando. Esto evita que el código falle.
    • verificando si wd se establece en una instancia de Word. De lo contrario, muestra un cuadro de mensaje que dice que Word no se está ejecutando.
    • Si Word se está ejecutando, intenta cerrar el documento especificado sin guardar los cambios.
    • Finalmente, borramos la referencia del objeto estableciendo wd a Nothing.

    Esto debería ayudarle a cerrar correctamente el documento "Lots of Documents.docm". Si necesita guardar los cambios antes de cerrar, puede cambiar SaveChanges:=wdDoNotSaveChanges a SaveChanges:=wdSaveChanges.

    Nota: Hay una diferencia entre cerrar un archivo y cerrar una aplicación. Si solo has abierto un archivo, puede que el programa Word no se cierre como esperabas. Puede ser necesario ajustar los detalles del código en este punto.

    Por favor revise su mensaje privado aquí, he compartido el archivo:

    Inténtalo y házmelo saber si funciona. ;)

    Chandy.L | Especialista en Soporte Comunitario de Microsoft

    ¿Le ha resultado útil esta respuesta?

    0 comentarios No hay comentarios