Formulário VBA para registrar ocorrências de esgoto pias e ralos em São Paulo com CorelDRAW
Crie formulários VBA no CorelDRAW para registrar ocorrências de esgoto em pias e ralos. Automatize relatórios técnicos em São Paulo com passo a passo completo.
Como registrar ocorrências de esgoto em pias e ralos sem perder informações no caminho entre o chamado e o relatório final? Equipes de campo em São Paulo enfrentam volume alto de atendimentos e a anotação manual em papel ou planilhas soltas gera retrabalho, erros de digitação e atraso na entrega de laudos ao cliente.
A automação via VBA no CorelDRAW resolve esse gap transformando a prancheta do técnico em formulário digital estruturado. O mesmo ambiente usado para criar artes técnicas passa a capturar dados padronizados, validar campos obrigatórios, anexar fotos georreferenciadas e gerar PDFs profissionais com um clique — tudo sem sair do aplicativo que a equipe já domina.
Este tutorial mostra o passo a passo para construir essa ponte entre coleta de campo e entrega técnica, com código comentado e boas práticas de manutenção.
Estrutura do UserForm no editor VBA
Abra o CorelDRAW, pressione Alt+F11 e insira um UserForm (Insert > UserForm). Renomeie para frmOcorrenciaEsgoto na janela Properties. Adicione os seguintes controles com nomes padronizados:
txtEndereco: TextBox para endereço completo (MultiLine = True)cboTipoOcorrencia: ComboBox com itens “Pia”, “Ralo”, “Coluna”, “Caixa de Gordura”dtpDataAtendimento: DatePicker (Microsoft Date and Time Picker Control)txtObservacoes: TextBox para observações livres (MultiLine = True, Height maior)imgFotoLocal: ImageControl para preview da fotobtnAnexarFoto: CommandButton “Anexar Foto”btnSalvar: CommandButton “Salvar Ocorrência”btnCancelar: CommandButton “Cancelar”
Organize os controles em layout limpo com labels descritivas. Defina TabIndex sequencial para navegação por teclado. No evento UserForm_Initialize, carregue o ComboBox e defina a data de hoje no DatePicker:
Private Sub UserForm_Initialize()
With Me.cboTipoOcorrencia
.AddItem "Pia"
.AddItem "Ralo"
.AddItem "Coluna"
.AddItem "Caixa de Gordura"
.ListIndex = -1
End With
Me.dtpDataAtendimento.Value = Date
Me.txtEndereco.SetFocus
End Sub
Validação e anexo de evidências fotográficas
O botão “Anexar Foto” abre diálogo de arquivo filtrando imagens. O código copia o arquivo para pasta padronizada \\Servidor\Ocorrencias\Fotos\ com nome PROT_YYYYMMDD_HHMMSS.ext e exibe preview no ImageControl:
Private Sub btnAnexarFoto_Click()
Dim fd As FileDialog, fotoPath As String, destino As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "Selecionar foto do local"
.Filters.Clear
.Filters.Add "Imagens", "*.jpg;*.jpeg;*.png;*.bmp"
.AllowMultiSelect = False
If .Show = -1 Then
fotoPath = .SelectedItems(1)
destino = "\\Servidor\Ocorrencias\Fotos\PROT_" & Format(Now, "YYYYMMDD_HHMMSS") & "_" & Me.txtProtocolo.Value & Mid(fotoPath, InStrRev(fotoPath, "."))
FileCopy fotoPath, destino
Me.imgFotoLocal.Picture = LoadPicture(destino)
Me.tagFotoPath = destino ' armazena caminho na propriedade Tag do form
End If
End With
End Sub
A validação no btnSalvar_Click impede gravação com campos essenciais vazios:
Private Sub btnSalvar_Click()
If Trim(Me.txtEndereco.Value) = "" Then
MsgBox "Endereço é obrigatório.", vbExclamation, "Validação"
Me.txtEndereco.SetFocus: Exit Sub
End If
If Me.cboTipoOcorrencia.ListIndex = -1 Then
MsgBox "Selecione o tipo de ocorrência.", vbExclamation, "Validação"
Me.cboTipoOcorrencia.SetFocus: Exit Sub
End If
' ... chama rotina de salvamento no módulo basOcorrencias
Call ModOcorrencias.SalvarOcorrencia(Me)
Unload Me
End Sub
Módulo de integração com Excel para persistência
Crie módulo padrão ModOcorrencias com rotina SalvarOcorrencia(frm As UserForm). Use late binding para não exigir referência fixa à biblioteca Excel:
Public Sub SalvarOcorrencia(frm As Object)
Dim xlApp As Object, wb As Object, ws As Object, proxLinha As Long
Const CAMINHO_PLANILHA As String = "\\Servidor\Ocorrencias\Base_Ocorrencias_Esgoto.xlsx"
On Error GoTo Erro
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = False
Set wb = xlApp.Workbooks.Open(CAMINHO_PLANILHA)
Set ws = wb.Sheets("Registros")
proxLinha = ws.Cells(ws.Rows.Count, 1).End(-4162).Row + 1 ' xlUp = -4162
With ws
.Cells(proxLinha, 1).Value = Format(Now, "YYYYMMDDHHMMSS") & "_" & Environ("USERNAME") ' Protocolo
.Cells(proxLinha, 2).Value = frm.dtpDataAtendimento.Value
.Cells(proxLinha, 3).Value = frm.txtEndereco.Value
.Cells(proxLinha, 4).Value = frm.cboTipoOcorrencia.Value
.Cells(proxLinha, 5).Value = frm.txtObservacoes.Value
.Cells(proxLinha, 6).Value = frm.tagFotoPath
.Cells(proxLinha, 7).Value = Environ("USERNAME")
.Cells(proxLinha, 8).Value = Now
End With
wb.Save
wb.Close False
xlApp.Quit
MsgBox "Ocorrência salva com sucesso!", vbInformation, "Confirmação"
Exit Sub
Erro:
MsgBox "Erro ao salvar: " & Err.Description, vbCritical, "Erro"
If Not wb Is Nothing Then wb.Close False
If Not xlApp Is Nothing Then xlApp.Quit
End Sub
A planilha mestra deve ter cabeçalhos na linha 1: Protocolo, Data, Endereço, Tipo, Observações, FotoPath, Técnico, Timestamp. Compartilhe em rede com permissão de escrita para a equipe.
Geração de relatório técnico em PDF via CorelDRAW
Crie documento template Modelo_Laudo_Esgoto.cdr com texto artístico contendo marcadores: {{PROTOCOLO}}, {{DATA}}, {{ENDERECO}}, {{TIPO}}, {{OBS}}, {{TECNICO}}. A rotina abaixo duplica a página, substitui marcadores e exporta PDF:
Public Sub GerarLaudoPDF(protocolo As String)
Dim doc As Document, pg As Page, shp As Shape, sr As ShapeRange
Dim xlApp As Object, wb As Object, ws As Object, r As Long
Dim dados As Variant, pdfPath As String
' Busca dados na planilha pelo protocolo
Set xlApp = CreateObject("Excel.Application")
Set wb = xlApp.Workbooks.Open("\\Servidor\Ocorrencias\Base_Ocorrencias_Esgoto.xlsx")
Set ws = wb.Sheets("Registros")
For r = 2 To ws.Cells(ws.Rows.Count, 1).End(-4162).Row
If ws.Cells(r, 1).Value = protocolo Then
dados = ws.Range(ws.Cells(r, 1), ws.Cells(r, 8)).Value
Exit For
End If
Next r
wb.Close False: xlApp.Quit
If IsEmpty(dados) Then MsgBox "Protocolo não encontrado.", vbExclamation: Exit Sub
' Abre template e duplica página mestre
Set doc = OpenDocument("\\Servidor\Templates\Modelo_Laudo_Esgoto.cdr")
Set pg = doc.Pages(1).Duplicate
' Substitui marcadores
For Each shp In pg.Shapes.All
If shp.Type = cdrTextShape Then
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{PROTOCOLO}}", dados(1, 1))
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{DATA}}", Format(dados(1, 2), "DD/MM/YYYY"))
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{ENDERECO}}", dados(1, 3))
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{TIPO}}", dados(1, 4))
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{OBS}}", dados(1, 5))
shp.Text.Story.Text = Replace(shp.Text.Story.Text, "{{TECNICO}}", dados(1, 7))
End If
Next shp
' Insere foto se existir
If dados(1, 6) <> "" And Dir(dados(1, 6)) <> "" Then
pg.Layers(1).ImportEx dados(1, 6), cdrCurve, cdrPlaceAtOriginalPosition
End If
pdfPath = "\\Servidor\Ocorrencias\Laudos\Laudo_" & protocolo & ".pdf"
doc.Pages(pg.Index).ExportEx pdfPath, cdrPDF, , , True
doc.Close cdrDoNotSaveChanges
MsgBox "Laudo gerado: " & pdfPath, vbInformation
End Sub
Automação de fluxo completo e boas práticas
Integre tudo em botão personalizado na barra de ferramentas do CorelDRAW. No módulo ThisDocument ou módulo padrão, crie Sub NovaOcorrencia() que apenas faz frmOcorrenciaEsgoto.Show. Adicione ícone personalizado e atalho de teclado (ex: Ctrl+Shift+O).
Para relatórios consolidados mensais, crie rotina que percorre a planilha filtrando por mês, chama GerarLaudoPDF em loop e depois combina PDFs com PrintOut para impressora PDF virtual ou usa biblioteca pdftk via Shell.
Mantenha versionamento do código no Git (pasta .git na raiz do projeto de automação). Documente cada rotina com cabeçalho padrão: finalidade, parâmetros, retorno, autor, data. Use Option Explicit em todos os módulos e trate erros com On Error GoTo em rotinas de I/O.
Equipes que adotaram este fluxo em São Paulo reduziram em 70% o tempo de elaboração de laudos e eliminaram perda de fotos de campo. A padronização também facilitou auditorias e contratos com condomínios. Para suporte especializado em campo, consulte manutenção hidráulica Sampa quando a ocorrência exigir intervenção além do registro.
Expansão para dashboards e alertas
Os dados estruturados na planilha mestra alimentam dashboards no Power BI ou no próprio Excel com Tabelas Dinâmicas: volume por tipo, tempo médio de resposta, recorrência por endereço. Combine com agendador noturno de equipes de desentupimento na capital paulista para alocar recursos baseados em demanda real.
Para escalonamento automático, implemente verificação diária via Task Scheduler que roda macro de alerta quando ocorrências críticas (coluna principal, caixa de gordura transbordando) não recebem laudo em 4 horas. Veja referência em alerta automático para escalonamento de equipes 24 horas na grande são paulo.
A automação no CorelDRAW também melhora o fluxo de atendimento em regiões de alta densidade como o Bom Retiro, onde a velocidade de geração de arte técnica e laudo impacta diretamente a satisfação do cliente. Detalhes em automação no coreldraw melhora fluxo de atendimento no bom retiro.
Com formulário VBA bem estruturado, persistência confiável e geração de laudo nativa no CorelDRAW, sua equipe transforma cada chamado em entregável técnico profissional sem atrito. O investimento inicial em desenvolvimento paga-se na primeira semana de operação em escala.
Checklist prático
Perguntas frequentes
Como criar um UserForm no editor VBA do CorelDRAW para registrar ocorrências?
Abra o editor VBA (Alt+F11), insira um UserForm via menu Insert e adicione controles como TextBox para endereço, ComboBox para tipo de ocorrência e CommandButton para salvar. Configure as propriedades de cada controle na janela Properties para definir nomes e comportamentos adequados.
Qual a melhor forma de salvar os dados do formulário em planilha Excel?
Use automação late binding com CreateObject("Excel.Application") para abrir uma planilha existente, localizar a próxima linha vazia e transferir os valores dos controles do UserForm para as células correspondentes. Feche o workbook salvando as alterações e libere os objetos da memória.
Como validar campos obrigatórios antes de gravar a ocorrência?
No evento Click do botão salvar, verifique se TextBox.Endereço.Value e ComboBox.Tipo.Value não estão vazios. Exiba MsgBox com vbExclamation se houver campos em branco e defina Focus no controle faltante. Só execute a gravação após todas validações passarem.
É possível anexar fotos do local ao registro via VBA no CorelDRAW?
Sim, adicione um controle Image ao UserForm e use Application.FileDialog(msoFileDialogFilePicker) para selecionar arquivos de imagem. Copie o arquivo para uma pasta padronizada com nome baseado na data e protocolo, e salve apenas o caminho relativo na planilha de ocorrências.
Como gerar relatório PDF automático a partir dos dados registrados?
Crie um template no CorelDRAW com marcadores de posição. Use VBA para duplicar a página, substituir os marcadores pelos dados da planilha via Find/Replace e exportar como PDF com ExportEx. Automatize o loop para gerar um PDF por ocorrência ou consolidado mensal.
Quais referências VBA são necessárias para este projeto?
No editor VBA, vá em Tools > References e marque: Microsoft Excel 16.0 Object Library (para manipular planilhas), Microsoft Scripting Runtime (para operações de arquivo/pasta) e Microsoft Forms 2.0 Object Library (já incluída para UserForms). O CorelDRAW Type Library já está ativo por padrão.