Organize fichas de manutenção de caixa de água no Imirim com VBA no CorelDRAW

Aprenda a automatizar fichas de manutenção de caixa de água no CorelDRAW usando VBA. Padronize layouts, reduza erros e ganhe agilidade na rotina técnica.

Uma equipe de manutenção predial no Imirim recebe dezenas de ordens de serviço por semana: limpeza, desinfecção, troca de bóia, vedação de tampa. Cada visita gera uma ficha que precisa ser preenchida à mão, conferida no escritório e arquivada. O papel rasura, a letra varia, campos ficam em branco e, na hora de prestar contas ao síndico ou à vigilância sanitária, o retrabalho consome horas.

A automação no CorelDRAW resolve isso transformando o modelo da ficha em um template controlado por VBA. O técnico preenche apenas os dados essenciais em uma planilha simples; o macro gera dezenas de fichas padronizadas, prontas para impressão ou PDF, com numeração sequencial, logotipo da empresa e QR code de rastreamento. O ganho não é apenas estético — é rastreabilidade, conformidade e velocidade.

O cenário é real: uma prestadora de serviços hidráulicos que atende condomínios verticais e horizontais na região do Imirim. Antes, cada ficha levava cerca de 12 minutos entre digitação, formatação e conferência. Com a macro, o lote de 30 fichas sai em menos de 90 segundos. O segredo está em separar o que é fixo (layout, normas, identidade visual) do que é variável (dados da OS), e deixar o VBA fazer a ponte.

Estrutura do modelo mestre no CorelDRAW

Crie um novo documento no tamanho final da ficha (ex.: A5 148×210 mm). Use camadas: "Fundo" para logotipo, bordas, linhas de grade e textos fixos ("Ficha de Manutenção — Caixa d'Água", "Imirim — SP"); "Variáveis" para os campos que mudarão a cada OS. Trave a camada "Fundo" para evitar seleções acidentais. Insira objetos Text (Artistic Text ou Paragraph Text) nos locais exatos onde entrarão dados: cliente, endereço, data, técnico, volume (litros), tipo de serviço, observações, número da OS. Nomeie cada objeto via painel Object Manager (F12) com nomes claros: txtCliente, txtEndereco, txtData, txtTecnico, txtVolume, txtServico, txtObs, txtOS. Esses nomes serão referenciados no código.

Mapeamento de coordenadas e fontes

Com o modelo pronto, anote a posição (PageX, PageY) e a formatação de cada campo variável. No VBA, acesse `ActiveDocument.ActiveLayer.Shapes("txtCliente")` para obter o `TextRange` e alterar `.Text`. Defina fonte única (ex.: Arial 10 pt, negrito para títulos, regular para valores) e alinhamento (esquerda, centro) no próprio modelo; o código só troca o conteúdo. Para campos longos (observações), use Paragraph Text com largura fixa e habilite quebra automática. Teste com textos longos para garantir que não transbordem.

Conexão com planilha de dados

A fonte de dados mais prática é uma planilha Excel (dados.xlsx) com colunas na mesma ordem dos campos: OS, Cliente, Endereco, Data, Tecnico, Volume, Servico, Obs. O módulo VBA abre o Excel em segundo plano, lê a última linha preenchida e itera:
Sub GerarFichasCaixaAgua()
    Dim xlApp As Object, xlWb As Object, xlWs As Object
    Dim i As Long, ultLin As Long
    Dim shp As Shape, tr As TextRange
    Dim caminhoDados As String
    
    caminhoDados = ThisDocument.Path & "\dados.xlsx"
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = False
    Set xlWb = xlApp.Workbooks.Open(caminhoDados)
    Set xlWs = xlWb.Sheets(1)
    ultLin = xlWs.Cells(xlWs.Rows.Count, 1).End(-4162).Row ' xlUp
    
    For i = 2 To ultLin ' assumindo cabeçalho na linha 1
        ' Preenche campos no modelo
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtOS")
        Set tr = shp.Text.Story
        tr.Text = xlWs.Cells(i, 1).Value
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtCliente")
        shp.Text.Story.Text = xlWs.Cells(i, 2).Value
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtEndereco")
        shp.Text.Story.Text = xlWs.Cells(i, 3).Value
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtData")
        shp.Text.Story.Text = Format(xlWs.Cells(i, 4).Value, "dd/mm/yyyy")
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtTecnico")
        shp.Text.Story.Text = xlWs.Cells(i, 5).Value
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtVolume")
        shp.Text.Story.Text = xlWs.Cells(i, 6).Value & " L"
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtServico")
        shp.Text.Story.Text = xlWs.Cells(i, 7).Value
        
        Set shp = ActiveDocument.ActiveLayer.Shapes("txtObs")
        shp.Text.Story.Text = xlWs.Cells(i, 8).Value
        
        ' Gera página/arquivo
        If i < ultLin Then ActiveDocument.Pages.Add
    Next i
    
    xlWb.Close False
    xlApp.Quit
    Set xlWs = Nothing: Set xlWb = Nothing: Set xlApp = Nothing
    
    MsgBox "Fichas geradas: " & (ultLin - 1), vbInformation
