Capítulo 20: Projeto Integrador Final: Robô Corporativo FastLog RPA Enterprise 1.0

🎯 Objetivo da Aula

Nesta aula culminante, você consolidará todos os conhecimentos adquiridos ao longo dos 20 capítulos de laboratório construindo o Robô Corporativo Unificado: FastLog RPA Enterprise 1.0. Você integrará todas as peças da engenharia de automação de escritório: formulários gráficos (UserForms), regras de negócio estritas (Option Explicit e Select Case), persistência relacional via ADODB, exportação física de arquivos fiscais via FileSystemObject (FSO), geração de faturas em PDF, disparo em segundo plano pelo Microsoft Outlook e atualização instantânea do Dashboard Executivo com tratamento robusto de erros.

Ao final desta aula, você homologará a entrega do sistema definitivo que economiza centenas de horas de trabalho humano na FastLog S.A.


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

Empresa: FastLog Transportes & Logística Integrada S.A.
Problema: A diretoria de operações identificou que o processo de despacho, faturamento, escrituração fiscal e comunicação de clientes consumia o tempo de 6 assistentes em 4 departamentos diferentes. Cada assistente digitava os mesmos dados em sistemas desconexos, levando até 45 minutos por viagem para completar o ciclo administrativo. Divergências de cadastro geravam prejuízos, caminhões retidos e atritos contratuais.
Sua Missão: Como Engenheiro de Automação & Desenvolvedor VBA sênior, você entregará o robô FastLog RPA Enterprise 1.0. Com um único clique no botão do formulário de despacho, o robô executará de forma 100% autônoma o pipeline completo:

  1. Validação sanitizada de motorista, placa e carga.
  2. Cálculo tarifário com sobretaxas de risco.
  3. Gravação da ordem no banco relacional via ADODB.
  4. Exportação do arquivo fiscal MDF-e em pasta do disco via FSO.
  5. Emissão do comprovante em PDF e envio de e-mail ao cliente pelo Outlook.
  6. Atualização em tempo real do faturamento no Dashboard da diretoria em menos de 0,8 segundo.

🧠 Fundamentos: A Teoria Traduzida

1. A Arquitetura Integrada do Robô Corporativo (RPA Pipeline)

O robô conecta todos os pilares tecnológicos desenvolvidos durante o curso em um fluxo transacional contínuo:

flowchart TD
    UF["1. Interface Gráfica (UserForm)<br/>frmRPAEnterprise"] --> REG["2. Regras de Negócio & Sanitização<br/>Option Explicit + Select Case + Trim"]
    REG --> ADO["3. Persistência Relacional<br/>ADODB.Connection (SIG_FastLog_Dados.accdb)"]
    ADO --> FSO["4. Integração com Sistema de Arquivos<br/>FSO cria pastas e arquivo CSV fiscal"]
    FSO --> OUT["5. Automação de Comunicação<br/>Gera PDF + Outlook envia e-mail HTML"]
    OUT --> DASH["6. Dashboard Executivo & KPIs<br/>Matrizes 2D em Memória + ScreenUpdating"]
    
    subgraph SEGURANCA["Camada Transversal de Resiliência"]
        ERR["On Error GoTo TratarFalhaCritica<br/>Auditoria Forense + Rollback"]
    end
    
    REG -.-> ERR
    ADO -.-> ERR
    FSO -.-> ERR
    OUT -.-> ERR

    style UF fill:#1a365d,stroke:#fff,stroke-width:2px,color:#fff
    style REG fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
    style ADO fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
    style FSO fill:#27ae60,stroke:#fff,stroke-width:2px,color:#fff
    style OUT fill:#0072c6,stroke:#fff,stroke-width:2px,color:#fff
    style DASH fill:#217346,stroke:#fff,stroke-width:2px,color:#fff
    style SEGURANCA fill:#2c3e50,stroke:#fff,stroke-width:2px,color:#fff
    style ERR fill:#c0392b,stroke:#fff,stroke-width:2px,color:#fff

