Problema de macro entre Excel y Word

Resuelto
nicodu072 Mensajes publicados 46 Estado Miembro -  
nicodu072 Mensajes publicados 46 Estado Miembro -
Hola,
Después de varias preguntas planteadas en el foro, y cuyas respuestas me han sido muy útiles, me dirijo nuevamente a CCM para aclarar otro punto:

Tengo un entorno de trabajo que vincula dos libros, al abrirlo me encuentro con el libro [Nomenclature] que está vinculado al libro [Lista de Proveedores].

En la hoja Lista Material Aeraulico del libro [Nomenclature], hay un botón que me permite abrir un archivo de Word para crear un mail merge automático utilizando un VBA.
Mi problema es el siguiente: cuando pruebo el VBA en Word, funciona perfectamente, pero cuando lo utilizo a través del botón de Excel, aparece un error y, por lo tanto, no funciona.
Para visualizar el funcionamiento, creo que primero hay que revisar el programa del archivo de Word (para su información, para abrir el archivo de Word, mantenga presionada la tecla Mayús ya que hay un cierre automático), luego probar el botón de Excel después.

Gracias por su ayuda.

Lista de archivos: https://www.cjoint.com/?BHom5aYnbaD

Configuración: Windows Vista / Safari 537.1

51 respuestas

  • 1
  • 2
  • 3
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Me parece haber identificado un procedimiento en el archivo que me enviaste ayer.
Estoy revisando si es factible.

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Hola,
Atención, los documentos que les envié ayer deben ser diferentes porque he completado/creado el programa hoy.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
¿Puede comunicarme el mensaje de error exacto...?
Gracias.

--
Saludos.
El Pingüino
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
En su documento de Word, realmente no es una buena idea incluir un procedimiento que cierre el archivo justo cuando se quiere abrir... ¿para qué sirve eso..., qué necesidad...! Neutralice esta macro [Private Sub Document_Open()] y luego intente desde la aplicación Excel, debería funcionar.

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
El mensaje de error es el siguiente: "Error de ejecución '5852'. El objeto solicitado no está disponible."
Luego, cuando inicio el depurado tengo:

With ActiveDocument.MailMerge
.Destination = wdSendToNewDocument (=> resaltado en amarillo)
.SuppressBlankLines = True

Deseo cerrar el archivo de Word original una vez terminado el correo masivo, no necesito tener 2 archivos de Word abiertos, sino solo el archivo proveniente del correo masivo.

No entiendo por qué desea desactivar [Private Sub Document_Open()], ya que esto es lo que inicia el correo masivo automáticamente al abrir Word.

Quedo a la espera de su respuesta.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Gracias por la información.
Sería mejor tener las órdenes de correo masivo directamente en la macro de Excel [Sub Bouton1_Clic] y es ahí donde cierras tu documento base después de su uso.
Además, en tu código la extensión del archivo de Word es [.docx] y el documento base está en [.docm]; lo que no funciona.
Con respecto al error con: [wdSendToNewDocument], verifica en Herramientas del editor de VBA bajo Referencias que la [Microsoft Word xx.0 Object Library] esté marcada (si no es así, bútquela en la lista...)
Intenta ya con este último punto para ver... !

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
En cuanto a [Micrososf Word xx.0 Object Library], está correctamente marcado, por lo que mi problema sigue presente.

Además, en mis archivos las extensiones son correctamente .doxm.

Por último, en cuanto a su inicio de respuesta, soy novato en VBA (como usted ha podido notar, creo). Creía que Excel no podía controlar Word y viceversa.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Desde Excel se puede controlar Word sin ningún problema. En su código de Excel ha utilizado correctamente esta instrucción (Set Wrd = CreateObject("word.Application") que permite acceder al objeto Word.
Estoy revisando para corregir el procedimiento y se lo transmitiré tan pronto como todo funcione.

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Buenas noches,

De acuerdo, pensaba que solo se podían abrir archivos.
Le agradezco.

Atentamente.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Usted utiliza el documento [Fiche Technique DOE AERAULIQUE.docx] sin la macro [Private Sub Document_Open()] (eliminarla)
En el módulo del libro [Nomenclature.xlsm] pegue el procedimiento que sigue, válido para la hoja [Liste Matériel Aéraulique]:
Nota: controle que la ruta ("C:\Users\Nico\Des.......") y, si es necesario, corríjala.
El código:
Sub Bouton1_Clic() Dim Wrd As Object Dim DocWord As Object Set Wrd = CreateObject("word.Application") Wrd.Visible = True nombase = "C:\Users\Nico\Desktop\Nomenclature et Fiche tecnique\Nomenclature.xlsm" feuilbase = "'Lien Aéraulique$'" nompubli = "C:\Users\Nico\Desktop\Nomenclature et Fiche tecnique\Fiche Technique DOE AERAULIQUE.docx" Set DocWord = Wrd.Documents.Open(nompubli) With DocWord.MailMerge .OpenDataSource Name:=nombase, SQLStatement:="SELECT * FROM " & feuilbase With .DataSource .FirstRecord = wdDefaultFirstRecord .LastRecord = wdDefaultLastRecord End With .Destination = wdSendToNewDocument .SuppressBlankLines = True .Execute Pause:=False ' nomfich = Wrd.ActiveDocument.Name End With DocWord.Close False End Sub

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Hola,
su protocolo funciona, pero al abrir el archivo de Word [Fiche Technique DOE AERAULIQUE], me pide seleccionar mi tabla, sin embargo, mi libro no está disponible en la elección de libros y cuando presiono cancelar, mis campos en el archivo de Word ya no están vinculados a los de Excel.
Cuando regreso al protocolo, tengo "error 4198, el comando falló" y la siguiente línea está resaltada:

.OpenDataSource Name:=nombase, SQLStatement:="SELECT * FROM " & feuilbase

Estamos acercándonos al éxito ;-).
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Tras su mensaje, he notado un pequeño error de sintaxis que ocurre en el mensaje de respuesta, donde el acento grave ['] se transforma en apóstrofe ['], lo que provoca el problema que está experimentando.
Estoy preparando una solución global para las 3 listas que enviaré por enlace y no habrá más problemas.
Si desea realizar la corrección, este es el código:
feuilbase = "'Lien Aéraulique$'"
Necesita el acento grave en lugar del apóstrofe, antes de la [L] y después del [$]