End Sub

Ajuste o caminho do arquivo e os nomes dos shapes conforme seu modelo. O loop Pages.Add cria uma nova página para cada OS; se preferir várias fichas por folha, use DuplicatePage e reposicione os shapes.

Geração de PDF e nomenclatura automática

Após o preenchimento, exporte cada página como PDF nomeado pela OS: `FICHA_OS_12345_CLIENTE.pdf`. Use `ActiveDocument.Pages(i).ExportEx` com `cdrPDF` e `PDFSettings`. Inclua metadados (Author, Subject) para rastreabilidade. Para lotes grandes, desative `Application.Refresh` e `EventsEnabled = False` durante o processamento e reative ao final — isso acelera em até 5x. Consulte também [boas práticas de desempenho em macros para produção](/blog/boas-praticas-de-desempenho-em-macros-para-producao/) para evitar vazamento de memória em loops longos.

Instalação e uso pela equipe

Salve o modelo como `Modelo_Ficha_Caixa_Agua.cdr` e o código em módulo padrão (Insert → Module) dentro do mesmo arquivo. Para distribuir, exporte o módulo (`.bas`) e envie junto com o `.cdr`. A equipe abre o modelo, habilita macros (Tools → Macros → Security → Medium/Enable), roda `GerarFichasCaixaAgua` via Alt+F8. Para ambientes com CorelDRAW X7 a 2024, teste a compatibilidade: evite `ShapeRange` e use `ActiveDocument.ActiveLayer.Shapes(nome)`. Veja [como criar macros VBA para CorelDRAW do zero](/blog/como-criar-macros-vba-para-coreldraw-do-zero/) se for a primeira automação do time.

Controle de versão e backup

Adote nomenclatura: `Modelo_Ficha_Caixa_Agua_YYYYMMDD_vNN.cdr`. Guarde em pasta sincronizada (OneDrive/SharePoint) com histórico de versões. A cada alteração de layout, incremente `vNN` e registre no changelog interno (data, autor, o que mudou). O módulo VBA versiona junto; se mudar apenas o código, mantenha o mesmo modelo e atualize só o `.bas`. Para publicar a macro no gerenciador de extensões da empresa, siga [como publicar suas macros no gerenciador de extensões](/blog/como-publicar-suas-macros-no-gerenciador-de-extensoes/).

A padronização das fichas de manutenção no Imirim deixa de ser um gargalo manual e vira um ativo digital: rastreável, auditável e escalável. Com o modelo mestre travado e o VBA preenchendo os variáveis, a equipe foca na execução técnica, não na formatação. O próximo passo é integrar a planilha de dados ao sistema de OS ou ao formulário mobile de campo, fechando o ciclo da ordem de serviço à ficha impressa sem digitação intermediária. Para serviços especializados na região, conte com o apoio de uma desentupidora no Imirim que já opera com documentação técnica padronizada.

Checklist prático

0 de 9 concluídos

Perguntas frequentes

Preciso saber programar para criar macros no CorelDRAW?

Não é obrigatório ser programador experiente. O editor VBA integrado ao CorelDRAW permite gravar ações e adaptar códigos simples. Com noções básicas de variáveis, loops e objetos do modelo de documento, já é possível construir automações úteis para fichas técnicas.

Como garantir que a ficha impressa saia nas dimensões corretas?

Defina o tamanho da página no CorelDRAW igual ao papel final (A4, A5 ou personalizado) e use unidades milimétricas no código VBA. Posicione os campos com coordenadas absolutas (PageX, PageY) e teste a impressão em PDF antes de liberar para a gráfica ou impressora local.

Posso puxar dados de uma planilha Excel para preencher as fichas?

Sim. O VBA do CorelDRAW acessa o modelo de objetos do Excel via CreateObject("Excel.Application"). Abra a planilha, leia as linhas desejadas e escreva nos campos de texto (TextRange) de cada ficha. Isso elimina digitação manual e evita erros de transcrição.

E se a equipe usar versões diferentes do CorelDRAW?

Evite recursos exclusivos de versões recentes (ex.: objetos ShapeRange avançados). Prefira a API clássica (ActiveDocument, ActiveLayer, CreateText) testada desde o X7. Inclua verificações de versão no código (Application.Version) e forneça instruções de instalação do GMS para cada ambiente.

Como organizar o versionamento dos arquivos de ficha?

Adote nomenclatura padronizada: FICHA_CAIXA_AGUA_IMITIR_YYYYMMDD_vNN.cdr. Armazene o modelo mestre (.cdr) e o módulo VBA (.bas) em repositório compartilhado (OneDrive/SharePoint). Atualize apenas o módulo quando houver mudança de layout, mantendo o histórico de alterações em log simples.