Espero que un experto de VB/VBA pueda ayudarme. Tenga en cuenta lo siguiente: El usuario abre un documento en Word 2003, y dentro de la macro Normal.dot AutoOpen
, miramos el documento actual, y si se ha abierto haciendo clic en un enlace en una página web, y cumple con cierta otra aplicación específica criterios, cierran el streaming 'copia' y abrir el documento de origen (que se encuentra en una unidad compartida, podemos suponer que el usuario tiene acceso a):Abrir/activar documentos de Word en una macro de VBA
Documents.Open origDoc
Documents(ActiveDocument.FullName).Close SaveChanges:=wdDoNotSaveChanges
Documents(origDoc).Activate
With ActiveDocument
''# Do work
End With
Mi pensamiento era que tenía que llamar Activate
para asegurar que el original documento fue el ActiveDocument
, pero recibo un error de 4160 'Nombre de archivo incorrecto' en la llamada .Activate
. Si hago un comentario de la llamada al .Activate
, parece que ActiveDocument
se establece en el documento origDoc, incluso si ya había otros documentos abiertos (no estoy muy seguro de cómo se gestiona la Colección de documentos, y cómo Word determina qué sería lo siguiente ActiveDocument
ser si programáticamente cierra el ActiveDocument actual)
Entonces, ¿llamando al .Open
en un documento establece explícitamente que el documento sea el ActiveDocument
? Además, ¿llamar al .Activate
en el documento ya activo causa un error?
Realmente no he podido encontrar mucha documentación sobre esto, así que ¡gracias de antemano por cualquier sugerencia y visión!
Presumiblemente, ha estado manejando la copia del documento como el ActiveDocument en su código. Sería mucho mejor asignar ese objeto de documento a una variable al comienzo de su código y usar su variable a través del resto del código. Como han señalado otros, probablemente cierre la versión incorrecta del documento en la segunda línea de código. También sería conveniente asignar el objeto del documento "original" a una variable cuando lo abra. – robartsd