Abrir un doc de word especifico o si esta abierto continuar

No se si es posible pero quisiera saber cómo podría hacerlo. Tengo una macro que me abre un documento de word específico; sin embargo en ocasiones este documento de word ya está abierto y al ejecutar la macro se bloquea todo excel.. Quisiera saber si existe una manera de que en la parte de que va a abrir el word, si está abierto simplemente lo ubique y continúe con la macro... Sin bloquearse.

1 respuesta

Respuesta
1

Prueba lo siguiente:

Sub PORTADA()
  'Declaración de variables
  Dim num As Variant
  Dim ruta As String, archi As String
  Dim TEX2 As String, TEX3 As String
  Dim WordApp As Object
  Dim wdDoc As Object
  'Dim WordApp As Word.Application
  'Dim wdDoc As Word.Document
  '
  'Ambiente
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  'Buscar archivos en la ruta con el número
  num = Worksheets("Ficha").Range("F2").Value
  ruta = "C:\Users\Laura\Dropbox\TODAS\"
  archi = Dir(ruta & "*" & num & "*.docx")
  '
  If archi <> "" Then
    '
    'Verifica si el archivo está abierto
    On Error Resume Next
    Set WordApp = GetObject(, "Word.Application")
    On Error GoTo 0
    If WordApp Is Nothing Then
      Set WordApp = CreateObject("Word.Application")
    End If
    WordApp.Visible = True
    On Error Resume Next
    Set wdDoc = WordApp.Documents(ruta & archi)
    On Error GoTo 0
    If wdDoc Is Nothing Then
      'Abre el archivo
      Set wdDoc = WordApp.Documents.Open(ruta & archi)
    Else
      'activa el archivo
      WdDoc. Activate
    End If
    Sheets("PORTADA"). Range("D3:I34"). Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp. Selection. PasteAndFormat 13
    WordApp. Selection. InsertBreak
    WordApp. Selection.Move 6, -1
    WordApp.ActiveDocument.PrintOut Range:=2
    WordApp.Documents.Save True
  Else
    'crea nuevo archivo
    Sheets("PORTADA"). Range("D3:I34"). Copy
    TEX2 = ThisWorkbook.Worksheets("PORTADA").Range("M10").Value
    TEX3 = ThisWorkbook.Worksheets("PORTADA").Range("M11").Value
    Set WordApp = CreateObject("word.Application")
    WordApp. Documents. Add
    WordApp.Selection.PasteAndFormat 13
    WordApp.Selection.InsertBreak
    WordApp.Selection.Move 6, -1
    WordApp.ActiveDocument.PrintOut Range:=2 ' wdPrintCurrentPage
    WordApp.ActiveDocument.SaveAs ruta & TEX2 & TEX3 & ".doc"
  End If
  'Cerrar word
  'WordApp.Quit
  Set WordApp = Nothing
  Set wdDoc = Nothing
  '
  Application.ScreenUpdating = True
  Application.CutCopyMode = False
End Sub

Hola, te agradezco. Sin embargo, aunque me funciona me abre un documento nuevo de word y me aparece que el archivo esta bloqueado para edición de invitado. No sé como quitar eso... ya revisé de evarias maneras

Mira 

Sub GUARDAR()
Application.ScreenUpdating = False
'Abre word
  Dim num As Variant
  Dim ruta As String
  Dim TEX2 As String, TEX3 As String
  Dim WordApp As Object
  Dim wdDoc As Object
  'Dim WordApp As Word.Application
  'Dim wdDoc As Word.Document
  '
  'Ambiente
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
    '
  num = Worksheets("Ficha").Range("F2").Value
  ruta = "C:\Users\Laura\Dropbox\DOCUMENTOS PERSONALES\CONSULTORIO\hISTORIAS CLINICAS\TODAS\"
    '
  'Buscar archivos en la ruta con el número
  archi = Dir(ruta & "*" & num & "*.docx")
    '
  If archi <> "" Then
    'Verifica si el archivo está abierto
    On Error Resume Next
    Set WordApp = GetObject(, "Word.Application")
    On Error GoTo 0
    If WordApp Is Nothing Then
      Set WordApp = CreateObject("Word.Application")
    End If
    WordApp.Visible = True
    On Error Resume Next
    Set wdDoc = WordApp.Documents(ruta & archi)
    On Error GoTo 0
    If wdDoc Is Nothing Then
      'Abre el archivo
      Set wdDoc = WordApp.Documents.Open(ruta & archi)
    Else
      'activa el archivo
      wdDoc.Activate
    End If
     'Titulo fecha
    Sheets("Ficha").Range("B10").Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp.Selection.EndKey Unit:=6
    WordApp.Selection.PasteSpecial xlPasteAllExceptBorders
WordApp.Documents.Save
         'Cerrar word
    WordApp.Quit
    Set WordApp = Nothing
    Set wdDoc = Nothing
  Else
    'crea nuevo archivo
    Sheets("PORTADA").Range("D3:I34").Copy
    TEX2 = ThisWorkbook.Worksheets("PORTADA").Range("M10").Value
    TEX3 = ThisWorkbook.Worksheets("PORTADA").Range("M11").Value
    Set WordApp = CreateObject("word.Application")
    WordApp.Documents.Add
    WordApp.ActiveDocument.SaveAs ruta & TEX2 & TEX3 & ".doc"
       'Titulo fecha
    Sheets("Ficha").Range("B10").Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp.Selection.EndKey Unit:=6
    WordApp.Selection.PasteSpecial xlPasteAllExceptBorders
