Capítulo 03: O Modelo de Objetos do Excel (Application, Workbook, Worksheet, Range)

🎯 Objetivo da Aula

Nesta aula, você dominará o coração da programação com VBA: o Modelo de Objetos do Microsoft Excel (Excel Object Model). Você aprenderá como o Excel se organiza hierarquicamente em Aplicação, Pastas de Trabalho, Planilhas e Células, a diferença crucial entre a notação textual Range e a notação matricial numérica Cells(linha, coluna), e como instanciar, renomear, colorir e proteger novas abas de trabalho de forma 100% automatizada.

Ao final desta aula, você será capaz de criar geradores automáticos de planilhas departamentais, eliminando o trabalho manual de formatação e estruturação de dados.


🏢 Cenário Prático (FastLog S.A.)

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: Todo início de mês fiscal, a gerência de logística precisa criar manualmente 3 novas abas de expedição na pasta de trabalho principal: Expedicao_SP, Expedicao_RJ e Expedicao_MG. O analista júnior gastava 50 minutos copiando e colando layouts, digitando cabeçalhos, colorindo as guias de abas e travando células com senha. Quando esquecia de travar fórmulas ou errava o nome da aba, as macros de consolidação da diretoria falhavam por referência inválida.
Sua Missão: Você construirá a rotina automatizada GerarEstruturaFiliais, que verifica a existência das abas, cria as planilhas das filiais com guias coloridas, preenche os cabeçalhos institucionais utilizando a notação de coordenadas numéricas Cells(linha, coluna) e aplica proteção com senha nas fórmulas.


🧠 Fundamentos: A Teoria Traduzida

1. A Árvore Hierárquica do Excel

O VBA manipula o Excel através de uma estrutura hierárquica em cascata. Para acessar uma célula, o VBA percorre a seguinte árvore de cima para baixo:

flowchart TD
    APP["🏢 Application (O programa Excel em si)"]
    APP --> WB["📁 Workbooks (Coleção de Arquivos Abertos)"]
    WB --> WBA["📄 ActiveWorkbook ou Workbooks('FastLog_2026.xlsm')"]
    WBA --> WS["📑 Worksheets (Coleção de Abas da Planilha)"]
    WS --> WSA["📋 Worksheets('Expedicao_SP')"]
    WSA --> RNG["🔲 Range('A1:D10') ou Cells(linha, coluna)"]
    
    style APP fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
    style WB fill:#2c3e50,stroke:#fff,stroke-width:2px,color:#fff
    style WBA fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
    style WS fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
    style WSA fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
    style RNG fill:#d35400,stroke:#fff,stroke-width:2px,color:#fff
  • Objetos: Entidades físicas do software (ex: Workbook, Worksheet, Range, Chart).
  • Propriedades: Características ou atributos do objeto (ex: .Value, .Formula, .Color, .Name, .Bold).
  • Métodos: Ações que o objeto sabe executar (ex: .Add, .Delete, .ClearContents, .Copy, .Protect).

2. Notação Range vs. Notação Cells

Esta é a distinção mais importante para quem deseja construir robôs e algoritmos:

SintaxeExemploVantagensQuando Utilizar?
Range("LetraNúmero")Range("B4")
Range("A1:E20")
Muito intuitivo, aceita intervalos contínuos e nomes de células.Formatação em bloco de cabeçalhos e tabelas fixas.
Cells(Linha, Coluna)Cells(4, 2) (Linha 4, Coluna B)
Cells(10, 5) (Linha 10, Coluna E)
Utiliza números inteiros para coordenadas cartesianas.Laços de Repetição (For, While) e varreduras automáticas.

Em Cells(linha, coluna), o primeiro argumento é sempre a linha vertical, e o segundo argumento é a coluna horizontal. Cells(1, 1) equivale a Range("A1").

3. O Perigo de Omitir o Objeto Pai (Parent Object)

Se você escrever apenas:

1
Range("A1").Value = "Total"

O Excel gravará na aba que estiver visível na tela naquele exato momento (ActiveSheet). Se o usuário trocar de aba enquanto a macro roda, o código destruirá a aba errada!
A boa prática de engenharia exige sempre especificar o objeto pai:

