VBA - Criando uma tabela no Word com dados de  um Recordset


Mais uma vez voltamos a abordar a geração de documentos no Word via VBA. Nos artigos - OLE - Conceitos e Criando Relatórios com o Word já falamos sobre o assunto , mas, como sempre há algo novo a aprender vamos mostrar nesta dica como gerar uma tabela no Word com os dados de um banco de dados access.  

O código usado no projeto somente irá funcionar a partir da versão do Word 97 , quando definitivamente o Word passou suportar um modelo de objetos completo.

Como Funciona

Para o exemplo usamos o banco de dados Biblio.mdb e a tabela Publishers de onde selecionamos todos os registros cujo estado(State) for igual a MA :

"select * from " & txttabela.Text & " where State = 'MA'"

O resto o VBA faz ...

O Projeto:

-Duas caixas de texto - txtbd e txttabela

-Três Labels

-Um botão de comando - cmdexport

 

A seguir insira o seguinte código no formulário:

Option Explicit

' Referencias => DAO 3.X
' Referencias => Microsoft Word 8.0 Object Library

Private WordApp As Word.Application
Private doc As Word.Document
Private sel As Word.Selection

Private db As Database
Private rs As Recordset

Private Sub cmdExport_Click()

If txtbd.Text <> "" And txttabela.Text <> "" Then

  Dim i As Integer
  Set db = OpenDatabase(txtbd.Text)
  Set rs = db.OpenRecordset("select * from " & txttabela.Text & " where State = 'MA'")

  Set WordApp = New Word.Application

  lblStatus.Visible = True

  On Error Resume Next
  WordApp.Documents.Add
  Set doc = WordApp.ActiveDocument
  Set sel = WordApp.Selection

  'define o número de colunas da tabela

  doc.Tables.Add Range:=sel.Range, NumRows:=1, NumColumns:=2

  i = 0
  Do Until rs.EOF
  lblStatus.Caption = "Registros Exportados : " & i

  sel.TypeText Text:=rs!Name
  sel.MoveRight unit:=12               
  ' 12 = proxima celula

  sel.TypeText Text:=rs!Address
  sel.MoveRight unit:=12


  rs.MoveNext
  DoEvents

   i = i + 1

   Loop

   lblStatus.Caption = "Registros Exportados : " & i
   WordApp.Visible = True

   Set WordApp = Nothing
Else
       MsgBox "Informe um Caminho/Nome valido para o Banco de dados/Tabela ! "
End If
End Sub

Neste exemplo estamos exportando somente os campos - Name e Address da tabela Publishers. Você pode incrementar o projeto até o limite da sua imaginação...

Abaixo a tabela gerada no Word para o nosso exemplo:

Tchau....