WordApp.Documents.Save
         'Cerrar word
    WordApp.Quit
    Set WordApp = Nothing
    Set wdDoc = Nothing
  End If
  Application.ScreenUpdating = True
 End Sub

En un caso me funcionó pero abrio el otro documento y salió el solo lectura, y en el otro no hizo nada... no pego la información

Cambiar esta línea

WordApp. Documents. Save

Por esta

WordApp. Documents. Save True

Ahora, probemos el caso cuando el archivo, sí existe y además está abierto.

Ejecuta la macro paso a paso con F8. También pon interrupciones:

Revisa exactamente por cuáles líneas pasa el código.

Si el archivo existe y además está abierto, debe pasar por esta línea:

WdDoc. Activate

Entonces analiza en qué momento te abre un nuevo libro. Si ya está abierto el archivo doc ya no debería abrir uno nuevo.

cuando llega a wdDoc. Activate me abre el archivo y sale esto

y el archivo estaba abierto 

Igualmente lo intenté con otro archivo y llega al mismo punto pero después ya no copia la información 

¿El archivo lo tienes compartido en la red?

¿Cuándo tienes abierto el archivo, lo puedes editar o solamente es de lectura?

Te hago todas esas preguntas, porque la macro que te puse, me funciona sin problema.

el archivo esta en Dropbox unicamente.... y sí puedo editarlo cuando esta abierto. Entiendo, te agradezco si puedo solucionarlo..

Incluso hay veces que me sale el mismo letrero cuando estoy editando el archivo me pide guardarlo nuevamente y es como un bucle guarda y otra vez pide lo mismo.

Tal vez es un conflicto en la versión de office y dropbox.

Intentaste probando con un archivo word pero que esté directamente en tu disco duro.

Ya acabo de probar así con el mismo archivo con una copia en mi escritorio directamente y sucedió lo mismo.. Pero cree uno nuevo y ahí si me funcionó... aunque me creo este archivo al lado ~$prueba.docx

Prueba con el siguiente código. Debes poner todo en el mismo módulo:

Sub PORTADA()
  'Declaración de variables
  Dim num As Variant
  Dim ruta As String, archi As String
  Dim TEX2 As String, TEX3 As String
  Dim WordApp As Object
  Dim wdDoc As Object
  'Dim WordApp As Word.Application
  'Dim wdDoc As Word.Document
  '
  'Ambiente
  Application.ScreenUpdating = False
  Application.DisplayAlerts = False
  '
  'Buscar archivos en la ruta con el número
  num = Worksheets("Ficha").Range("F2").Value
  ruta = "C:\Users\Laura\Dropbox\TODAS\"
  archi = Dir(ruta & "*" & num & "*.docx")
  '
  If archi <> "" Then
    'Verifica si el archivo está abierto
    If IsFileOpen(ruta & archi) Then
      Set WordApp = GetObject(, "Word.Application")
      Set wdDoc = WordApp.Documents(ruta & archi)
      wdDoc.Activate
    Else
      Set WordApp = CreateObject("Word.Application")
      Set wdDoc = WordApp.Documents.Open(ruta & archi)
    End If
    Sheets("Ficha").Range("B10").Copy
    'Se pegara en el documento lo copiado en la hoja de calculo
    WordApp.Selection.EndKey Unit:=6
    WordApp.Selection.PasteSpecial xlPasteAllExceptBorders
    WordApp.Documents.Save True
  Else
    'crea nuevo archivo
    Sheets("Ficha").Range("B10").Copy
    TEX2 = ThisWorkbook.Worksheets("PORTADA").Range("M10").Value
    TEX3 = ThisWorkbook.Worksheets("PORTADA").Range("M11").Value
    Set WordApp = CreateObject("word.Application")
    WordApp.Documents.Add
    WordApp.Selection.EndKey Unit:=6
    WordApp.Selection.PasteSpecial xlPasteAllExceptBorders
    WordApp.ActiveDocument.SaveAs ruta & TEX2 & TEX3 & ".doc"
    WordApp.Quit
  End If
  'Cerrar word
  'WordApp.Quit
  Set WordApp = Nothing
  Set wdDoc = Nothing
  '
  Application.ScreenUpdating = True
  Application.CutCopyMode = False
End Sub
Function IsFileOpen(strFullPathFileName As String) As Boolean
'// VBA version to check if File is Open
'// We can use this for ANY FILE not just Excel!
'// Ivan F Moala
'// http://www.xcelfiles.com
Dim hdlFile As Long
    '// Error is generated if you try
    '// opening a File for ReadWrite lock >> MUST BE OPEN!
    On Error GoTo FileIsOpen:
    hdlFile = FreeFile
    Open strFullPathFileName For Random Access Read Write Lock Read Write As hdlFile
    IsFileOpen = False
    Close hdlFile
    Exit Function
FileIsOpen:
    '// Someone has it open!
    IsFileOpen = True
    Close hdlFile
End Function

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas