Saltar al contenido

Procedimiento muy largo para crear informe


Recommended Posts

publicado

Hola!!

Soy nuevo aquí con ustedes

esperemos y alguien pueda ayudarme!!

Tengo una macro que me manda información de Excel a Word

y a partir de esta información estoy generando un reporte. El reporte fue generado a través de una plantilla de word *.dotx. y esta es abierta con la macro para que se añada la información. Debido a que tengo un procedimiento muy largo lo dividí en varios procedimientos, esto funcionó perfectamente el problema es que cuando comienza el siguiente procedimiento no me toma el documento activo para que siga generando el reporte.

En seguida colocó un ejemplo del código:

Private Sub Inicio_Click()

Dim datos(0 To 1, 0 To n) As String

patharch = ThisWorkbook.Path & "\INFORME.dotx"

Set objWord = CreateObject("Word.Application")

objWord.Visible = True

objWord.Documents.Add Template:=patharch, NewTemplate:=False, DocumentType:=0

datos(0, 0) = "[re_RESPONSABLE_DEL_MUESTREO]"

datos(1, 0) = Hoja1.Cells(3, 1) '(fila,columna)

datos(0, 1) = "[re_ASISTENTE]"

datos(1, 1) = Hoja1.Cells(4, 1)

datos(0, 2) = "[re_FECHA]"

datos(1, 2) = Hoja1.Cells(5, 1)

datos(0, 3) = "[re_EMPRESA]"

datos(1, 3) = Hoja1.Cells(6, 1)

datos(0, 4) = "[re_DIRECCION]"

datos(1, 4) = Hoja1.Cells(7, 1)

datos(0, 5) = "[re_IDENTIFICACION]"

datos(1, 5) = Hoja1.Cells(8, 1)

----------------------------------------------------------------------------

For i = 0 To UBound(datos, 2)

textobuscar = datos(0, i)

objWord.Selection.Move 6, -1

objWord.Selection.Find.Execute FindText:=textobuscar

While objWord.Selection.Find.Found = True

objWord.Selection.Text = datos(1, i) 'texto a reemplazar

objWord.Selection.Move 6, -1

objWord.Selection.Find.Execute FindText:=textobuscar

Wend

Next i

Call procedimiento_1

End Sub

Aquí

no me toma el Informe que se inicio anteriormente si no que me abre uno nuevo y lo sigue imprimiendo.

Private Sub procedimiento_1()

Dim datos(0 To 1, n To m) As String '(columna,fila)

patharch = ThisWorkbook.Path & "\INFORME.dotx"

'Set objWord = CreateObject("Word.Application")

'objWord.Visible = True

objWord.Documents.Add Template:=patharch, NewTemplate:=False, DocumentType:=0

Ojala y alguien me pueda decir que instrucciones debo de agregarle para que continué en el mismo documento que se inicio anteriormente.

datos(0, 446) = "[re_1hh1]"

datos(1, 446) = Hoja1.Cells(697, 1).Text

datos(0, 447) = "[re_1hh2]"

datos(1, 447) = Hoja1.Cells(698, 1).Text

datos(0, 448) = "[re_1hh3]"

datos(1, 448) = Hoja1.Cells(699, 1).Text

datos(0, 449) = "[re_1hh4]"

datos(1, 449) = Hoja1.Cells(700, 1).Text

For i = n To UBound(datos, 2)

textobuscar = datos(0, i)

objWord.Selection.Move 6, -1

objWord.Selection.Find.Execute FindText:=textobuscar

While objWord.Selection.Find.Found = True

objWord.Selection.Text = datos(1, i) 'texto a reemplazar

objWord.Selection.Move 6, -1

objWord.Selection.Find.Execute FindText:=textobuscar

Wend

Next i

Call procedimiento_2

End Sub

y así sucesivamente....

Muchas gracias,

Saludos

publicado

amigo, si tienes tus macros todas en un modulo, puedes crear una variable que contenga el objeto word y que sea comun para todos los procedimientos; es decir, al principio del modulo (al inicio de todo) coloca esto:

Private objWord

y esto que está en procedimiento_1 NO hace falta, lo puedes eliminar o comentar ya que el objeto creado al principio es comun para todos

patharch = ThisWorkbook.Path & "\INFORME.dotx"

'Set objWord = CreateObject("Word.Application")

'objWord.Visible = True

objWord.Documents.Add Template:=patharch, NewTemplate:=False, DocumentType:=0

suerte

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.