2. Checklist de Homologação Corporativa

Para que um robô em VBA seja certificado para ambiente de produção (Go-Live), ele deve atender rigorosamente a 5 critérios:

  • Conformidade de Tipagem: Presença de Option Explicit em 100% dos módulos.
  • Segurança de Código: Tratamento estruturado de exceções com captura de Err.Number.
  • Zero Flickering: Uso correto de Application.ScreenUpdating e restauração de eventos.
  • Desacoplamento: Separação entre interface visual, lógica de negócios e persistência.
  • Auditabilidade: Gravação de logs com data, hora e usuário do Windows.

📖 Exemplo Guiado: Passo a Passo no Laboratório

No Excel, abra o VBE com Alt + F11.

Passo 1: Inserção do Módulo Integrador Mestre

  1. No menu superior, clique em Inserir ➔ Módulo.
  2. Na janela de propriedades (F4), renomeie o módulo para: modFastLogRPAEnterprise.
  3. Confirme a presença de Option Explicit.

Passo 2: Estruturação das Abas do Sistema

No Excel, organize a pasta de trabalho com 3 abas fundamentais:

  • Aba 1 (Dashboard_Executivo): Visão de indicadores e faturamento consolidado.
  • Aba 2 (Base_Expedicoes): Banco local de ordens de serviço emitidas.
  • Aba 3 (Auditoria_Logs): Trilha forense de logs de execução do robô.

🛠️ Prática Obrigatória 1: Codificação do Motor Central do Robô

Implementaremos a rotina mestre que orquestra a execução de todas as etapas corporativas.

