Automatize etiquetas de depilação a laser Vila Olímpia com VBA CorelDRAW

Aprenda a criar macros VBA no CorelDRAW para gerar etiquetas de depilação a laser padronizadas, rastreáveis e prontas para impressão em minutos.

A recepcionista da clínica de estética em Vila Olímpia me mostrou a pilha de etiquetas impressas na noite anterior: nomes cortados, potências trocadas, códigos de barras ilegíveis. Cada erro significava um cliente esperando, um profissional parando o atendimento para conferir manualmente e um retrabalho que consumia horas da equipe. O cenário era clássico — planilha no Excel, template no CorelDRAW, cópia e colagem manual página a página.

A automação com VBA transforma esse fluxo em um único botão. O CorelDRAW expõe todo seu modelo de objetos — páginas, camadas, formas, textos, guidelines — permitindo que uma macro leia a planilha mestra, duplique o template exato para cada registro, preencha campos com precisão milimétrica e envie direto para a impressora com checkpoint de retomada. O resultado: 200 etiquetas padronizadas em minutos, sem erros de digitação e com rastreabilidade total.

Este tutorial mostra o passo a passo completo: da estrutura do template à macro pronta para produção, incluindo tratamento de erros, geração de QR Code e integração com Excel. Você vai sair com um arquivo .gms instalável e o conhecimento para adaptar a qualquer outro produto que exija etiquetas rastreáveis em série.

Estrutura do template: camadas, guidelines e nomes de objetos

A base de toda automação confiável é um template imutável. Crie um documento novo no CorelDRAW com unidade de medida em milímetros (Tools > Options > Document > Rulers). Desenhe o retângulo da etiqueta no tamanho final de corte (ex: 50 x 30 mm) e trave a camada “Corte”. Sobre ela, crie camadas “Texto”, “Codigos” e “Guias”.

Na camada “Guias”, adicione guidelines horizontais e verticais nas margens de segurança (3 mm) e nas posições de cada campo. Use View > Guidelines Setup para travar as guidelines. Agora, para cada campo (cliente, área, potência, sessão, data, profissional), crie um texto artístico (Text > Artistic Text) posicionado exatamente sobre a guideline correspondente. Renomeie cada objeto no Object Manager (F12) com prefixo claro: txtCliente, txtArea, txtPotencia, txtSessao, txtData, txtProfissional. Essa nomenclatura é o que o VBA vai buscar via ActiveLayer.Shapes("txtCliente").Text.Story.Text.

Para o QR Code, crie um retângulo placeholder 12 x 12 mm na camada “Codigos”, nomeie qrPlaceholder. Ele será substituído em tempo de execução por um bitmap gerado via biblioteca externa. Salve o template como etiqueta_depilacao_master.cdr em pasta de rede acessível (ex: \servidor\templates\).

Planilha mestra: colunas, validação e versão

A planilha é a fonte única da verdade. Crie dados_etiquetas.xlsx com a primeira linha exatamente assim:

Cliente Area Potencia Sessao Data Profissional QRData
Maria Silva Axila 18J 3 2024-03-15 Ana DEP
João Santos Perna 22J 1 2024-03-15 Carlos DEP

A coluna QRData concatena os campos essenciais para o código de barras bidimensional. Use validação de dados (Data > Data Validation) nas colunas Area (lista: Axila, Perna, Virilha, Rosto, Buço) e Potencia (lista: 12J, 14J, 16J, 18J, 20J, 22J) para evitar typos que quebrariam a macro. Proteja a planilha (Review > Protect Sheet) permitindo apenas edição nas células de dados.

Guarde a planilha na mesma pasta do template. Adicione uma aba “Controle” com célula B1 guardando o índice da última linha processada com sucesso — esse será o checkpoint de retomada.

Macro VBA: leitura, loop, preenchimento e impressão

Abra o CorelDRAW, pressione Alt+F11, insira um módulo padrão (Insert > Module) e cole o código abaixo. Comentários explicam cada bloco.

Option Explicit

