segunda-feira, 8 de setembro de 2025

🛰️ Automação em VBA: Mapa Inteligente de Dependências com Caminho Completo

🧐 O Problema

Quem nunca passou por isso?
Você tem várias planilhas interligadas na empresa:

  • 📂 Relatório de Vendas depende do arquivo de Estoque.

  • 📂 Planilha de Custos puxa dados do Financeiro na rede.

  • 📂 Dashboards consomem múltiplos arquivos espalhados em pastas.

E o pior: ninguém sabe exatamente de onde vêm os dados.
➡️ Um arquivo movido ou renomeado pode quebrar tudo sem aviso. 😬


💡 A Solução

Com VBA, criamos um Mapa Inteligente de Dependências, que:

✅ Percorre todas as planilhas e fórmulas.
✅ Detecta referências internas (dentro do próprio arquivo).
✅ Detecta referências externas (outros arquivos da rede).
✅ Identifica o caminho completo do arquivo externo mesmo que esteja na rede.
✅ Gera uma aba automática chamada "MapaDependencias" com todas as informações organizadas.

É como ter um raio-X das conexões do Excel 🛰️


🧑‍💻 O Código VBA

Sub MapearDependencias() Dim ws As Worksheet, cel As Range Dim wsMapa As Worksheet, linha As Long Dim formulaTxt As String, origem As String Dim links As Variant, i As Long ' Criar/limpar aba de dependências On Error Resume Next Set wsMapa = ThisWorkbook.Sheets("MapaDependencias") If wsMapa Is Nothing Then Set wsMapa = ThisWorkbook.Sheets.Add wsMapa.Name = "MapaDependencias" End If On Error GoTo 0 wsMapa.Cells.Clear wsMapa.Range("A1:E1").Value = Array("Planilha", "Célula", "Fórmula", "Tipo", "Origem Detalhada") linha = 2 ' Obter lista de vínculos externos On Error Resume Next links = ThisWorkbook.LinkSources(xlExcelLinks) On Error GoTo 0 ' Percorrer todas as planilhas For Each ws In ThisWorkbook.Sheets If ws.Name <> wsMapa.Name Then For Each cel In ws.UsedRange If cel.HasFormula Then formulaTxt = cel.Formula wsMapa.Cells(linha, 1).Value = ws.Name wsMapa.Cells(linha, 2).Value = cel.Address wsMapa.Cells(linha, 3).Value = formulaTxt ' Dependência externa ou interna If InStr(formulaTxt, "[") > 0 Then wsMapa.Cells(linha, 4).Value = "Arquivo Externo" ' Caso 1: já tem caminho completo If InStr(formulaTxt, "\\") > 0 Or InStr(formulaTxt, ":") > 0 Then origem = Mid(formulaTxt, InStr(formulaTxt, "'")) ' Caso 2: só nome do arquivo (arquivo aberto) Else origem = Mid(formulaTxt, InStr(formulaTxt, "[")) ' tentar localizar no LinkSources If Not IsEmpty(links) Then For i = LBound(links) To UBound(links) If InStr(links(i), Replace(Split(origem, "]")(0), "[", "")) > 0 Then origem = links(i) & "\" & origem Exit For End If Next i End If End If wsMapa.Cells(linha, 5).Value = origem Else wsMapa.Cells(linha, 4).Value = "Interno" If InStr(formulaTxt, "!") > 0 Then origem = Split(formulaTxt, "!")(0) wsMapa.Cells(linha, 5).Value = origem Else wsMapa.Cells(linha, 5).Value = "(Sem referência externa ou interna clara)" End If End If linha = linha + 1 End If Next cel End If Next ws MsgBox "Mapeamento concluído! Verifique a aba 'MapaDependencias'.", vbInformation End Sub

📊 Resultado

A aba "MapaDependencias" mostra:

  1. Planilha → onde está a fórmula.

  2. Célula → localização exata.

  3. Fórmula → conteúdo.

  4. Tipo → Interno ou Arquivo Externo.

  5. Origem Detalhada → caminho completo da rede (quando externo) ou aba de origem (quando interno).

Exemplo de saída:

PlanilhaCélulaFórmulaTipoOrigem Detalhada
RelatórioB2='\Servidor\Financeiro[Custos.xlsx]Plan1'!C5Arquivo Externo\Servidor\Financeiro[Custos.xlsx]Plan1'!C5
EstoqueD10=Vendas!B10InternoVendas

🚀 Onde isso é útil no dia a dia?

  • 🔍 Auditoria de planilhas complexas

  • 🛠️ Manutenção de dashboards corporativos

  • 🧾 Controle de arquivos na rede

  • ⚠️ Identificação de riscos ocultos (links quebrados)


🎯 Por que é útil ?

A maioria dos usuários não tem a menor noção de onde os dados estão vindo.
Esse código transforma o Excel em um detector automático de vínculos ocultos, mostrando caminhos completos de rede e evitando dores de cabeça.

Nenhum comentário:

Postar um comentário