Capítulo 20: Projeto Integrador Final - Arquitetura de Sistemas com Excel e VBA
🎯 Objetivo da Aula
Parabéns! Você chegou ao ápice da sua formação técnica em Lógica de Programação e Automação. Você percorreu uma jornada completa: desde a compreensão de células e variáveis até a escrita de laços matriciais em VBA.
O objetivo desta aula de encerramento não é introduzir comandos isolados, mas sim integrar todos os conceitos no formato de um Sistema de Gestão Logística Completo (FastLog TMS 1.0), aplicando princípios de arquitetura de software:
- O padrão de Arquitetura em Três Camadas (3-Tier Architecture) em planilhas.
- Variáveis de Objeto e a palavra-chave
Set, a base para manipular várias abas ao mesmo tempo. - Manipulação de Múltiplas Abas via VBA (Transferência de dados do Formulário para a Base).
- Geração automática de Chaves Primárias (IDs Auto-incremento).
- Tratamento de Exceções e Erros com
On Error GoTo. - Segurança e Proteção Programática de código e planilhas.
🏢 O Cenário Prático (Seu Desafio Final)
Situação: A diretoria da FastLog necessita de uma ferramenta centralizada para o Centro de Controle Operacional (CCO). Eles não querem mais que os operadores manipulem a tabela de dados brutos diretamente (risco de corromper fórmulas ou apagar registros).
Missão: Construir o sistema integrado FastLog TMS, composto por:
- Aba
Painel(Dashboard & Consulta): Busca inteligente por placa (PROCX), semáforo visual de entrega (Formatação Condicional) e resumo por filial (Tabela Dinâmica). - Aba
Formulario(Interface de Entrada): Validação de dados (Listas suspensas) e um botão VBA que transfere o novo frete para a base de dados, limpa os campos e gera o próximo ID automaticamente. - Aba
Banco_Dados(Persistência): Armazenamento seguro e protegido contra alterações manuais indevidas.
🧠 Fundamentos: Arquitetura de Sistemas em Excel/VBA
1. O Padrão Arquitetural em 3 Camadas (3-Tier Pattern)
No desenvolvimento de software corporativo (como sistemas ERP, bancários e e-commerces), a regra número um é a Separação de Responsabilidades (Separation of Concerns). Nunca misturamos a tela visual com a base de dados pura.
graph TD
subgraph Camada_Apresentacao ["1. Camada de Apresentação (Front-end / UI)"]
UI_Form["Aba 'Formulario'<br/>(Coleta com Validação)"]
UI_Dash["Aba 'Painel'<br/>(KPIs, Gráficos e PROCX)"]
end
subgraph Camada_Logica ["2. Camada de Lógica de Negócio (VBA Engine)"]
VBA_Val["Validação de Campos Obrigatórios"]
VBA_ID["Geração de Chave Primária (ID)"]
VBA_Err["Tratamento de Erros (On Error)"]
end
subgraph Camada_Dados ["3. Camada de Persistência (Back-end / Database)"]
DB_Table["Aba 'Banco_Dados'<br/>(Matriz Tabular Pura e Blindada)"]
end
UI_Form -->|1. Clica em 'Salvar'| VBA_Val
VBA_Val -->|2. Valida Dados| VBA_ID
VBA_ID -->|3. Append na Próxima Linha| DB_Table
DB_Table -->|4. Atualiza Consultas| UI_Dash
style Camada_Apresentacao fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style Camada_Logica fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style Camada_Dados fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. Variáveis de Objeto e a Palavra-Chave Set
Até agora (Cap. 18), só declaramos variáveis de tipos primitivos: Dim valorCarga As Double, Dim categoria As String. Esses tipos guardam um valor simples (um número, um texto).
Quando o projeto tem várias abas (Formulario, Banco_Dados, Painel), digitar Worksheets("Banco_Dados") inteiro em toda linha de código fica repetitivo e propenso a erro de digitação. A solução é guardar a própria referência à aba em uma variável — e para isso, declaramos um tipo de dado de objeto, como Worksheet:
Por que a palavra Set é obrigatória aqui, mas não em destino = Worksheets("Formulario").Range("B4").Value?Range("B4").Value devolve um valor simples (texto ou número) — por isso uma atribuição direta (=) funciona. Já Worksheets("Banco_Dados") é o objeto inteiro (a aba, com todas as suas células, formatações e propriedades) — não é possível “copiar” um objeto inteiro com um simples =. O VBA exige a palavra Set toda vez que você atribui um objeto (como Worksheet, Range ou Workbook) a uma variável. Esquecer o Set nesse caso gera o erro “Object required”.
3. Manipulação de Múltiplas Abas via VBA
Quando o código precisa transferir um valor digitado na aba Formulario para a aba Banco_Dados, referenciamos explicitamente o objeto pai — usando Set, como acabamos de aprender, para guardar cada aba em sua própria variável:
4. O Algoritmo de Inserção na Próxima Linha Vazia (Append Record)
Para adicionar um novo registro sem sobrescrever os existentes, calculamos a primeira linha disponível:
E para gerar a Chave Primária (ID) sequencial:
5. Tratamento Profissional de Exceções (On Error GoTo)
Em linguagens como Java, Python e C#, usamos blocos try / catch / finally. No VBA, a robustez é implementada com a instrução On Error GoTo:
📖 Exemplo Guiado: A Estrutura das Três Abas
Passo a Passo
- Crie uma nova Pasta de Trabalho e salve como:
FastLog_TMS_Final.xlsm. - Crie 3 abas e renomeie-as exatamente como:
Painel(Cor da guia: Azul)Formulario(Cor da guia: Verde)Banco_Dados(Cor da guia: Cinza)
- Na aba
Banco_Dados, monte o cabeçalho oficial na linha 1 (A1:E1):ID|Destino|Placa|Valor_Frete|Status
- Preencha 2 linhas iniciais para termos massa de dados:
- Linha 2:
1|Rio de Janeiro - RJ|ABC-1234|1850|Entregue - Linha 3:
2|Curitiba - PR|XYZ-9876|3200|Em Trânsito
- Linha 2:
🛠️ Prática Obrigatória 1: Construindo o Front-end de Consulta (Aba Painel)
Passo 1: O Painel de Rastreamento Rápido
Na aba Painel, configure a área de consulta do gestor (A2 até B5):
- A2:
=== RASTREAMENTO OPERACIONAL === - A4:
Selecione a Placa: - B4: (Aplique Validação de Dados > Lista > Fonte:
=Banco_Dados!$C$2:$C$10) - A5:
Status da Carga: - B5:
=PROCX(B4; Banco_Dados!C:C; Banco_Dados!E:E; "Placa Não Localizada")
Passo 2: O Sinalizador Visual (Semáforo)
- Selecione a célula B5.
- Vá em Formatação Condicional > Regras de Realce das Células > Texto que Contém….
- Se contiver
Entregue, formate com preenchimento Verde Claro. - Se contiver
Em Trânsito, formate com preenchimento Amarelo Claro.
🛠️ Prática Obrigatória 2: O Robô de Cadastro e Persistência em VBA
Passo 1: A Interface de Entrada (Aba Formulario)
Na aba Formulario, monte os campos de entrada nas células A3 até B6:
- A3:
Destino do Frete:| B3: (DigiteCampinas - SP) - A4:
Placa do Veículo (7 dígitos):| B4: (DigiteBRA-2E19) - A5:
Valor do Frete (R$):| B5: (Digite2150) - A6:
Status Inicial:| B6: (SelecioneEm Trânsitovia Lista Suspensa)
Passo 2: O Código do Motor de Persistência
Abra o VBE (Alt + F11), insira um Módulo e digite o script completo de transferência de dados:
Passo 3: Vinculando o Botão de Ação
Na aba Formulario, insira um botão verde estilizado 💾 GRAVAR NOVO FRETE na célula B8 e atribua a macro SalvarNovoFrete.
✅ Teste de Ponta a Ponta
- Preencha o formulário e clique em Gravar.
- Vá até a aba
Banco_Dadose veja a linha 4 preenchida automaticamente com o ID3. - Vá até a aba
Painel, selecione a placaBRA-2E19e veja o status ser recuperado instantaneamente!
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo no formato .XLSM (Habilitado para Macro).
- Nome:
PROJETO_FINAL_SeuNome_SeuSobrenome.xlsm - No Microsoft Teams, envie na tarefa “Capítulo 20 - Projeto Integrador Final”.
- Este projeto consolida todas as 20 aulas e compõe a avaliação prática do módulo de tecnologia.
💡 Checkpoint de Lógica: A Jornada do Aprendizado
Você construiu um Software Operacional Completo. Você não é mais alguém que apenas “sabe mexer em planilhas”; você compreende:
- Modelagem de Dados: Como estruturar tabelas relacionais.
- Algoritmos e Decisões: Como encadear testes com
SE,PROCXeIf/Else. - Programação Orientada a Objetos: Como navegar e alterar estados de instâncias (
Worksheets,Range,Cells). - Engenharia de Software: Como separar telas visuais, regras de negócio e armazenamento em camadas isoladas.
graph LR
A["Semana 1:<br/>O que é Célula?"] --> B["Semana 5:<br/>Funções SE e Lógica"]
B --> C["Semana 11:<br/>Buscas PROCX e Dados"]
C --> D["Semana 18:<br/>Código VBA e Memória"]
D --> E["Semana 20:<br/>Arquiteto de Soluções TMS!"]
style E fill:#f1c40f,stroke:#333,stroke-width:2px,color:#333🔥 Desafio de Fixação: Blindagem e Proteção com Senha
Adicione duas macros de segurança no seu projeto para travar a aba Banco_Dados, impedindo que curiosos alterem os registros diretamente.
O argumento nomeado UserInterfaceOnly:=True faz a proteção bloquear apenas a edição manual do usuário na tela — o seu código VBA (como o SalvarNovoFrete da Prática 2) continua conseguindo escrever na aba protegida normalmente. Sem esse argumento, até a sua própria macro seria bloqueada pela proteção.
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- O que é a Arquitetura em 3 Camadas (3-Tier Architecture) e quais são suas três camadas?
- Por que é uma boa prática separar a tela de entrada de dados (Formulário) do Banco de Dados bruto?
- Como o VBA calcula a próxima linha livre para inserir um novo registro (Append Record)?
- O que é uma Chave Primária (ID) e como ela pode ser gerada automaticamente em VBA?
- Qual a instrução VBA usada para tratamento de erros, equivalente ao Try/Catch de outras linguagens?
- Como referenciar uma célula de outra aba dentro do código VBA (ex: Worksheets(“Formulario”))?
- Por que a aba de Banco de Dados deve ser protegida contra edição manual direta pelos usuários?
- Descreva o fluxo completo de dados desde o preenchimento do Formulário até a atualização do Painel.
- Qual a função do PROCX na aba Painel do projeto FastLog TMS?
- Refletindo sobre todo o curso, qual foi o conceito de lógica de programação que você considerou mais importante para o seu trabalho em Administração/Logística? Justifique.