Sub GerarEtiquetasDepilacao()
    Dim xlApp As Object, xlWb As Object, xlWs As Object
    Dim cdrDoc As Document, cdrPage As Page
    Dim shp As Shape, i As Long, lastRow As Long
    Dim checkpoint As Long, qrPath As String
    Dim logFile As Long
    
    ' --- Configurações ---
    Const TEMPLATE_PATH = "\\servidor\templates\etiqueta_depilacao_master.cdr"
    Const EXCEL_PATH = "\\servidor\templates\dados_etiquetas.xlsx"
    Const LOG_PATH = "\\servidor\logs\etiquetas_log_" & Format(Date, "yyyymmdd") & ".txt"
    
    ' --- Checkpoint de retomada ---
    logFile = FreeFile
    Open LOG_PATH For Append As #logFile
    Print #logFile, "Início: " & Now
    Close #logFile
    
    ' --- Abre Excel ---
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Visible = False
    Set xlWb = xlApp.Workbooks.Open(EXCEL_PATH)
    Set xlWs = xlWb.Sheets("Dados")
    
    ' Lê checkpoint da aba Controle
    checkpoint = xlWb.Sheets("Controle").Range("B1").Value
    If checkpoint = 0 Then checkpoint = 1
    
    ' Última linha com dados
    lastRow = xlWs.Cells(xlWs.Rows.Count, "A").End(-4162).Row ' xlUp
    
    ' --- Abre template CorelDRAW ---
    Set cdrDoc = OpenDocument(TEMPLATE_PATH)
    Application.Optimization = True
    Application.ScreenUpdating = False
    
    For i = checkpoint To lastRow
        If Trim(xlWs.Cells(i, 1).Value) = "" Then GoTo Proximo
        
        ' Duplica página mestre (página 1)
        cdrDoc.Pages(1).Duplicate
        Set cdrPage = cdrDoc.Pages(cdrDoc.Pages.Count)
        cdrPage.Activate
        
        ' Preenche textos
        With cdrPage.Layers("Texto")
            .Shapes("txtCliente").Text.Story.Text = xlWs.Cells(i, 1).Value
            .Shapes("txtArea").Text.Story.Text = xlWs.Cells(i, 2).Value
            .Shapes("txtPotencia").Text.Story.Text = xlWs.Cells(i, 3).Value
            .Shapes("txtSessao").Text.Story.Text = "Sessão " & xlWs.Cells(i, 4).Value
            .Shapes("txtData").Text.Story.Text = Format(xlWs.Cells(i, 5).Value, "dd/mm/yyyy")
            .Shapes("txtProfissional").Text.Story.Text = xlWs.Cells(i, 6).Value
        End With
        
        ' Gera QR Code via linha de comando (ZXing)
        qrPath = Environ("TEMP") & "\qr_" & i & ".png"
        Shell "cmd /c zxing encode -f PNG -w 12 -h 12 -o " & qrPath & " "" & xlWs.Cells(i, 7).Value & """, vbHide
        Do While Dir(qrPath) = "": DoEvents: Loop
        
        ' Substitui placeholder por bitmap
        With cdrPage.Layers("Codigos")
            .Shapes("qrPlaceholder").Delete
            .ImportBitmap qrPath
            .Shapes(.Shapes.Count).Name = "qrCode"
            .Shapes("qrCode").SetSize 12, 12 ' mm
        End With
        
        ' Checkpoint: grava linha processada
        xlWb.Sheets("Controle").Range("B1").Value = i + 1
        xlWb.Save
        
        logFile = FreeFile
        Open LOG_PATH For Append As #logFile
        Print #logFile, "OK linha " & i & " - " & xlWs.Cells(i, 1).Value
        Close #logFile
        
Proximo:
    Next i
    
    ' Imprime todas as páginas exceto a mestre (página 1)
    If cdrDoc.Pages.Count > 1 Then
        cdrDoc.PrintOut Range:=cdrPrintRangePages, FromPage:=2, ToPage:=cdrDoc.Pages.Count
    End If
    
    Application.ScreenUpdating = True
    Application.Optimization = False
    xlWb.Close SaveChanges:=True
    xlApp.Quit
    
    logFile = FreeFile
    Open LOG_PATH For Append As #logFile
    Print #logFile, "Fim: " & Now & " - Total: " & (cdrDoc.Pages.Count - 1) & " etiquetas"
    Close #logFile
    
    MsgBox "Etiquetas geradas e enviadas para impressão: " & (cdrDoc.Pages.Count - 1), vbInformation
End Sub

Pontos críticos do código:

  1. Application.Optimization = True e ScreenUpdating = False desligam redraw — ganho de 10x em lotes grandes.
  2. Checkpoint na aba “Controle” permite retomar exatamente onde parou após travamento de impressora.
  3. Log em arquivo texto cria trilha de auditoria para conferência posterior.
  4. QR Code gerado via ZXing (instale via Chocolatey: choco install zxing) evita dependência de DLLs registradas.

Tratamento de erros robusto e retomada automática

Produção real exige resiliência. Envolva o loop principal em estrutura de erro:

On Error GoTo ErroLinha
    ' ... código do loop ...
Proximo:
    Resume Next
ErroLinha:
    logFile = FreeFile
    Open LOG_PATH For Append As #logFile
    Print #logFile, "ERRO linha " & i & ": " & Err.Description
    Close #logFile
    Resume Proximo