Saludos.
El Pingüino
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Mi propuesta se basa en el principio de que todos los archivos (xlsm, docx) están en la misma carpeta del directorio. Para la prueba he creado 2 documentos ficticios.
Todos los procedimientos se encuentran en el módulo [lepingou], todo lo demás ha sido eliminado excepto el módulo1 (extraño porque no hay hoja [Proveedor]... ¡!)
Solo necesita guardar la propuesta en la carpeta de su elección: https://www.cjoint.com/?3HppxyC4V77

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Gracias por este trabajo,
sin embargo tengo un poco de dificultad para entender el procedimiento a seguir (lo siento).

¿Qué debo hacer con [Sub Publipostage(nompubli, nombase, feuilbase, chemin)]?

Por ejemplo, para el botón 1, ¿debo poner:

Option Explicit

Sub Bouton1_Clic()
Dim docpub As Variant, nomcla As Variant, nomfeuil As Variant, chemin As Variant
docpub = "Ficha Técnica DOE AERAULIQUE.docx"
nomcla = ActiveWorkbook.Name
nomfeuil = "Enlace Aéraulico"
chemin = ActiveWorkbook.Path & "\"
Publipostage docpub, nomcla, nomfeuil, chemin
End Sub

Seguimiento de:

Sub Publipostage(nompubli, nombase, feuilbase, chemin)
Dim DocWord As Object, Wrd As Object
Dim nomfich As String
Set Wrd = CreateObject("word.Application")
Set DocWord = Wrd.Documents.Open(chemin & nompubli)
With DocWord.MailMerge
.OpenDataSource Name:=(chemin & nombase), SQLStatement:="SELECT * FROM '" & feuilbase & "$'"
With .DataSource
.FirstRecord = wdDefaultFirstRecord
.LastRecord = wdDefaultLastRecord
End With
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute Pause:=False
nomfich = Wrd.ActiveDocument.Name
End With
DocWord.Close False
Set DocWord = Nothing: Set Wrd = Nothing
MsgBox "El documento " & nomfich & " está listo"
End Sub

¿O debo compilar todo? ¿Y lo mismo para los otros botones?
Si puede aclararme este punto.
Cordialmente.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Primer punto, ¿ha probado directamente mi propuesta?

--
Saludos.
El Pingüino
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Para ser claros, lo primero es intentar la propuesta, es abrir el libro [Nomenclature] y para cada hoja [List...] hacer clic en el botón [Fiche TechniquePour] y verificar si el documento de Word es correcto.
Guardar la propuesta en el escritorio, por ejemplo....
Espero su respuesta.
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Lo siento, no puedo ayudar con eso.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Les he preguntado si mi propuesta funcionaba y no he recibido respuesta, lo aprecio.. !
Por principio, probamos la propuesta y luego copiamos el código en la hoja de trabajo.
Ahora ustedes precisan exactamente qué han copiado y dónde lo han pegado, no soy adivino.

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Buenas noches,
para ser claro, probé su propuesta tal cual y apareció el error, luego al reemplazar mis archivos por los suyos seguía igual.
Al ver esto, intenté en los míos eliminando mis antiguos módulos y creando uno nuevo en el que realicé la copia y pega.
Lo siento si mi respuesta no fue lo suficientemente rápida, estuve ausente por la noche.
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Adjunto el archivo que he probado y que funciona para las 3 listas (Aera, Hidra y Regu). https://www.cjoint.com/?3Hpw1pj9u4G
Copie el archivo ZIP en el escritorio, luego extraiga todos los archivos a una nueva carpeta en el escritorio y abra esta nueva carpeta, luego el libro [Nomenclature_jpp.xlw] y pruebe las 3 listas.
Nota: no debe haber otra aplicación de Excel o Word en espera.
Espero su respuesta (en caso de error, haga una captura de pantalla que pegue en un documento que me envíe).

--
Saludos.
El Pingüino
0
nicodu072 Mensajes publicados 46 Estado Miembro
 
Sin embargo, ahora el mensaje de error indica "Proyecto o biblioteca no encontrada" en lugar de "Variable no definida".
Adjunto los mensajes de error: https://www.cjoint.com/?BHpxIx8llcJ

¿No podría ser que se trate de un problema de ruta?
0
Le Pingou Mensajes publicados 12273 Fecha de registro   Estado Colaborador Última intervención   1 476
 
Hola,
Gracias.
Y esto que ya había precisado:
Respecto al error con: [wdSendToNewDocument] controlar en Herramientas del editor VBA bajo Referencia que la [Microsoft Word xx.0 Object Library] esté marcada (si no es el caso, buscarla en la lista..)

--
Saludos.
El Pingüino
0
  • 1
  • 2
  • 3