VBA - Gerando etiquetas no Word


Precisando gerar etiquetas para seus clientes , que tal usar a integração VB-Word usando VBA para automatizar esta tarefa ? Este será o assunto do nosso artigo.

Já tratamos da mesclagem de dados para gerar documentos no artigo - Criando Relatórios com o Word

A novidade deste artigo é que iremos gerar etiquetas com os dados de uma tabela em um banco de dados Access.

Na verdade estaremos usando um banco de dados por uma questão de conveniência , mas , poderíamos ter usado um arquivo texto. Sim , você pode criar um arquivo texto e usá-lo como fonte de dados para gerar as etiquetas. Ao gerar o arquivo você somente deve tomar o cuidado de de separar as colunas com um caractere TAB e os registros com um caractere - ENTER . Veja abaixo um exemplo de um arquivo texto que poderíamos usar:

A tabela Clientes , que será a nossa fonte de dados , possui os seguintes dados :

- Inicie um novo projeto no VB e no formulário padrão insira os controles conforme o layout abaixo :

- Um controle Label - label1

- Um controle TextBox - Text1.text

- Um botão de comando - command1

- Não esqueça de fazer a referência a biblioteca - Microsoft Word Object Library :

  1. Microsoft Word 8.0 Object Library - Se você tiver o Word 97
  2. Microsoft Word 9.0 Object Library - Se você tiver o Word 2000
  3. Microsoft Word 10.0 Object Library - Se você tiver o Word 2002

- Agora no evento Click do botão de comando - command1 - insira o código abaixo:

Private Sub Command1_Click()

Dim oApp As Word.Application
Dim oDoc As Word.Document

'Inicia um novo documento Word
Set oApp = CreateObject("Word.Application")
Set oDoc = oApp.Documents.Add

Command1.Caption = "&Gerando Etiquetas..."
With oDoc.MailMerge

'Inclui os campos de mesclagens temporarios
'Usamos os campos da tabela Clientes do banco de dados Clientes2.mdb
 With .Fields
  .Add oApp.Selection.Range, "Nome"
  oApp.Selection.TypeParagraph
  .Add oApp.Selection.Range, "Endereco"
  oApp.Selection.TypeParagraph
  .Add oApp.Selection.Range, "Cidade"
  oApp.Selection.TypeText " "
  .Add oApp.Selection.Range, "Cep"
  oApp.Selection.TypeText " - "
  .Add oApp.Selection.Range, "Estado"
 End With
 Dim oAutoText As Word.AutoTextEntry
 Set oAutoText = oApp.NormalTemplate.AutoTextEntries.Add("MinhasEtiquetas", oDoc.Content)

 'os campos de mesclagens serão excluidos pois a entrada - AutoText foi gerada
 oDoc.Content.Delete
 
 'Define a mesclagens para etiquetas e usa um banco de dados
 'como fonte de dados , voce pode usar um arquivo texto|
 .MainDocumentType = wdMailingLabels
 'Informe aqui o caminho da fonte de dados
 '.OpenDataSource Name:="C:\teste\etiqueta.txt" --> Voce pode usar um arquivo texto
 sDBPath = Text1.Text
 .OpenDataSource Name:=sDBPath, SQLStatement:="SELECT * FROM Clientes"

 'Cria um novo documento para as etiquetas usando a entrada AutoText
 '5160 é o numero da etiqueta a usada
 oApp.MailingLabel.CreateNewDocument Name:="5160", Address:="", _
 AutoText:="MinhasEtiquetas", LaserTray:=wdPrinterManualFeed
 
 'Executa a mesclagem para gerar as etiquetas
 .Destination = wdSendToNewDocument
 .Execute
 
 'Excluir a entrada AutoText inserida
 oAutoText.Delete

End With

Command1.Caption = "&Etiquetas Geradas..."
'fecha o documento original e torna o word visivel e exibe as etiquetas
oDoc.Close False
oApp.Visible = True
Command1.Caption = "&Gerar Etiquetas"
' Salva o modelo quando o usuario sair do word
oApp.NormalTemplate.Saved = True

End Sub

Como o código já esta comentado eu não vou me ater em explicar novamente o que ele faz. Agora é só executar e aguardar uns instantes , e , voilá, eis as etiquetas geradas no Word...

Obs: Se a sua fonte de dados for muito grande a geração pode demorar um pouquinho...

Para se informar mais sobre este assunto veja o links na Knowledge Base :

  1. Q289830 PRB: Prompt to Select Table with Word 2002 Mail Merge Code for Excel or Access Data Source
  2. Q279462 PRB: Prompted To Select a Data Source While Automating Word 2002 Mail Merge
  3. Q285333 INFO: Word 2002 MailMerge Event Code Demonstration
  4. Q285176 HOWTO: Automate Word to Perform a Client-Side Mail Merge Using XML from SQL Server
  5. Q220607 HOWTO: Automate Word to Perform Mail Merge from Visual Basic

Tranquilo ... Até breve...

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti