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
- Vamos fornecer o caminho e o nome do banco
de dados
- O nome da tabela
- Através de uma instrução SQL selecionar
alguns registros da tabela
- Exportar os registros selecionados para o
Word gerando uma tabela de 2 colunas
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:
- Inicie um novo projeto STANDARD EXE no
VB
- Faça uma referência a Microsoft Word x.0
object library
- Faça uma referência a Microsoft DAO 3.X
object Library
- No formulário padrão insira os controles
como na figura abaixo:
|
-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....