Datos a word

Expertos.. Tengo un botón en mi formulario el cual tiene un subformulario.. Necesito enviar los registros a word del subformulario con el siguiente ejemplo me envía solo el registro que tenga marcado, yo quiero que automáticamente em genere por cada registro del formulario los oficios en word díganme que le aumento a mi trabajo
Dim rstEmployees As New ADODB.Recordset
Dim appWord As New Word.Application
Dim intPages As Integer, strMessage As String
' Abrir un grupo de registros basado en la consulta EmployeesWithOpenIssues.
rstEmployees.Open "ObrasLicitadas", _
CurrentProject.Connection, adOpenKeyset, adLockOptimistic
' Si nadie tiene temas abiertos, mostrar un mensaje y salir.
' Abrir un documento basado en la plantilla memo, desactivar la corrección
' Ortográfica, moverse al marcadro MemoToLine y, finalmente, mostrar Word.
With appWord
.Documents.Add "C:\Datos\Plantillas\INVITACIONES.dot"
.ActiveDocument.ShowSpellingErrors = False
.Visible = True
End With
'DATOS DE LA EMPRESA
appWord.ActiveDocument.Bookmarks("EMPRESA").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Empresa].Column(1)
appWord.ActiveDocument.Bookmarks("DENOMINACION").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Denominacion]
appWord.ActiveDocument.Bookmarks("DIRECCION").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Direccion]
appWord.ActiveDocument.Bookmarks("CIUDAD").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Ciudad] & ", " & [Forms]![Licitaciones]![SF_PTecnica]![Estado]
appWord.ActiveDocument.Bookmarks("RFC").Range.Text = "R.F.C." & [Forms]![Licitaciones]![SF_PTecnica]![RFC]
appWord.ActiveDocument.Bookmarks("TELEFONO").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Telefono01] & " " & [Forms]![Licitaciones]![SF_PTecnica]![Telefono02] & " FAX " & [Forms]![Licitaciones]![SF_PTecnica]![Fax]
'DATOS DE LA LICITACION
appWord.ActiveDocument.Bookmarks("LICITACION").Range.Text = [Forms]![Licitaciones]![Licitacion]
appWord.ActiveDocument.Bookmarks("LICITACION2").Range.Text = [Forms]![Licitaciones]![Licitacion]
appWord.ActiveDocument.Bookmarks("FLIMITE").Range.Text = Format([Forms]![Licitaciones]![Limitepdeclinar], "Long Date")
appWord.ActiveDocument.Bookmarks("FVISITA").Range.Text = Format([Forms]![Licitaciones]![Fvisita], "Long Date")
'PIE DE PAGINA
appWord.ActiveDocument.Bookmarks("LICITACION3").Range.Text = [Forms]![Licitaciones]![Licitacion]
appWord.ActiveDocument.Bookmarks("TLICITACION").Range.Text = [Forms]![Licitaciones]![Tlicitacion]
'DATOS DE LAS OBRAS
Do Until rstEmployees.EOF
appWord.ActiveDocument.Bookmarks("OBRA").Range.Text = rstEmployees!ObraText & vbNewLine
rstEmployees.MoveNext
Loop
End Sub

1 respuesta

Respuesta
1
Para referenciar el recordset (los registros o filas) de un subformulario se puede usar la sintaxis:
set rst=form!subform.recordsetclone()
Donde form y subform se sustituyen por los nombre de tu formulario y subformulario respectivamente.
Siento que el problema puede ocurrir porque la parte inicial del documento esta referenciada al formulario y no al recordset.
appWord.ActiveDocument.Bookmarks("EMPRESA").Range.Text = [Forms]![Licitaciones]![SF_PTecnica]![Empresa].Column(1)
Debe ser:
appWord.ActiveDocument.Bookmarks("EMPRESA").Range.Text = Rst![Empresa]
Y así por el estilo.
El problema con esto es que en el recordset no tienen los controles sino los valores de los controles por lo que no puedes hacer referencias a controles como por ejemplo Campo. Column(1) que tiene el ejemplo anterior.
Otra solución sería avanzar el formulario a como avanza el recordset.
set rst=[Forms]![Licitaciones]![SF_PTecnica]!Recordsetclone()
rst.movefirst
do until rst.eof
[Forms]![Licitaciones]![SF_PTecnica].bookmark =rst.bookmark
' aqui va toda la logica existente
rst.movenext
loop
Es excelente tu planteamiento aunque también lo resolví creando una consulta referencia al formulario y la filtro con el registro activo.. y me resulto excelente...
Saludos..
Por lo que puedo leer, estas transfiriendo todos los registros (si la consulta esta correctamente diseñada) a un solo documento, es decir, el ciclo (o bucle) de do debería iniciar con la creación del documento justo encima de 'with appWord' y de esta manera se generaría una instancia del documento para cada registro seleccionado.
Si se trata de muchos registros sería prudente al final del ciclo guardar y cerrar el documento con un nombre identificable ya que si no lo haces así podrías encontrar algún tope de capacidad de Word.
Recuerda que debes 'limpiar' tu conexión a Word al finalizar 'set appword=nothing' con el fin de evitar comportamientos extraños.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas