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:
- Confira se todos os
VAR_shapes existem no template (For Each shp In docNovo.Shapes: If Left(shp.Name,4)="VAR_" Then...). - Valide se a planilha tem colunas esperadas (conte
ws.UsedRange.Columns.Count). - Teste
Dir(pathFoto)para cada linha — gere log de fotos faltantes em.txtao lado da pasta de saída. - Use
On Error Resume Nextapenas no bloco de preenchimento individual; registre falhas em array e reporte noMsgBoxfinal.
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 (viaShellchamando 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
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.