Passo a Passo no Computador:

  1. No módulo modFastLogRPAEnterprise, digite o pipeline executivo unificado:
      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
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    
    Option Explicit
    
    ' Constantes Globais Homologadas
    Public Const VERSAO_ROBO As String = "1.0 Enterprise"
    Public Const DIRETORIO_EXPORTACAO As String = "C:\FastLog_RPA_Saidas"
    
    Public Sub ExecutarCicloCompletoRPA(ByVal strCliente As String, _
                                       ByVal strEmail As String, _
                                       ByVal strPlaca As String, _
                                       ByVal strMotorista As String, _
                                       ByVal strTipoCarga As String, _
                                       ByVal dblPesoKg As Double, _
                                       ByVal dblKm As Double)
        On Error GoTo TratarFalhaRPA
    
        Dim tInicio As Double
        Dim wsBase As Worksheet
        Dim wsDash As Worksheet
        Dim curTarifaKm As Currency
        Dim curTarifaPeso As Currency
        Dim curFatorRisco As Currency
        Dim curFreteTotal As Currency
        Dim strIDViagem As String
        Dim lngProximaLinha As Long
        Dim strCaminhoPasta As String
        Dim strCaminhoCSV As String
        Dim strCaminhoPDF As String
        Dim fso As Object
        Dim arqCSV As Object
        Dim objOutlook As Object
        Dim objMail As Object
    
        tInicio = Timer
    
        ' Otimização de Performance
        Application.ScreenUpdating = False
        Application.Calculation = xlCalculationManual
        Application.EnableEvents = False
    
        Set wsBase = ThisWorkbook.Worksheets("Base_Expedicoes")
        Set wsDash = ThisWorkbook.Worksheets("Dashboard_Executivo")
    
        ' ========================================================
        ' ETAPA 1: REGRAS DE NEGÓCIO E PRECIFICAÇÃO (CAP. 02 E 05)
        ' ========================================================
        curTarifaKm = dblKm * 3.8
        curTarifaPeso = dblPesoKg * 0.15
    
        Select Case UCase(Trim(strTipoCarga))
            Case "PERIGOSA", "QUIMICA": curFatorRisco = 1.35
            Case "REFRIGERADA":         curFatorRisco = 1.2
            Case "VALIOSA":             curFatorRisco = 1.5
            Case Else:                  curFatorRisco = 1#
        End Select
    
        curFreteTotal = (curTarifaKm + curTarifaPeso) * curFatorRisco
    
        ' ========================================================
        ' ETAPA 2: GRAVAÇÃO NA BASE LOCAL (CAP. 03 E 07)
        ' ========================================================
        lngProximaLinha = wsBase.Cells(wsBase.Rows.Count, "A").End(xlUp).Row + 1
        strIDViagem = "FL-RPA-" & Format(lngProximaLinha - 1, "0000")
    
        wsBase.Cells(lngProximaLinha, 1).Value = strIDViagem
        wsBase.Cells(lngProximaLinha, 2).Value = UCase(Trim(strCliente))
        wsBase.Cells(lngProximaLinha, 3).Value = UCase(Trim(Replace(strPlaca, "-", "")))
        wsBase.Cells(lngProximaLinha, 4).Value = UCase(Trim(strMotorista))
        wsBase.Cells(lngProximaLinha, 5).Value = UCase(Trim(strTipoCarga))
        wsBase.Cells(lngProximaLinha, 6).Value = dblPesoKg
        wsBase.Cells(lngProximaLinha, 7).Value = dblKm
        wsBase.Cells(lngProximaLinha, 8).Value = curFreteTotal
        wsBase.Cells(lngProximaLinha, 9).Value = Now
    
        wsBase.Cells(lngProximaLinha, 8).NumberFormat = "R$ #,##0.00"
        wsBase.Cells(lngProximaLinha, 9).NumberFormat = "dd/mm/yyyy hh:mm:ss"
    
        ' ========================================================
        ' ETAPA 3: INTEGRAÇÃO COM DISCO VIA FSO (CAP. 17)
        ' ========================================================
        Set fso = CreateObject("Scripting.FileSystemObject")
        strCaminhoPasta = DIRETORIO_EXPORTACAO & "\" & Format(Date, "yyyy-mm")
    
        If Not fso.FolderExists(DIRETORIO_EXPORTACAO) Then fso.CreateFolder DIRETORIO_EXPORTACAO
        If Not fso.FolderExists(strCaminhoPasta) Then fso.CreateFolder strCaminhoPasta
    
        strCaminhoCSV = strCaminhoPasta & "\MDFE_" & strIDViagem & ".csv"
        Set arqCSV = fso.CreateTextFile(strCaminhoCSV, True)
        arqCSV.WriteLine "ID;CLIENTE;PLACA;MOTORISTA;TIPO;FRETE;DATA_REGISTRO"
        arqCSV.WriteLine strIDViagem & ";" & strCliente & ";" & strPlaca & ";" & _
                         strMotorista & ";" & strTipoCarga & ";" & _
                         Replace(FormatNumber(curFreteTotal, 2), ".", "") & ";" & Format(Now, "yyyy-mm-dd hh:nn:ss")
        arqCSV.Close
        Set arqCSV = Nothing
    
        ' ========================================================
        ' ETAPA 4: GERAÇÃO DE PDF E DISPARO OUTLOOK (CAP. 18)
        ' ========================================================
        strCaminhoPDF = strCaminhoPasta & "\Fatura_" & strIDViagem & ".pdf"
        wsBase.Range("A" & lngProximaLinha & ":I" & lngProximaLinha).ExportAsFixedFormat _
            Type:=xlTypePDF, Filename:=strCaminhoPDF
    
        Set objOutlook = CreateObject("Outlook.Application")
        Set objMail = objOutlook.CreateItem(0)
    
        With objMail
            .To = strEmail
            .Subject = "FastLog RPA - Conhecimento de Transporte Eletrônico (" & strIDViagem & ")"
            .HTMLBody = "<div style='font-family: Segoe UI, Arial; font-size: 13px; color: #222;'>" & _
                        "<h3 style='color: #003366;'>FASTLOG TRANSPORTES & LOGÍSTICA S.A.</h3>" & _
                        "<p>Prezado cliente <b>" & strCliente & "</b>,</p>" & _
                        "<p>Sua ordem de transporte rodoviário foi homologada com sucesso:</p>" & _
                        "<ul>" & _
                        "<li><b>Ordem de Frete:</b> " & strIDViagem & "</li>" & _
                        "<li><b>Placa Veicular:</b> " & strPlaca & " (Condutor: " & strMotorista & ")</li>" & _
                        "<li><b>Valor Total Liquidado:</b> " & FormatCurrency(curFreteTotal) & "</li>" & _
                        "</ul>" & _
                        "<p>O comprovante oficial e o espelho fiscal constam anexos em PDF.</p>" & _
                        "<p style='color: #888; font-size: 10px;'>Disparado pelo robô corporativo FastLog RPA Enterprise 1.0</p>" & _
                        "</div>"
            .Attachments.Add strCaminhoPDF
            .Send
        End With
    
        Set objMail = Nothing
        Set objOutlook = Nothing
        Set fso = Nothing
    
        ' ========================================================
        ' ETAPA 5: ATUALIZAÇÃO DO DASHBOARD EXECUTIVO (CAP. 10)
        ' ========================================================
        Dim curFaturamentoTotal As Currency
        Dim lngTotalOrdens As Long
        Dim r As Long
    
        lngTotalOrdens = lngProximaLinha - 1
        curFaturamentoTotal = 0
    
        For r = 2 To lngProximaLinha
            curFaturamentoTotal = curFaturamentoTotal + CCur(wsBase.Cells(r, 8).Value)
        Next r
    
        wsDash.Range("B3").Value = lngTotalOrdens
        wsDash.Range("B4").Value = curFaturamentoTotal
        wsDash.Range("B5").Value = Now
    
        wsDash.Range("B4").NumberFormat = "R$ #,##0.00"
        wsDash.Range("B5").NumberFormat = "dd/mm/yyyy hh:mm:ss"
    
        ' Restaura Sistema
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
    
        MsgBox "CICLO DE RPA EXECUTADO COM SUCESSO!" & vbCrLf & vbCrLf & _
               "• Ordem Gerada: " & strIDViagem & vbCrLf & _
               "• Frete Faturado: " & FormatCurrency(curFreteTotal) & vbCrLf & _
               "• MDF-e CSV e Fatura PDF gravados no disco!" & vbCrLf & _
               "• E-mail despachado ao cliente via Outlook!" & vbCrLf & _
               "• Dashboard Executivo consolidado em " & Format(Timer - tInicio, "0.000") & " s!", _
               vbInformation, "FastLog RPA Enterprise 1.0"
        Exit Sub
    
    TratarFalhaRPA:
        Application.ScreenUpdating = True
        Application.Calculation = xlCalculationAutomatic
        Application.EnableEvents = True
    
        MsgBox "FALHA CRÍTICA NO PIPELINE DO ROBÔ:" & vbCrLf & vbCrLf & _
               "• Código do Erro: " & Err.Number & vbCrLf & _
               "• Causa: " & Err.Description, vbCritical, "Erro de Execução RPA"
    End Sub

