Desenhe plantas de inspeção de ralos na Vila Formosa usando automação VBA no CorelDRAW
Aprenda a criar plantas técnicas de inspeção de ralos na Vila Formosa com macros VBA no CorelDRAW. Automatize símbolos, cotas e legendas em minutos.
Você já abriu um arquivo .cdr vazio e pensou: “Como vou desenhar dezenas de ralos, caixas de inspeção e trechos de tubulação na Vila Formosa sem perder a tarde inteira alinhando objetos um a um?” A resposta curta: você não precisa. O VBA no CorelDRAW transforma esse trabalho repetitivo em um script que lê dados, posiciona símbolos, aplica cotas e monta a legenda — tudo enquanto você toma um café.
A automação não substitui o conhecimento técnico de saneamento; ela remove o gargalo operacional. Quando a equipe de campo entrega uma planilha com 120 pontos de inspeção (coordenadas, tipo de ralo, profundidade, observações), o desenhista tradicional gasta horas copiando e colando. Com VBA, o mesmo desenhista roda a macro, confere o resultado em minutos e foca na validação engenharia, não no desenho manual.
Este tutorial mostra o caminho completo: da estrutura de camadas à macro que gera a planta pronta para impressão em PDF na escala 1:50. Vamos usar exemplos reais de uma obra na Vila Formosa, mas a lógica serve para qualquer bairro ou cidade.
Estrutura de camadas e biblioteca de símbolos
Antes de escrever uma linha de código, organize o documento. Crie camadas com nomes padronizados: REDE_ESGOTO, SIMBOLOS_RALOS, COTAS, TEXTOS, LEGENDA, MOLDURA. Trave a camada MOLDURA após inserir a prancha técnica (formato A1 ou A0, carimbo da empresa, norte, escala).
Na camada SIMBOLOS_RALOS, desenhe uma vez cada símbolo mestre: ralo sifonado (círculo com “S”), grelha de piso (quadrado gradeado), caixa de inspeção (quadrado com “CI”), poço de visita (círculo duplo). Converta cada um em Símbolo (Ctrl+F3) com nomes claros: SIM_RALO_SIF, SIM_GRELHA, SIM_CI, SIM_PV. O VBA vai instanciar esses símbolos — se você ajustar o mestre, todas as instâncias atualizam.
Dica: defina a unidade do documento como milímetros e a escala 1:50 em Layout > Configurar página. Assim, 1 mm no papel = 50 mm no terreno. O VBA trabalhará em coordenadas reais (metros) e fará a conversão interna.
Preparando a planilha de dados de campo
A equipe de levantamento entrega Excel ou CSV. Padronize as colunas obrigatórias:
| Coluna | Exemplo | Descrição |
|---|---|---|
| ID | RALO_001 | Identificador único |
| TIPO | SIF | SIF, GRE, CI, PV |
| X | 12345.67 | Coordenada Este (metros) |
| Y | 67890.12 | Coordenada Norte (metros) |
| Z | 745.30 | Cota do fundo (metros) |
| PROF | 1.20 | Profundidade (metros) |
| OBS | “Entrada principal” | Texto livre |
Salve como levantamento_vila_formosa.csv (UTF-8, separador ponto e vírgula). A macro lerá linha a linha, ignorando o cabeçalho. Valide os dados antes: sem IDs duplicados, coordenadas dentro da área da prancha, tipos válidos.
Macro VBA: leitura, instanciação e posicionamento
Sub GerarPlantaInscricaoRalos()
Dim doc As Document
Set doc = ActiveDocument
Dim lyrSimbolos As Layer
Set lyrSimbolos = doc.Layers("SIMBOLOS_RALOS")
lyrSimbolos.Activate
Dim fso As Object, ts As Object, linha As String
Dim campos() As String
Dim xReal As Double, yReal As Double
Dim escala As Double: escala = 50 ' 1:50
Dim simboloNome As String, shp As Shape
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.OpenTextFile("C:\Projetos\VilaFormosa\levantamento_vila_formosa.csv", 1)
' Pular cabeçalho
ts.ReadLine
Do Until ts.AtEndOfStream
linha = ts.ReadLine
If Trim(linha) <> "" Then
campos = Split(linha, ";")
' campos: ID;TIPO;X;Y;Z;PROF;OBS
Select Case campos(1)
Case "SIF": simboloNome = "SIM_RALO_SIF"
Case "GRE": simboloNome = "SIM_GRELHA"
Case "CI": simboloNome = "SIM_CI"
Case "PV": simboloNome = "SIM_PV"
Case Else: simboloNome = "SIM_RALO_SIF"
End Select
xReal = CDbl(campos(2)) * 1000 / escala ' m -> mm na escala
yReal = CDbl(campos(3)) * 1000 / escala
Set shp = doc.AddSymbol(simboloNome, xReal, yReal)
shp.Name = "RALO_" & campos(0)
' Adicionar texto de ID e cota na camada TEXTOS
doc.Layers("TEXTOS").Activate
Dim txt As Shape
Set txt = doc.ActiveLayer.CreateArtisticText(xReal, yReal - 5, campos(0) & " | " & campos(4) & "m")
txt.Text.Story.Size = 1.5 ' mm no papel
txt.Name = "TXT_" & campos(0)
lyrSimbolos.Activate
End If
Loop
ts.Close
MsgBox "Planta base gerada. Próximo: cotas e legendas.", vbInformation
End Sub
O código acima faz o essencial: lê o CSV, escolhe o símbolo conforme o tipo, converte coordenadas reais para milímetros na escala 1:50, instancia o símbolo na camada correta e escreve o ID + cota do fundo como texto artístico. Ajuste o caminho do arquivo e a escala conforme seu projeto.
Cotagem automática entre trechos consecutivos
Com os símbolos posicionados, a rede aparece como pontos isolados. Para mostrar a tubulação, conecte os pontos na ordem hidráulica (jusante → montante). Suponha que a planilha tenha uma coluna SEQ com a sequência construtiva. Adicione esta rotina após o loop principal:
Sub DesenharRedeECotar()
Dim doc As Document: Set doc = ActiveDocument
Dim lyrRede As Layer: Set lyrRede = doc.Layers("REDE_ESGOTO")
lyrRede.Activate
Dim i As Long, total As Long
total = doc.Shapes.Count ' simplificação: assuma que só há símbolos de ralo
' Na prática, filtre por Name Like "RALO_*" e ordene por SEQ
Dim ptAnterior As Shape, ptAtual As Shape
Dim ln As Shape, dim As Shape
For i = 1 To total - 1
Set ptAnterior = doc.Shapes("RALO_" & i)
Set ptAtual = doc.Shapes("RALO_" & i + 1)
' Linha de tubulação
Set ln = doc.ActiveLayer.CreateCurveSegment(ptAnterior.Position.X, ptAnterior.Position.Y, ptAtual.Position.X, ptAtual.Position.Y)
ln.Outline.Width = 0.35 ' mm no papel
ln.Outline.Style = cdrOutlineSolid
ln.Name = "TUBO_" & i & "_" & i + 1
' Cota linear
doc.Layers("COTAS").Activate
Set dim = doc.ActiveLayer.CreateDimension(ptAnterior.Position.X, ptAnterior.Position.Y, ptAtual.Position.X, ptAtual.Position.Y, cdrDimensionLinear, 10)
dim.Dimension.Text.Size = 1.2
dim.Name = "COTA_" & i & "_" & i + 1
lyrRede.Activate
Next i
End Sub
A macro cria segmentos de linha entre pontos consecutivos e aplica cotas lineares na camada COTAS. O deslocamento de 10 mm (último parâmetro do CreateDimension) afasta a linha de cota da tubulação. Ajuste conforme a densidade da rede.
Legenda, quantitativos e bloco de revisão
A legenda não deve ser desenhada à mão. Conte instâncias de cada símbolo e gere uma tabela na camada LEGENDA:
Sub GerarLegendaEquantitativos()
Dim doc As Document: Set doc = ActiveDocument
Dim lyrLeg As Layer: Set lyrLeg = doc.Layers("LEGENDA")
lyrLeg.Activate
Dim contSIF As Long, contGRE As Long, contCI As Long, contPV As Long
Dim shp As Shape
For Each shp In doc.Shapes
If shp.Name Like "RALO_*" Then
Select Case Left(shp.Name, 8)
Case "RALO_SIF": contSIF = contSIF + 1
Case "RALO_GRE": contGRE = contGRE + 1
Case "RALO_CI_": contCI = contCI + 1
Case "RALO_PV__": contPV = contPV + 1
End Select
End If
Next shp
' Tabela simples com textos alinhados
Dim yBase As Double: yBase = 50 ' mm da base da prancha
Dim itens(3) As String, qtds(3) As Long, simbs(3) As String
itens(0) = "Ralo sifonado": qtds(0) = contSIF: simbs(0) = "SIM_RALO_SIF"
itens(1) = "Grelha de piso": qtds(1) = contGRE: simbs(1) = "SIM_GRELHA"
itens(2) = "Caixa de inspeção": qtds(2) = contCI: simbs(2) = "SIM_CI"
itens(3) = "Poço de visita": qtds(3) = contPV: simbs(3) = "SIM_PV"
Dim i As Integer
For i = 0 To 3
' Instancia símbolo pequeno na legenda
Dim s As Shape: Set s = doc.AddSymbol(simbs(i), 20, yBase + i * 8)
s.Transform.Scale 0.4, 0.4 ' 40% do tamanho original
' Texto descritivo
Dim t As Shape: Set t = doc.ActiveLayer.CreateArtisticText(30, yBase + i * 8, itens(i) & " - " & qtds(i) & " un.")
t.Text.Story.Size = 2
Next i
' Bloco de revisão no rodapé direito
Dim rev As Shape
Set rev = doc.ActiveLayer.CreateArtisticText(doc.PageSize.Width - 120, 10, "REV. 0 - " & Format(Date, "dd/mm/yyyy") & " - EMISSÃO INICIAL")
rev.Text.Story.Size = 1.8
rev.AlignToPage cdrAlignRight, cdrAlignBottom
End Sub
O bloco de revisão alinhado à direita e embaixo garante rastreabilidade. Inclua campos para responsável, aprovador e número do contrato se sua empresa exigir.
Exportação PDF pronta para obra
Configure o perfil de exportação uma vez e chame por VBA:
Sub ExportarPDFObra()
Dim doc As Document: Set doc = ActiveDocument
Dim pdfPath As String
pdfPath = "C:\Projetos\VilaFormosa\PLANTA_INSPECAO_RALOS_VILA_FORMOSA_REV0.pdf"
Dim pdfSettings As StructPdfSettings
With pdfSettings
.Author = "Seu Nome / Empresa"
.Title = "Planta de Inspeção de Ralos - Vila Formosa"
.Subject = "Levantamento topográfico - " & Format(Date, "dd/mm/yyyy")
.Keywords = "saneamento, ralos, inspeção, VBA, CorelDRAW"
.UseColorManagement = True
.CompressText = True
.CompressVector = True
.DownsampleImages = True
.ImageResolution = 300
.EmbedFonts = True
.ExportScale = 1 ' 1:1 no papel (já está na escala 1:50)
.PageRange = cdrAllPages
.Bleed = 3 ' mm
End With
doc.PublishToPDF pdfPath, pdfSettings
Shell "explorer.exe " & pdfPath, vbNormalFocus
End Sub
O PDF resultante mantém a escala exata: imprima em papel A1 e meça com régua — 1 cm no papel = 50 cm no terreno. Entregue ao fiscal de campo e ao arquivo digital.
Boas práticas de manutenção do código
Macros que rodam em produção precisam de versão, log de erros e tratamento de exceções. Adicione On Error GoTo ErroHandler no início de cada Sub, grave logs em arquivo texto com data/hora/rotina/erro e incremente a versão no bloco de revisão automaticamente. Para aprofundar, veja boas práticas de desempenho em macros para produção e como criar macros VBA para CorelDRAW do zero.
Se você atua em ambientes corporativos com MacBook via Parallels, confira automação VBA no CorelDRAW em MacBook corporativo via Parallels — o mesmo código roda, mas atalhos e caminhos de arquivo mudam.
Ao final da obra, a equipe de campo pode precisar de apoio especializado para desobstrução ou manutenção dos ralos inspecionados; nesses casos, o contato direto com quem conhece a região agiliza a solução: desentupimento de pia na Vila Formosa.
Automatizar plantas de inspeção não é luxo — é condição para entregar no prazo com qualidade. Estruture os dados, padronize os símbolos, escreva a macro uma vez e reaproveite em cada novo bairro. O tempo economizado volta como margem para revisão técnica, não como hora extra de desenho.
Checklist prático
Perguntas frequentes
Preciso saber programar para usar VBA no CorelDRAW?
Não é obrigatório ser programador. O gravador de macros do CorelDRAW captura ações básicas, e scripts simples podem ser adaptados copiando trechos de exemplos práticos. O editor VBA integrado permite testar linha a linha.
Como padronizar símbolos de ralo nas plantas de inspeção?
Crie uma biblioteca de formas mestras no CorelDRAW (símbolos de ralo sifonado, grelha, caixa de inspeção) e use VBA para instanciá-las com nomes únicos. Assim, qualquer alteração no mestre propaga a todas as ocorrências automaticamente.
É possível importar coordenadas de levantamento topográfico para o desenho?
Sim. O VBA lê arquivos CSV ou Excel com coordenadas X,Y,Z e cria pontos, linhas e textos posicionados na escala correta. Use loops para processar centenas de pontos em segundos e gere camadas organizadas por tipo de feição.
Como evitar erros de escala ao imprimir plantas em diferentes formatos?
Defina a escala do documento (ex.: 1:50) nas propriedades da página e use unidades reais no VBA. Ao exportar para PDF, fixe a escala de impressão e desative 'ajustar à página'. Teste com uma régua impressa antes da tiragem final.
Qual a melhor forma de versionar plantas de inspeção revisadas?
Adicione um bloco de revisão automatizado no rodapé da prancha: data, autor, descrição da alteração e número da versão. O VBA pode incrementar o contador e preencher os campos ao salvar, mantendo histórico no nome do arquivo (ex.: planta_v03.cdr).