Error automatización word.

Respuesta de
raulmoscardo
a
Usuario
Hola, Raul:

Tengo el siguiente código:


Private Sub cmdDoc_Click()
Dim strGrabaRef As String

'REM strGrabaRef = Me.txtRef & ".doc"

strGrabaRef = "UE 02 016.doc"

'_________________________________________________________________
'Grabamos la refencia en el la instancia de la plantilla.
Dim mobjWordApp As Word.Application

Set mobjWordApp = New Word.Application

'Activo el documento.
Documents(strGrabaRef).Activate

With mobjWordApp
.Visible = True

'Selecciona los marcadores del documento y los reemplaza
'con los valores de los campos del formulario.

.ActiveDocument.Bookmarks("DocumentoRef").Select
.Selection.Text = (CStr(Forms!PRUEBA!txtRef))

End With

End Sub


1) Lo que quiero hacer es grabar en el marcador DocumentoRef la referencia que tengo almacenada en un campo de texto (Me.txtRef).

2) Tengo varios documentos abiertos, entre ellos el que voy a usar para grabar la referencia.

3) La referencia coincide con el nombre del docuento (Ref. : UE 02 001=> UE 02 001.doc)


No puedo llevar a cabo esta operación porque me sale el siguiente error:



"Se ha producido el error '4248' en tiempo de ejecución:

El comando no está disponible porque no hay ningún documento abierto.


Línea que produce el error:

.ActiveDocument.Bookmarks("DocumentoRef").Select

¿Alguna sugerencia?

Gracias anticipadas.

Un saludo,
Kraken.




Experto
El error 4248 te lo da porque se espera encontrar una Marcador llamado "DocumentoRef" en el .doc que activas.
...

Te recomiendo que descarques Word.mdb de http://www.freeaccess.de/downloads.asp la .mdb en cuestión es OBD WordBrief. No quiero que te molestes, pero en el nivel que veo que estas creo que te será fácil ver como trabaja esta base de datos.

Solo una cosa, y es que en la plantilla .dot que usemos como base para el doc, tienen que existir los Bookmarks de la tabla tblWordBrfSetup, excepción hecha, la .mdb va de maravilla.
...
En la página web de Ohmygood también tienes una .mdb que nos pasa el registro activo del form a un documento de word, su código es tan bueno y limpio como esto:

Private Sub Comando13_Click()
On Error Resume Next
Dim ap_word As Word.Application
Dim doc_word As Word.Document
Set ap_word = CreateObject("word.application.9")
ap_word.Visible = True
ap_word.Documents.Add
ap_word.Selection.BoldRun
ap_word.Selection.Font.Name = "VERDANA"
ap_word.Selection.Font.Color = wdColorDarkTeal
ap_word.Selection.TypeText "EJEMPLO CREADO POR LA LEYENDA DE LA PÁGINA SIN NOMBRE" & Chr(10) & Chr(13) & Chr(10) & Chr(13)
ap_word.Selection.BoldRun
ap_word.Selection.Font.Name = "ARIAL"
ap_word.Selection.Font.Color = wdColorIndigo
ap_word.Selection.TypeText "CÓDIGO: " & Me.codigo & Chr(10) & Chr(13)
ap_word.Selection.TypeText "NOMBRE: " & Me.apellido1 & ", " & Me.apellido2 & " " & Me.nombre & Chr(10) & Chr(13)
ap_word.Selection.TypeText "EDAD: " & Me.edad & Chr(10) & Chr(13)
If Me.casado = 0 Then
ap_word.Selection.TypeText "CASADO: NO" & Chr(10) & Chr(13)
Else
ap_word.Selection.TypeText "CASADO: SÍ" & Chr(10) & Chr(13)
End If
End Sub
...
Volviendo a tú código, a mi me funciona usando una plantilla .dot asi:

Private Sub Comando4_Click()
Dim strGrabaRef As String
'REM strGrabaRef = Me.txtRef & ".doc"
strGrabaRef = "d:\UE 02 016.dot" 'ruta del archivo
'_________________________________________________________________
'Grabamos la refencia en el la instancia de la plantilla.
Dim mobjWordApp As Word.Application
Set mobjWordApp = GetObject(, "Word.Application.9") 'si el .doc esta ya abierto
'no creamos otra instancia con New Word.Application, sino que obtenemos la que ya existe
''Activo el documento.
With mobjWordApp
.Visible = True
Documents.Open(strGrabaRef).Activate
'Selecciona los marcadores del documento y los reemplaza
'con los valores de los campos del formulario.
.ActiveDocument.Bookmarks("DocumentoRef").Select
.Selection.Text = (CStr(Forms!Prueba!txtRef))
End With
End Sub

NOTA: disculpa lo extenso de esto, insisto en que solo funcionará si el Marcador DocumentoRef existe en el .dot . Incluso después de probarlo no se porque desaparecen los marcadores y me da error 5941 "el elemento del conjunto solicitado no existe"

Un cordial saludo
Raul
Experto
También puedes echar un vistazo al INF: Finding a Bookmark in a Word 97 Document Using Automation
Article ID: Q160295
De la KB de microsoft

Un cordial saludo
Raul