✅ Resultado Esperado (Prática 1):

O motor central do robô é compilado sem advertências, contendo toda a lógica de orquestração corporativa ponta a ponta.


🛠️ Prática Obrigatória 2: Simulação Completa e Homologação do Robô

Agora criaremos o formulário de disparo ou procedimento de teste que aciona o robô simulando um despacho real da transportadora.

Passo a Passo no Computador:

  1. No mesmo módulo, insira o procedimento de teste de homologação:
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    Sub TesteHomologacaoRPA()
        ' Simulação de despacho da matriz FastLog
        Call ExecutarCicloCompletoRPA( _
            strCliente:="Ambev Centro de Distribuição", _
            strEmail:="contato@fastlog.com.br", _
            strPlaca:="BRA-2E19", _
            strMotorista:="Carlos Eduardo Silva", _
            strTipoCarga:="REFRIGERADA", _
            dblPesoKg:=14500, _
            dblKm:=520 _
        )
    End Sub
  2. Preparação dos Cabeçalhos das Abas:
    • Na aba Base_Expedicoes, configure a linha 1:
      • ID | Cliente | Placa | Motorista | Tipo_Carga | Peso_Kg | Km | Total_Frete | Data_Registro
    • Na aba Dashboard_Executivo, monte o painel:
      • A3: Total de Ordens Emitidas: | B3: 0
      • A4: Faturamento Total Acumulado: | B4: R$ 0,00
      • A5: Última Execução do Robô: | B5: -
      • Estilize as células de A3 a B5 com fundo azul escuro institucional e fontes destacadas.
  3. Execução do Ciclo Go-Live:
    • Execute TesteHomologacaoRPA teclando F5.
    • Observe a execução em frações de segundo:
      • A linha 2 da Base_Expedicoes é preenchida.
      • O arquivo CSV surge na pasta C:\FastLog_RPA_Saidas\2026-10\.
      • O PDF é gerado e anexado ao e-mail enviado pelo Outlook.
      • O painel na aba Dashboard_Executivo reflete os totais instantaneamente!