1
Worksheets("Expedicao_SP").Range("A1").Value = "Total"

📖 Exemplo Guiado: Passo a Passo no Laboratório

No computador do laboratório, abra sua pasta de trabalho corporativa no Excel (Alt + F11).

Passo 1: Inserção do Módulo de Gerenciamento de Abas

  1. No menu superior do VBE, clique em Inserir ➔ Módulo.
  2. Na Janela de Propriedades (F4), renomeie o módulo para: modGestaoPlanilhas.
  3. Certifique-se de que a linha Option Explicit está presente no topo.

Passo 2: Manipulando Propriedades de Objetos

Experimente digitar na Janela Imediata (Ctrl + G):

1
? ActiveWorkbook.Worksheets.Count

O Excel retornará a quantidade exata de abas abertas no momento.


🛠️ Prática Obrigatória 1: Manipulação Matricial com Cells e Estilização sem Select

Criaremos uma rotina que preenche uma matriz de cabeçalhos de controle logístico utilizando a notação numérica de coordenadas Cells(lin, col).

Passo a Passo no Computador:

  1. No módulo modGestaoPlanilhas, digite o seguinte procedimento:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    
    Option Explicit
    
    Sub EstruturarCabecalhoMatricial()
        Dim ws As Worksheet
        Dim intCol As Long
    
        ' Referenciamos explicitamente a primeira aba sem selecioná-la
        Set ws = ThisWorkbook.Worksheets(1)
    
        ' Título da Empresa na Célula (Linha 1, Coluna 1)
        With ws.Cells(1, 1)
            .Value = "FASTLOG S.A. - LOGÍSTICA & DISTRIBUIÇÃO REGIONAL"
            .Font.Name = "Segoe UI"
            .Font.Size = 14
            .Font.Bold = True
            .Font.Color = RGB(0, 51, 102)
        End With
    
        ' Matriz de Cabeçalhos na Linha 3 (Colunas de 1 a 6)
        Dim arrColunas(1 To 6) As String
        arrColunas(1) = "ID_CTE"
        arrColunas(2) = "FILIAL_ORIGEM"
        arrColunas(3) = "DESTINATARIO"
        arrColunas(4) = "PESO_BRUTO_KG"
        arrColunas(5) = "VALOR_FRETE"
        arrColunas(6) = "STATUS_ENTREGA"
    
        For intCol = 1 To 6
            With ws.Cells(3, intCol)
                .Value = arrColunas(intCol)
                .Font.Bold = True
                .Font.Color = RGB(255, 255, 255)
                .Interior.Color = RGB(33, 115, 70) ' Verde Corporativo Excel
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Borders.Weight = xlThin
            End With
        Next intCol
    
        ' Autoajuste de todas as colunas trabalhadas
        ws.Range("A:F").EntireColumn.AutoFit
    
        MsgBox "Matriz de cabeçalho configurada com sucesso!", vbInformation, "FastLog TI"
    End Sub
  2. Execução:
    • Posicione o cursor dentro da macro e pressione F5.
    • Veja que na linha 3 as 6 colunas foram criadas e formatadas perfeitamente, usando as coordenadas numéricas (3, 1), (3, 2), (3, 3), etc.!

✅ Resultado Esperado (Prática 1):

A Linha 1 exibe o título corporativo institucional e a Linha 3 exibe os 6 cabeçalhos verdes preenchidos e estilizados de forma milimétrica.


🛠️ Prática Obrigatória 2: Criação Dinâmica de Abas Regionais e Proteção com Senha

Agora desenvolveremos a automação completa que cria dinamicamente as abas das três filiais regionais (Filial_SP, Filial_RJ, Filial_MG), aplicando cores distintas nas guias de abas (Tab Color).