Se a impressora travar na página 147, o log mostra “ERRO linha 147: Print spooler error”. Ao reexecutar a macro, ela lê checkpoint = 148 da aba Controle e continua dali. Nenhuma etiqueta duplicada, nenhuma perdida.

Teste o cenário de falha: pause a impressora propositalmente no meio do lote, cancele a macro, solte a impressora e rode novamente. Confira o log e a contagem final.

Integração com fluxo da clínica: do agendamento à etiqueta

A automação não vive isolada. O time de frente de caixa usa sistema de agendamento que exporta CSV diário. Um script PowerShell (agendado no Windows Task Scheduler às 6h) transforma esse CSV no dados_etiquetas.xlsx com as validações e concatenação do QRData. Às 7h, o operador abre o CorelDRAW, clica no botão “Gerar Etiquetas Dia” (adicionado via Tools > Customization > Commands > Macros) e retira as etiquetas da impressora térmica já cortadas.

Para clínicas que oferecem também depilação a laser em Vila Olímpia, o mesmo template serve ajustando apenas a lista de áreas na validação da planilha. A macro lê a coluna Area e não precisa de alteração no código.

Se a equipe trabalha em MacBook com CorelDRAW via Parallels, veja como configurar o ambiente Windows virtualizado para macros e rotinas de manutenção que evitam paradas.

Boas práticas de desempenho e manutenção

  • Desative eventos: Application.EventsEnabled = False no início, True no fim.
  • Use With/End With em cascata para acessar camadas e shapes — evita resolução repetida de objetos.
  • Evite Select e Activate — trabalhe direto com referências (Set shp = ...).
  • Libere objetos: Set xlApp = Nothing, Set cdrDoc = Nothing ao final.
  • Versione o .gms: exporte o módulo (File > Export > Macro Library) como EtiquetasDepilacao_v1.2.gms com data no nome.
  • Documente no header do módulo: autor, data, versão, dependências (ZXing, Excel 16.0 Object Library).

Para aprofundar em performance, leia boas práticas de desempenho em macros para produção.

Conclusão prática

Com template padronizado, planilha validada e macro com checkpoint, a clínica eliminou retrabalho, ganhou rastreabilidade e liberou a equipe para atendimento. O mesmo padrão se aplica a etiquetas de produtos, fichas de anamnese, protocolos visuais ou qualquer série gráfica que exija precisão e repetibilidade. Instale o .gms, treine um operador-chave e meça o tempo ganho na primeira semana — o ROI aparece no primeiro lote.

Para expandir a automação para outros materiais da clínica, veja como criar macros do zero e como publicar suas macros no gerenciador de extensões.

Checklist prático

0 de 8 concluídos

Perguntas frequentes

Preciso saber programar para criar macros no CorelDRAW?

Não é obrigatório ser programador. O CorelDRAW possui gravador de macros que captura ações manuais e gera código VBA inicial. Com conhecimentos básicos de lógica e variáveis, você adapta o código gravado para loops, leitura de planilhas e impressão em lote.

Como vincular dados de clientes do Excel às etiquetas no CorelDRAW?

Use o objeto Excel.Application no VBA para abrir a planilha, ler linhas com nome, área, potência, sessão e data, e preencher campos de texto (Text.Story) nas formas do template. Cada iteração cria uma página ou duplica o grupo de objetos, mantendo posicionamento exato.

Qual a melhor forma de garantir alinhamento milimétrico na impressão?

Defina unidades do documento em milímetros, use guidelines e snap-to-guides no template, e posicione objetos via propriedades X/Y no código. Evite arrastar com mouse; calcule posições a partir de margens fixas e use ActiveLayer.CreateGuideline para referências temporárias se necessário.

Posso gerar código de barras ou QR Code nas etiquetas via VBA?

Sim. Integre bibliotecas gratuitas como ZXing via linha de comando ou use fontes de código de barras (Code 128) instaladas no Windows. No VBA, gere a string codificada, aplique a fonte ao texto e ajuste tamanho. Para QR Code, chame API local ou DLL que retorne bitmap e importe com ActiveLayer.ImportBitmap.

Como evitar erros quando a impressora trava no meio do lote?

Implemente checkpoint: grave em log (arquivo de texto ou planilha) o índice da última etiqueta impressa com sucesso. No início da macro, leia o log e retome a partir do próximo registro. Use Application.PrintOut com Range para reimprimir apenas páginas faltantes.

A macro funciona no CorelDRAW rodando no Mac via Parallels?

Sim, desde que o Windows virtualizado tenha acesso à impressora e ao Excel. O VBA roda nativamente no host Windows. Ajuste caminhos de arquivo (use variáveis de ambiente %USERPROFILE%) e teste drivers de impressora no modo bridged para evitar problemas de spool.