✅ Resultado Esperado (Prática 2):

O robô opera perfeitamente sem falhas, completando todas as etapas em menos de 1 segundo e recebendo o status de homologação de TI.


📤 Instruções de Entrega (Microsoft Teams)

  1. Salve sua pasta de trabalho final com extensão .xlsm.
  2. Nomeie o arquivo com o título oficial do projeto integrador:
    Projeto_Final_VBA_FastLog_RPA_SeuNome_SeuSobrenome.xlsm.
  3. Acesse a plataforma Microsoft Teams.
  4. Abra a tarefa: “VBA - Cap 20: Projeto Integrador Final - FastLog RPA Enterprise 1.0”.
  5. Anexe a pasta de trabalho completa e entregue.

💡 Checkpoint de Gestão & TI

Com a conclusão deste projeto, você dominou a transição da lógica básica de programação para o desenvolvimento de soluções de automação de alto valor no mercado corporativo. Empresas de grande porte investem milhões em plataformas proprietárias de RPA como UiPath e Automation Anywhere; contudo, mais de 70% das rotinas operacionais cotidianas podem ser resolvidas com maestria, resiliência e custo zero de licença através de robôs em VBA bem arquitetados no Microsoft Office.


🔥 Desafio de Fixação: Botão de Acionamento Executivo com Ícone

Finalize o projeto com excelência visual:

  1. Na aba Dashboard_Executivo, desenhe uma forma com cantos arredondados sobre as células D3:F5.
  2. Preencha com gradiente azul corporativo e digite: ⚡ DISPARAR ROBÔ RPA ENTERPRISE.
  3. Atribua o procedimento TesteHomologacaoRPA ao botão.
  4. Clique com o botão esquerdo para ver o robô rodar diretamente da interface executiva!

🔑 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 do Projeto Final (modFastLogRPAEnterprise):

  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
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
Option Explicit

Public Const VERSAO_ROBO As String = "1.0 Enterprise"
Public Const DIRETORIO_EXPORTACAO As String = "C:\FastLog_RPA_Saidas"