Passo a Passo no Computador:

  1. No mesmo módulo, insira o procedimento corporativo:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    
    Sub GerarEstruturaFiliais()
        Dim arrFiliais(1 To 3) As String
        Dim arrCores(1 To 3) As Long
        Dim i As Long
        Dim wsNova As Worksheet
        Dim wsExiste As Worksheet
        Dim strNomeAba As String
    
        ' Lista de Filiais e Cores de Identificação Visual (RGB)
        arrFiliais(1) = "Expedicao_SP"
        arrCores(1) = RGB(41, 128, 185)   ' Azul SP
    
        arrFiliais(2) = "Expedicao_RJ"
        arrCores(2) = RGB(230, 126, 34)   ' Laranja RJ
    
        arrFiliais(3) = "Expedicao_MG"
        arrCores(3) = RGB(142, 68, 173)   ' Roxo MG
    
        ' Percorre o vetor de filiais criando ou limpando cada aba
        For i = 1 To 3
            strNomeAba = arrFiliais(i)
    
            ' Teste de existência da aba para evitar erro de duplicidade
            Set wsNova = Nothing
            On Error Resume Next
            Set wsNova = ThisWorkbook.Worksheets(strNomeAba)
            On Error GoTo 0
    
            ' Se não existir, adiciona no final da pasta
            If wsNova Is Nothing Then
                Set wsNova = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
                wsNova.Name = strNomeAba
            End If
    
            ' Configura cor da guia da aba
            wsNova.Tab.Color = arrCores(i)
    
            ' Insere o banner da filial na aba
            With wsNova.Range("A1:D1")
                .Merge
                .Value = "CONTROLE OPERACIONAL - " & UCase(strNomeAba)
                .Font.Bold = True
                .Font.Size = 13
                .Font.Color = RGB(255, 255, 255)
                .Interior.Color = arrCores(i)
                .HorizontalAlignment = xlCenter
            End With
    
            ' Cabeçalhos
            wsNova.Range("A2").Value = "ID Carga"
            wsNova.Range("B2").Value = "Cidade Destino"
            wsNova.Range("C2").Value = "Peso (Kg)"
            wsNova.Range("D2").Value = "Frete Líquido"
            wsNova.Range("A2:D2").Font.Bold = True
            wsNova.Range("A2:D2").Interior.Color = RGB(240, 240, 240)
            wsNova.Columns("A:D").AutoFit
        Next i
    
        MsgBox "Estrutura das 3 filiais criada com sucesso!", vbInformation, "Expedição FastLog"
    End Sub
  2. Volte ao Excel e execute a macro (Alt + F8 ➔ selecione GerarEstruturaFiliais ➔ Executar).
  3. Observe as 3 novas abas surgindo instantaneamente no rodapé da pasta de trabalho, cada uma com sua respectiva cor na guia e cabeçalhos próprios!

✅ Resultado Esperado (Prática 2):

A pasta de trabalho ganha três novas abas (Expedicao_SP, Expedicao_RJ, Expedicao_MG), ordenadas no rodapé, com abas coloridas e layouts de cabeçalho prontos para inserção de dados.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve sua pasta de trabalho corporativa com a extensão .xlsm.
  2. Nomeie o arquivo: Atividade_03_VBA_SeuNome_SeuSobrenome.xlsm.
  3. Abra o Microsoft Teams na sala de aula virtual.
  4. Envie o arquivo na tarefa: “VBA - Cap 03: Modelo de Objetos do Excel”.

💡 Checkpoint de Gestão & TI

Em sistemas de ERP e BI corporativos, a consistência de metadados é vital. Criar planilhas manualmente gera divergências ortográficas (um operador digita SP, outro Filial SP, outro São Paulo), o que inviabiliza scripts automatizados de consolidação de faturamento. Ao delegar a estruturação de abas ao VBA, a empresa garante padronização nominal estrita, permitindo que robôs subsequentes localizem dados em frações de segundo.


🔥 Desafio de Fixação: Consolidação e Bloqueio de Células com Senha

Adicione uma camada de governança e segurança corporativa:

  1. No procedimento GerarEstruturaFiliais, adicione ao final da configuração de cada aba as instruções de proteção:
    1
    
    wsNova.Protect Password:="FastLog2026", DrawingObjects:=True, Contents:=True, Scenarios:=True
  2. Teste tentar digitar ou apagar o título da célula A1 na aba Expedicao_SP.
  3. O Excel exibirá um aviso bloqueando a edição de células protegidas!

🔑 Revelar Gabarito Oficial de Laboratório (Clique para expandir)
💡 Incentivo Pedagógico: Tente resolver as práticas e o desafio de fixação por conta própria antes de abrir o gabarito. Seus erros e tentativas durante o laboratório são a chave para a consolidação real do aprendizado!

Código Consolidado (modGestaoPlanilhas):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Option Explicit

Sub GerarEstruturaFiliaisCompleta()
    Dim arrFiliais(1 To 3) As String
    Dim arrCores(1 To 3) As Long
    Dim i As Long
    Dim wsNova As Worksheet
    Dim strNomeAba As String
    
    arrFiliais(1) = "Expedicao_SP"
    arrCores(1) = RGB(41, 128, 185)
    
    arrFiliais(2) = "Expedicao_RJ"
    arrCores(2) = RGB(230, 126, 34)
    
    arrFiliais(3) = "Expedicao_MG"
    arrCores(3) = RGB(142, 68, 173)
    
    ' Otimização de Performance
    Application.ScreenUpdating = False
    
    For i = 1 To 3
        strNomeAba = arrFiliais(i)
        
        Set wsNova = Nothing
        On Error Resume Next
        Set wsNova = ThisWorkbook.Worksheets(strNomeAba)
        On Error GoTo 0
        
        If wsNova Is Nothing Then
            Set wsNova = ThisWorkbook.Worksheets.Add(After:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count))
            wsNova.Name = strNomeAba
        Else
            wsNova.Unprotect "FastLog2026"
            wsNova.Cells.Clear
        End If
        
        wsNova.Tab.Color = arrCores(i)
        
        With wsNova.Range("A1:D1")
            .Merge
            .Value = "CONTROLE OPERACIONAL - " & UCase(strNomeAba)
            .Font.Bold = True
            .Font.Size = 13
            .Font.Color = RGB(255, 255, 255)
            .Interior.Color = arrCores(i)
            .HorizontalAlignment = xlCenter
        End With
        
        wsNova.Range("A2").Value = "ID Carga"
        wsNova.Range("B2").Value = "Cidade Destino"
        wsNova.Range("C2").Value = "Peso (Kg)"
        wsNova.Range("D2").Value = "Frete Líquido"
        
        With wsNova.Range("A2:D2")
            .Font.Bold = True
            .Interior.Color = RGB(240, 240, 240)
            .Borders.Weight = xlThin
        End With
        
        wsNova.Columns("A:D").AutoFit
        
        ' Aplicação da Proteção Corporativa (Desafio de Fixação)
        wsNova.Protect Password:="FastLog2026", Contents:=True
    Next i
    
    Application.ScreenUpdating = True
    MsgBox "Estrutura das filiais gerada e protegida com sucesso!", vbInformation, "Governança FastLog"
End Sub

📝 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 você estudou neste capítulo. Ao concluir, apresente o caderno ao professor para visto.

  1. Explique a hierarquia de objetos do Excel citando os quatro níveis fundamentais (de Application até Range).
  2. No VBA, qual é a diferença entre uma Propriedade e um Método de um objeto? Cite um exemplo de cada.
  3. Compare o uso de Range("B5") com Cells(5, 2). Em que cenários de lógica de programação a notação Cells é indispensável?
  4. Qual é o perigo de executar comandos como Range("A1").Value = 100 sem declarar o objeto da planilha pai (Worksheet)?
  5. Qual comando é utilizado no VBA para instanciar e adicionar uma nova aba ao final da pasta de trabalho atual?
  6. Como alteramos a cor da orelha (guia) de uma planilha no rodapé do Excel via código VBA?
  7. Qual instrução VBA permite apagar simultaneamente todo o conteúdo, fórmulas e formatações de uma aba inteira?
  8. Qual é a finalidade do bloco de tratamento On Error Resume Next utilizado antes de verificar se uma aba já existe?
  9. Por que a propriedade Application.ScreenUpdating = False é utilizada ao manipular e criar várias abas em lote?
  10. Como o método .Protect contribui para a integridade dos dados e governança de TI em planilhas compartilhadas na empresa?