Organize pranchetas de vistoria de esgoto em Carapicuíba com automação VBA

Automatize a organização de pranchetas de vistoria de esgoto no CorelDRAW usando VBA. Ganhe velocidade e padronização em projetos de saneamento.

Mais de 60% do tempo em projetos de saneamento é gasto na formatação de laudos e pranchetas, não na engenharia. Em Carapicuíba, onde a malha de esgoto exige vistorias frequentes e padronizadas pela concessionária, a repetição manual de layouts no CorelDRAW vira gargalo. A automação via VBA transforma esse fluxo: da coleta de campo à entrega do PDF assinado, tudo passa a seguir um roteiro único, rastreável e auditável.

A chave está em separar dado de apresentação. A planilha de campo (Excel, CSV ou Access) carrega a inteligência — endereço, diâmetro, material, profundidade, fotos —, enquanto o template no CorelDRAW cuida apenas da geometria visual. A macro faz a ponte, lendo linha a linha e povoando shapes nomeados com precisão de milímetro. O resultado: pranchetas idênticas em estrutura, variáveis apenas no conteúdo técnico.

Estrutura do template mestre no CorelDRAW

Crie um documento .cdr base com camadas travadas para elementos fixos (logotipo, borda, carimbo da concessionária, escalas) e camadas editáveis para dados variáveis. Nomeie cada shape que receberá dado com prefixo VAR_ (ex: VAR_ENDERECO, VAR_DIAMETRO, VAR_FOTO_1). Use Window > Dockers > Object Manager para conferir a hierarquia. Evite agrupar shapes que receberão texto dinâmico — a macro acessa direto pelo nome.

Defina estilos de texto (Text > Text Styles) para cada tipo de campo: Estilo_Cabecalho, Estilo_Tecnico, Estilo_Observacao. Isso garante que, mesmo se o texto transbordar, a formatação não quebre. Para fotos, crie placeholders (retângulos com No Fill, Outline: Hairline) nomeados VAR_FOTO_1 a VAR_FOTO_6. A macro vai importar o arquivo, fazer PowerClip dentro do placeholder e centralizar.

Mapeamento planilha → shapes: a tabela de correspondência

Campo na Planilha (Coluna) Nome do Shape no CorelDRAW Tipo de Dado Validação
COD_VISTORIA VAR_CODIGO Texto Obrigatório, único
ENDERECO_COMPLETO VAR_ENDERECO Texto Obrigatório
DATA_VISTORIA VAR_DATA Data (DD/MM/AAAA) Formato BR
RESP_TECNICO VAR_RESPONSAVEL Texto Obrigatório
TIPO_REDE VAR_TIPO_REDE Lista (Coletora/Ramal) Validação de lista
DIAMETRO_MM VAR_DIAMETRO Numérico > 0
PROFUNDIDADE_M VAR_PROFUNDIDADE Numérico (2 casas) >= 0
MATERIAL_TUBULACAO VAR_MATERIAL Lista (PVC/Concreto/AM) Validação de lista
FOTO_1_PATH … FOTO_6_PATH VAR_FOTO_1 … VAR_FOTO_6 Caminho arquivo Existe no disco
OBS_GERAIS VAR_OBS Texto longo Opcional

Essa tabela vira dicionário no código VBA. Qualquer mudança no layout — novo campo, nova foto — só exige atualizar a planilha, o template e o dicionário. Nada de hardcode de coordenadas X/Y.

Rotina principal de geração em lote

Sub GerarPranchetasVistoria()
    Dim wb As Object, ws As Object
    Dim shp As Shape, pg As Page
    Dim ultimaLinha As Long, i As Long
    Dim caminhoTemplate As String, pastaSaida As String
    Dim dictCampos As Object: Set dictCampos = CreateObject("Scripting.Dictionary")
    
    ' Configuração — ajuste aqui
    caminhoTemplate = "C:\Templates\Vistoria_Esgoto_Mestre.cdr"
    pastaSaida = "C:\Saida\Pranchetas_" & Format(Date, "YYYYMMDD")
    Set wb = CreateObject("Excel.Application")
    wb.Workbooks.Open "C:\Dados\Vistorias_Carapicuiba.xlsx"
    Set ws = wb.ActiveSheet
    ultimaLinha = ws.Cells(ws.Rows.Count, "A").End(-4162).Row ' xlUp
    
    ' Dicionário: coluna planilha -> nome shape
    dictCampos.Add "A", "VAR_CODIGO"
    dictCampos.Add "B", "VAR_ENDERECO"
    dictCampos.Add "C", "VAR_DATA"
    dictCampos.Add "D", "VAR_RESPONSAVEL"
    dictCampos.Add "E", "VAR_TIPO_REDE"
    dictCampos.Add "F", "VAR_DIAMETRO"
    dictCampos.Add "G", "VAR_PROFUNDIDADE"
    dictCampos.Add "H", "VAR_MATERIAL"
    dictCampos.Add "I", "VAR_FOTO_1"
    dictCampos.Add "J", "VAR_FOTO_2"
    dictCampos.Add "K", "VAR_FOTO_3"
    dictCampos.Add "L", "VAR_FOTO_4"
    dictCampos.Add "M", "VAR_FOTO_5"
    dictCampos.Add "N", "VAR_FOTO_6"
    dictCampos.Add "O", "VAR_OBS"
    
    Application.Optimization = True ' Desliga renderização
    Application.EventsEnabled = False
    
    For i = 2 To ultimaLinha ' Cabeçalho na linha 1
        If ws.Cells(i, 1).Value <> "" Then
            Dim docNovo As Document
            Set docNovo = Application.OpenDocument(caminhoTemplate)
            
            ' Preenche campos de texto
            For Each chave In dictCampos.Keys
                If chave <> "I" And chave <> "J" And chave <> "K" And chave <> "L" And chave <> "M" And chave <> "N" Then
                    On Error Resume Next
                    Set shp = docNovo.ActiveLayer.FindShape(dictCampos(chave))
                    On Error GoTo 0
                    If Not shp Is Nothing Then
                        shp.Text.Story = CStr(ws.Cells(i, chave).Value)
                    End If
                End If
            Next chave
            
            ' Importa fotos via PowerClip
            Dim idxFoto As Long
            For idxFoto = 1 To 6
                Dim colFoto As String
                colFoto = Chr(72 + idxFoto) ' I=9, J=10...
                Dim pathFoto As String
                pathFoto = CStr(ws.Cells(i, colFoto).Value)
                If Dir(pathFoto) <> "" Then
                    Set shp = docNovo.ActiveLayer.FindShape("VAR_FOTO_" & idxFoto)
                    If Not shp Is Nothing Then
                        Dim img As Shape
                        Set img = docNovo.ActiveLayer.Import(pathFoto)
                        img.PowerClipInto shp
                        img.Position = shp.Position ' Centraliza
                    End If
                End If
            Next idxFoto
            
            ' Salva PDF e CDR individual
            Dim nomeArquivo As String
            nomeArquivo = "VIST_" & ws.Cells(i, "A").Value & "_" & Format(ws.Cells(i, "C").Value, "YYYYMMDD")
            docNovo.ExportPDF pastaSaida & "\" & nomeArquivo & ".pdf", cdrAllPages, , , , , , , , True
            docNovo.SaveAs pastaSaida & "\" & nomeArquivo & ".cdr"
            docNovo.Close
            Set docNovo = Nothing
        End If
    Next i
    
    Application.Optimization = False
    Application.EventsEnabled = True
    wb.Close False
    wb.Quit
    MsgBox "Pranchatas geradas: " & (ultimaLinha - 1) & " em " & pastaSaida, vbInformation
End Sub

Pontos críticos no código: Application.Optimization = True evita travamento em lotes > 50 pranchetas. FindShape busca pelo nome exato — por isso a nomenclatura VAR_ é inegociável. PowerClipInto mantém a foto dentro do placeholder sem distorcer. O ExportPDF com cdrAllPages garante que, se o template tiver múltiplas páginas (capa, croqui, anexos), todas saiam no mesmo PDF.

Validação e tratamento de erros em produção

Antes do loop principal, rode uma varredura de integridade:

  1. Confira se todos os VAR_ shapes existem no template (For Each shp In docNovo.Shapes: If Left(shp.Name,4)="VAR_" Then...).
  2. Valide se a planilha tem colunas esperadas (conte ws.UsedRange.Columns.Count).
  3. Teste Dir(pathFoto) para cada linha — gere log de fotos faltantes em .txt ao lado da pasta de saída.
  4. Use On Error Resume Next apenas no bloco de preenchimento individual; registre falhas em array e reporte no MsgBox final.

Essa blindagem evita que uma única vistoria com dado sujo pare o lote inteiro. O log de erros vira checklist de correção para a equipe de campo no dia seguinte.

Integração com fluxo de campo e aprovação

A automação não acaba no PDF. Configure a macro para, ao final, disparar:

  • Criação de pasta APROVADOS_<data> e cópia dos PDFs assinados digitalmente (via Shell chamando ferramenta de assinatura).
  • Envio de e-mail resumo para o gestor com anexo do log de erros e contagem de pranchetas.
  • Atualização de status na planilha mestra (coluna STATUS = "GERADO", DATA_GERACAO = Now()).

Para equipes que usam tablets em campo, a planilha pode ser um SharePoint List ou Google Sheets — o VBA lê via MSXML2.XMLHTTP ou ODBC. O princípio é o mesmo: dado estruturado → template único → saída padronizada.

Boas práticas de manutenção da automação

Versionamento: salve o .cdr template e o módulo .bas no Git (ou OneDrive com histórico). Comite com mensagem Template v1.3 - Add campo MATERIAL_TUBULACAO. Documente no cabeçalho do módulo: autor, data, dependências (Excel 16.0, CorelDRAW 2021+), como testar.

Performance: para lotes > 200 pranchetas, divida em batches de 50 com DoEvents entre eles. Monitore memória com Task Manager — cada Import de foto carrega bitmap na RAM. Libere com Set img = Nothing logo após PowerClipInto.

Segurança: macros assinadas com certificado digital evitam o aviso de “Macros desabilitadas” em máquinas da prefeitura. Use Tools > Macros > Security > Digital Signature no CorelDRAW.

A padronização de pranchetas de vistoria em Carapicuíba deixa de ser tarefa de desenhista e vira ativo de engenharia: dado certo, layout certo, entrega certa. A macro cuida da repetição; a equipe foca na análise da rede. Para suporte técnico em campo, chame a equipe.

Quer evoluir da planilha para banco de dados? Veja como estruturar dados em Como criar macros VBA para CorelDRAW do zero. Precisa de performance em lote grande? Aplique as técnicas de Boas práticas de desempenho em macros para produção. E se o template crescer em complexidade, Automatize separação de cores para impressão serigráfica mostra como gerenciar camadas e estilos em escala.

Checklist prático

0 de 9 concluídos

Perguntas frequentes

Por que usar VBA no CorelDRAW para organizar pranchetas de vistoria?

O VBA elimina tarefas manuais repetitivas como renomear páginas, aplicar padrões de layout e preencher campos técnicos. Isso reduz erros humanos e acelera a entrega de laudos padronizados para a prefeitura ou concessionária.

Quais dados da vistoria podem ser preenchidos automaticamente via macro?

Campos como endereço, data, responsável técnico, tipo de rede, diâmetro, profundidade, material da tubulação e observações fotográficas podem ser populados a partir de planilhas Excel ou bancos de dados simples.

A automação funciona para diferentes normas de saneamento?

Sim. Basta ajustar o template mestre no CorelDRAW com os blocos de texto, camadas e estilos exigidos por cada norma (ABNT, concessionária local, etc.) e a macro aplica o padrão correto conforme o tipo de vistoria.

Preciso saber programar para usar essas macros?

Não necessariamente. Você pode usar macros prontas e editá-las apenas nos pontos de configuração (caminhos de arquivo, nomes de camadas). O ideal é entender a lógica para fazer pequenos ajustes futuros.

Como garantir que a macro não trave o CorelDRAW em arquivos grandes?

Desative a renderização de tela (`Application.Optimization = True`) durante o processamento em lote, processe páginas em blocos e libere objetos (`Set obj = Nothing`) ao final de cada laço. Evite loops aninhados desnecessários.

Posso integrar a macro com fotos da vistoria de campo?

Sim. A macro pode importar imagens de uma pasta nomeada pelo código da vistoria, redimensioná-las, posicioná-las em placeholders e renomear as layers para rastreabilidade. Requer estrutura de pastas padronizada.