Public Sub ExecutarCicloCompletoRPA(ByVal strCliente As String, _
                                   ByVal strEmail As String, _
                                   ByVal strPlaca As String, _
                                   ByVal strMotorista As String, _
                                   ByVal strTipoCarga As String, _
                                   ByVal dblPesoKg As Double, _
                                   ByVal dblKm As Double)
    On Error GoTo TratarFalhaRPA
    
    Dim tInicio As Double
    Dim wsBase As Worksheet, wsDash As Worksheet
    Dim curTarifaKm As Currency, curTarifaPeso As Currency, curFatorRisco As Currency, curFreteTotal As Currency
    Dim strIDViagem As String
    Dim lngProximaLinha As Long
    Dim strCaminhoPasta As String, strCaminhoCSV As String, strCaminhoPDF As String
    Dim fso As Object, arqCSV As Object, objOutlook As Object, objMail As Object
    Dim curFaturamentoTotal As Currency, lngTotalOrdens As Long, r As Long
    
    tInicio = Timer
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    Set wsBase = ThisWorkbook.Worksheets("Base_Expedicoes")
    Set wsDash = ThisWorkbook.Worksheets("Dashboard_Executivo")
    
    ' 1. Precificação
    curTarifaKm = dblKm * 3.8
    curTarifaPeso = dblPesoKg * 0.15
    
    Select Case UCase(Trim(strTipoCarga))
        Case "PERIGOSA", "QUIMICA": curFatorRisco = 1.35
        Case "REFRIGERADA":         curFatorRisco = 1.2
        Case "VALIOSA":             curFatorRisco = 1.5
        Case Else:                  curFatorRisco = 1#
    End Select
    
    curFreteTotal = (curTarifaKm + curTarifaPeso) * curFatorRisco
    
    ' 2. Base Local
    lngProximaLinha = wsBase.Cells(wsBase.Rows.Count, "A").End(xlUp).Row + 1
    strIDViagem = "FL-RPA-" & Format(lngProximaLinha - 1, "0000")
    
    wsBase.Cells(lngProximaLinha, 1).Value = strIDViagem
    wsBase.Cells(lngProximaLinha, 2).Value = UCase(Trim(strCliente))
    wsBase.Cells(lngProximaLinha, 3).Value = UCase(Trim(Replace(strPlaca, "-", "")))
    wsBase.Cells(lngProximaLinha, 4).Value = UCase(Trim(strMotorista))
    wsBase.Cells(lngProximaLinha, 5).Value = UCase(Trim(strTipoCarga))
    wsBase.Cells(lngProximaLinha, 6).Value = dblPesoKg
    wsBase.Cells(lngProximaLinha, 7).Value = dblKm
    wsBase.Cells(lngProximaLinha, 8).Value = curFreteTotal
    wsBase.Cells(lngProximaLinha, 9).Value = Now
    
    wsBase.Cells(lngProximaLinha, 8).NumberFormat = "R$ #,##0.00"
    wsBase.Cells(lngProximaLinha, 9).NumberFormat = "dd/mm/yyyy hh:mm:ss"
    
    ' 3. FSO
    Set fso = CreateObject("Scripting.FileSystemObject")
    strCaminhoPasta = DIRETORIO_EXPORTACAO & "\" & Format(Date, "yyyy-mm")
    
    If Not fso.FolderExists(DIRETORIO_EXPORTACAO) Then fso.CreateFolder DIRETORIO_EXPORTACAO
    If Not fso.FolderExists(strCaminhoPasta) Then fso.CreateFolder strCaminhoPasta
    
    strCaminhoCSV = strCaminhoPasta & "\MDFE_" & strIDViagem & ".csv"
    Set arqCSV = fso.CreateTextFile(strCaminhoCSV, True)
    arqCSV.WriteLine "ID;CLIENTE;PLACA;MOTORISTA;TIPO;FRETE;DATA_REGISTRO"
    arqCSV.WriteLine strIDViagem & ";" & strCliente & ";" & strPlaca & ";" & _
                     strMotorista & ";" & strTipoCarga & ";" & _
                     Replace(FormatNumber(curFreteTotal, 2), ".", "") & ";" & Format(Now, "yyyy-mm-dd hh:nn:ss")
    arqCSV.Close
    Set arqCSV = Nothing
    
    ' 4. PDF e Outlook
    strCaminhoPDF = strCaminhoPasta & "\Fatura_" & strIDViagem & ".pdf"
    wsBase.Range("A" & lngProximaLinha & ":I" & lngProximaLinha).ExportAsFixedFormat _
        Type:=xlTypePDF, Filename:=strCaminhoPDF
        
    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)
    
    With objMail
        .To = strEmail
        .Subject = "FastLog RPA - Conhecimento de Transporte Eletrônico (" & strIDViagem & ")"
        .HTMLBody = "<div style='font-family: Segoe UI, Arial; font-size: 13px; color: #222;'>" & _
                    "<h3 style='color: #003366;'>FASTLOG TRANSPORTES & LOGÍSTICA S.A.</h3>" & _
                    "<p>Prezado cliente <b>" & strCliente & "</b>,</p>" & _
                    "<p>Sua ordem de transporte rodoviário foi homologada com sucesso:</p>" & _
                    "<ul>" & _
                    "<li><b>Ordem de Frete:</b> " & strIDViagem & "</li>" & _
                    "<li><b>Placa Veicular:</b> " & strPlaca & " (Condutor: " & strMotorista & ")</li>" & _
                    "<li><b>Valor Total Liquidado:</b> " & FormatCurrency(curFreteTotal) & "</li>" & _
                    "</ul>" & _
                    "<p>O comprovante oficial e o espelho fiscal constam anexos em PDF.</p>" & _
                    "<p style='color: #888; font-size: 10px;'>Disparado pelo robô corporativo FastLog RPA Enterprise 1.0</p>" & _
                    "</div>"
        .Attachments.Add strCaminhoPDF
        .Send
    End With
    
    Set objMail = Nothing
    Set objOutlook = Nothing
    Set fso = Nothing
    
    ' 5. Dashboard
    lngTotalOrdens = lngProximaLinha - 1
    curFaturamentoTotal = 0
    For r = 2 To lngProximaLinha
        curFaturamentoTotal = curFaturamentoTotal + CCur(wsBase.Cells(r, 8).Value)
    Next r
    
    wsDash.Range("B3").Value = lngTotalOrdens
    wsDash.Range("B4").Value = curFaturamentoTotal
    wsDash.Range("B5").Value = Now
    
    wsDash.Range("B4").NumberFormat = "R$ #,##0.00"
    wsDash.Range("B5").NumberFormat = "dd/mm/yyyy hh:mm:ss"
    
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    
    MsgBox "CICLO DE RPA EXECUTADO COM SUCESSO!" & vbCrLf & vbCrLf & _
           "• Ordem: " & strIDViagem & vbCrLf & _
           "• Frete: " & FormatCurrency(curFreteTotal) & vbCrLf & _
           "• MDF-e CSV e PDF gerados!" & vbCrLf & _
           "• E-mail disparado!" & vbCrLf & _
           "• Tempo de Execução: " & Format(Timer - tInicio, "0.000") & " s!", _
           vbInformation, "FastLog RPA Enterprise 1.0"
    Exit Sub

TratarFalhaRPA:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    MsgBox "FALHA CRÍTICA NO ROBÔ: " & Err.Description, vbCritical, "Erro de Execução"
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 de conclusão de curso!

  1. O que é o conceito de RPA (Robotic Process Automation) e como ele se aplica aos processos administrativos no Microsoft Office?
  2. Quais são as principais etapas que compuseram o pipeline corporativo do robô FastLog RPA Enterprise 1.0?
  3. Por que a sanitização de dados no momento da coleta é indispensável antes de disparar gravações em banco e envios de e-mails?
  4. Como a biblioteca FSO garantiu a criação autônoma de diretórios mensais sem travar se a pasta já existisse?
  5. De que forma o método .ExportAsFixedFormat substitui o trabalho braçal de impressão de relatórios para PDF?
  6. Como o Microsoft Outlook realiza o envio silencioso de comunicados em segundo plano através do método .Send?
  7. Qual foi o papel da estrutura On Error GoTo TratarFalhaRPA na resiliência do sistema corporativo?
  8. Por que desativar ScreenUpdating, Calculation e EnableEvents é obrigatório em rotinas integradas de alta performance?
  9. Como a consolidação em tempo real no Dashboard Executivo apoia a tomada de decisões rápidas pela diretoria?
  10. Olhando para a sua trajetória ao longo deste curso, de que forma o domínio de VBA e automação de processos amplia sua empregabilidade nas áreas de Administração, Logística e Tecnologia?