Articles

Usando o objeto Workbook no Excel VBA (Open, Close, Save, Set)

neste tutorial, eu vou cobrir a forma de trabalhar com os workbooks no Excel usando VBA.

no Excel, um’ Workbook ‘é um objeto que faz parte da coleção de’ Workbooks’. Dentro de um livro de trabalho, você tem diferentes objetos, tais como planilhas, folhas de gráficos, células e intervalos, objetos gráficos, formas, etc.

com VBA, você pode fazer um monte de coisas com um objeto de livro de trabalho – como abrir um livro de trabalho específico, salvar e fechar livros de trabalho, criar novos livros de trabalho, mudar as propriedades do livro de trabalho, etc.vamos começar.

todos os códigos que menciono neste tutorial precisam ser colocados no Editor Visual Basic. Vá para a seção ‘onde colocar o código VBA’ para saber como ele funciona.se você está interessado em aprender VBA da maneira mais fácil, confira meu treinamento de Vba Online do Excel.

Este Tutorial cobre:

referenciando um livro de trabalho usando VBA

Existem diferentes maneiras de se referir a um objeto de livro de trabalho em VBA. O método que você escolher dependeria do que você quer ser feito. Nesta seção, Eu vou cobrir as diferentes maneiras de se referir a um livro de trabalho junto com alguns códigos de exemplo.

usando nomes de livros de trabalho

Se você tem o nome exato do livro de trabalho a que você quer se referir, você pode usar o nome no código.vamos começar com um exemplo simples.

Se você tem dois livros de trabalho abertos, e você quer ativar o livro de trabalho com o nome – exemplos.xlsx, você pode usar o código abaixo:

Sub ActivateWorkbook()Workbooks("Examples.xlsx").ActivateEnd Sub

Note que você precisa usar o nome do arquivo junto com a extensão se o arquivo foi gravado. Se ele não foi salvo, então você pode usar o nome sem a extensão de arquivo.se não tiver a certeza do nome a usar, peça ajuda ao Project Explorer.

objecto de folhas de trabalho no Excel VBA - nome do ficheiro no project explorer

Se quiser activar um livro de trabalho e Seleccionar uma célula específica numa folha de trabalho nesse livro de trabalho, terá de indicar o endereço completo da célula (incluindo o Livro de trabalho e o nome da folha de trabalho).

Sub ActivateWorkbook()Workbooks("Examples.xlsx").Worksheets("Sheet1").ActivateRange("A1").SelectEnd Sub

o código acima activa pela primeira vez o Sheet1 nos exemplos.xlsx workbook e, em seguida, seleciona a célula A1 na folha.

muitas vezes você verá um código onde uma referência a uma planilha ou uma célula/intervalo é feita sem se referir ao livro de trabalho. Isso acontece quando você está se referindo à planilha/ranges no mesmo livro de trabalho que tem o código nele e também é o livro de trabalho ativo. No entanto, em alguns casos, você precisa especificar o livro de trabalho para se certificar de que o código funciona (mais sobre isso na seção deste livro de trabalho).

usando números de índice

Pode também referir-se aos livros de trabalho com base no seu número de índice.

por exemplo, se tiver três livros de trabalho abertos, o seguinte código mostrar-lhe-á os nomes dos três livros de trabalho numa caixa de mensagens (um de cada vez).

Sub WorkbookName()MsgBox Workbooks(1).NameMsgBox Workbooks(2).NameMsgBox Workbooks(3).NameEnd Sub

o código acima usa MsgBox – que é uma função que mostra uma caixa de mensagens com o texto / valor especificado (que é o nome do livro de trabalho neste caso).

um dos problemas que muitas vezes tenho com o uso de números de índice com Workbooks é que você nunca sabe qual é o primeiro livro de trabalho e qual é o segundo e assim por diante. Para ter certeza, você teria que executar o código como mostrado acima ou algo semelhante ao loop através dos livros de trabalho abertos e saber o seu número de índice.

Excel trata o livro aberto primeiro para ter o número de índice como 1, e o próximo como 2 e assim por diante.

apesar desta desvantagem, o uso de números de índice pode ser útil. Por exemplo, se você quiser fazer um loop através de todos os workbooks abertos e salvar tudo, você pode usar os números de índice. Neste caso, uma vez que você quer que isso aconteça com todos os livros de trabalho, você não está preocupado com seus números de índice individuais.

o código abaixo faria um loop através de todos os workbooks abertos e fecharia todos, exceto o workbook que tem este código VBA.

o código acima conta o número de livros abertos e, em seguida, passa por todos os livros usando o para cada loop.

ele usa a condição IF para verificar se o nome do livro de trabalho é o mesmo que o do livro de trabalho onde o código está sendo executado.

Se não for uma correspondência, fecha o livro de trabalho e passa para o próximo.

Note que temos executado o loop de WbCount para 1 com um passo de -1. Isto é feito como com cada loop, o número de livros abertos está diminuindo.

ThisWorkbook is covered in detail in the later section.

usando ActiveWorkbook

ActiveWorkbook, como o nome sugere, refere-se ao workbook que está activo.

o código abaixo mostrar-lhe-á o nome do manual activo.

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameEnd Sub

quando você usa VBA para ativar outro livro de trabalho, a parte ActiveWorkbook no VBA depois disso iria começar a se referir ao livro de trabalho ativado.

Aqui está um exemplo disso.

Se você tiver um livro de trabalho ativo e você inserir o seguinte código nele e executá-lo, ele iria primeiro mostrar o nome do livro de trabalho que tem o código e, em seguida, o nome dos exemplos.xlsx (que é ativado pelo código).

Sub ActiveWorkbookName()MsgBox ActiveWorkbook.NameWorkbooks("Examples.xlsx").ActivateMsgBox ActiveWorkbook.NameEnd Sub

Note que quando você cria um novo livro de trabalho usando VBA, esse livro de trabalho recém-criado automaticamente se torna o livro de trabalho ativo.

usando este livro de trabalho

Este livro de trabalho refere-se ao livro de trabalho onde o código está a ser executado.

cada livro de trabalho teria um objeto deste livro como parte dele (visível no Explorador do projeto).

objeto de livro de trabalho em VBA - ThisWorkbook

‘ThisWorkbook’ pode armazenar macros regulares (semelhantes aos que adicionamos módulos), bem como procedimentos de eventos. Um procedimento de evento é algo que é despoletado com base em um evento-como fazer duplo-click em uma célula, ou salvar um livro de trabalho ou ativar uma planilha.

qualquer procedimento de evento que você salvar neste ‘Este livro de trabalho’ estaria disponível em todo o livro de trabalho, em comparação com os eventos de nível de folha que são restritos apenas às folhas específicas.

Por exemplo, se fizer duplo-click sobre o objecto deste livro de trabalho no Project Explorer e colar o código em baixo nele, ele irá mostrar o endereço da célula sempre que fizer duplo-click em qualquer uma das células do livro de trabalho inteiro.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)MsgBox Target.AddressEnd Sub

enquanto o papel principal deste livro é armazenar o procedimento de Evento, Você também pode usá-lo para se referir ao livro de trabalho onde o código está sendo executado.

o código abaixo retornaria o nome do livro de trabalho no qual o código está sendo executado.

Sub ThisWorkbookName()MsgBox ThisWorkbook.NameEnd Sub

o benefício de usar este livro de trabalho (sobre o ActiveWorkbook) é que ele se referiria ao mesmo livro de trabalho (aquele que tem o código nele) em todos os casos. Então, se você usar um código VBA para adicionar um novo livro de trabalho, o ActiveWorkbook mudaria, mas este livro de trabalho ainda se referiria ao que tem o código.

Criando um novo objeto de livro de trabalho

o seguinte código irá criar um novo livro de trabalho.

Sub CreateNewWorkbook()Workbooks.AddEnd Sub

quando você adiciona um novo livro de trabalho, ele se torna o livro de trabalho ativo.

o seguinte código irá adicionar um novo livro de trabalho e, em seguida, mostrar-lhe o nome desse livro (que seria o nome padrão do tipo de Livro 1).

Sub CreateNewWorkbook()Workbooks.AddMsgBox ActiveWorkbook.NameEnd Sub

abra um livro de trabalho usando VBA

você pode usar VBA para abrir um livro de trabalho específico quando você conhece o caminho de arquivo do livro de trabalho.

o código abaixo abrirá os exemplos do livro de trabalho.xlsx que está na pasta de documentos no meu sistema.

Sub OpenWorkbook()Workbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")End Sub

No caso de o ficheiro existir na pasta predefinida, que é a pasta onde o VBA grava os ficheiros novos por omissão, então poderá apenas indicar o nome do livro de trabalho – SEM a localização completa.

Sub OpenWorkbook()Workbooks.Open ("Examples.xlsx")End Sub

No caso do livro de trabalho que você está tentando abrir não existir, você verá um erro.

para evitar este erro, você pode adicionar algumas linhas ao seu código para primeiro verificar se o arquivo existe ou não e se ele existe então tentar abri-lo.

o código abaixo iria verificar a localização do ficheiro e, se não existir, irá mostrar uma mensagem personalizada (não a mensagem de erro):

Sub OpenWorkbook()If Dir("C:\Users\sumit\Documents\Examples.xlsx") <> "" ThenWorkbooks.Open ("C:\Users\sumit\Documents\Examples.xlsx")ElseMsgBox "The file doesn't exist"End IfEnd Sub

Poderá também usar a janela aberta para seleccionar o ficheiro que deseja abrir.

Sub OpenWorkbook()On Error Resume NextDim FilePath As StringFilePath = Application.GetOpenFilenameWorkbooks.Open (FilePath)End Sub

o código acima abre a janela de abertura. Quando você seleciona um arquivo que você deseja abrir, ele atribui a localização do arquivo para a variável FilePath. Livro.Abrir então usa o caminho do arquivo para abrir o arquivo.

no caso de o utilizador não abrir um ficheiro e carregar no botão Cancelar, o ficheiro torna-se falso. Para evitar obter um erro neste caso, temos usado a declaração ‘On Error Resume Next’.

Relacionados: Saiba Tudo sobre o Tratamento de erros no VBA do Excel

Salvar uma pasta de trabalho

Para salvar a pasta de trabalho ativa, utilizar o código abaixo:

Sub SaveWorkbook()ActiveWorkbook.SaveEnd Sub

Este código funciona para os livros que já foram salvas anteriormente. Além disso, uma vez que o manual contém a macro acima, se ele não foi salvo como um .xlsm (or .ficheiro xls), irá perder a macro quando a abrir a seguir.

Se você está salvando a pasta de trabalho pela primeira vez, ele irá mostrar uma mensagem como mostrado abaixo:

Objeto de pasta de trabalho no VBA - Aviso ao salvar a pasta de trabalho pela primeira vez

Ao salvar pela primeira vez, é melhor usar o “salvar como” opção.

o código abaixo salvaria o manual activo como A.ficheiro xlsm na localização predefinida (que é a pasta do documento no meu sistema).

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Se quiser que o ficheiro seja gravado num local específico, terá de mencionar isso no valor do nome do ficheiro. O código abaixo grava o arquivo no meu desktop.

Sub SaveWorkbook()ActiveWorkbook.SaveAs Filename:="C:\Users\sumit\Desktop\Test.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Se quiser que o utilizador obtenha a opção de seleccionar a localização para gravar o ficheiro, poderá usar a janela Saveas. O código abaixo mostra a janela Saveas e permite ao utilizador seleccionar o local onde o ficheiro deve ser gravado.

Sub SaveWorkbook()Dim FilePath As StringFilePath = Application.GetSaveAsFilenameActiveWorkbook.SaveAs Filename:=FilePath & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabledEnd Sub

Note que em vez de usar FileFormat:=xlOpenXMLWorkbookMacroEnabled, você também pode usar FileFormat:=52, onde 52 é o código xlOpenXMLWorkbookMacroEnabled.

guardar todos os livros de trabalho abertos

Se tiver mais do que um livro de trabalho aberto e quiser gravar todos os livros de trabalho, pode usar o código abaixo:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In Workbookswb.SaveNext wbEnd Sub

o acima guarda todos os livros de trabalho, incluindo os que nunca foram salvos. Os workbooks que não foram salvos anteriormente seriam salvos no local padrão.

Se você só quiser salvar os livros de trabalho que foram gravados anteriormente, você pode usar o código abaixo:

Sub SaveAllWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Path <> "" Thenwb.SaveEnd IfNext wbEnd Sub

Salvar e Fechar Todas as Pastas de trabalho

Se você deseja fechar todos os livros, exceto o livro que tem o atual código, você pode usar o código abaixo:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

O código acima seria fechar todas as pastas de trabalho (exceto a pasta de trabalho que contém o código – Estelivro). No caso de haver mudanças nestes workbooks, as mudanças seriam salvas. No caso de haver um livro de trabalho que nunca foi gravado, ele irá mostrar a caixa de diálogo Gravar como.

salve uma cópia do Livro de trabalho (com a data)

Quando eu estou trabalhando com dados complexos e painel de instrumentos em livros de trabalho do Excel, eu muitas vezes criar diferentes versões dos meus livros de trabalho. Isto é útil no caso de algo correr mal com o meu actual manual. Eu teria pelo menos uma cópia dela guardada com um nome diferente (e eu só perderia o trabalho que fiz depois de criar uma cópia).

Aqui está o código VBA que irá criar uma cópia do seu livro de trabalho e salvá-lo no local indicado.

Sub CreateaCopyofWorkbook()ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy.xlsm"End Sub

o código acima salvaria uma cópia do seu livro de trabalho sempre que executasse esta macro.embora isto funcione bem, sentir-me-ia mais confortável se tivesse cópias diferentes guardadas sempre que executasse este código. A razão pela qual isso é importante é que se eu cometer um erro inadvertido e executar esta macro, ela vai salvar o trabalho com os erros. E não teria acesso ao trabalho antes de cometer o erro.

para lidar com tais situações, você pode usar o código abaixo que guarda uma nova cópia do trabalho cada vez que você o salva. E também adiciona uma data e hora como parte do nome do livro de trabalho. Isso pode ajudá-lo a rastrear qualquer erro que você fez, pois você nunca perde nenhum dos backups criados anteriormente.

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)ThisWorkbook.SaveCopyAs Filename:="C:\Users\sumit\Desktop\BackupCopy" & Format(Now(), "dd-mm-yy-hh-mm-ss-AMPM") & ".xlsm"End Sub

o código acima criaria uma cópia sempre que executasse esta macro e adicionasse uma data / hora ao nome do livro de trabalho.

crie um novo livro de trabalho para cada folha de trabalho

em alguns casos, você pode ter um livro de trabalho que tem múltiplas folhas de trabalho, e você quer criar um livro de trabalho para cada folha de trabalho.

Este pode ser o caso quando você tem relatórios mensais / trimestrais em um único livro de trabalho e você quer dividi-los em um livro de trabalho para cada folha de trabalho.

ou, se você tem relatórios sábios do departamento e você quer dividi-los em cadernos de trabalho individuais para que você possa enviar esses cadernos de trabalho individuais para os chefes de departamento.

Aqui está o código que irá criar um livro de trabalho para cada folha de trabalho, dar-lhe o mesmo nome que o da folha de trabalho, e salvá-lo na pasta especificada.

Sub CreateWorkbookforWorksheets()Dim ws As WorksheetDim wb As WorkbookFor Each ws In ThisWorkbook.WorksheetsSet wb = Workbooks.Addws.Copy Before:=wb.Sheets(1)Application.DisplayAlerts = Falsewb.Sheets(2).DeleteApplication.DisplayAlerts = Truewb.SaveAs "C:\Users\sumit\Desktop\Test\" & ws.Name & ".xlsx"wb.CloseNext wsEnd Sub

no código acima, usamos duas variáveis ‘ws’ e ‘wb’.

o código passa por cada folha de trabalho (usando o para cada ciclo seguinte) e cria um livro de trabalho para ele. Ele também usa o método de cópia do objeto da planilha para criar uma cópia da planilha no novo livro de trabalho.

Note que eu usei a instrução SET para atribuir a variável ‘ wb ‘ a qualquer novo manual que é criado pelo código.

pode usar esta técnica para atribuir um objecto de livro a uma variável. Isto está coberto na próxima seção.

atribuir um objecto de livro de trabalho a uma variável

em VBA, pode atribuir um objecto a uma variável, e então usar a variável para se referir a esse objecto.

Por exemplo, no código abaixo, eu uso VBA para adicionar um novo livro de trabalho e, em seguida, atribuir esse livro de trabalho para a variável wb. Para fazer isso, preciso usar a declaração SET.

Uma vez que eu tenha atribuído o livro de trabalho para a variável, todas as propriedades do livro de trabalho são disponibilizados para a variável também.

Sub AssigntoVariable()Dim wb As WorkbookSet wb = Workbooks.Addwb.SaveAs Filename:="C:\Users\sumit\Desktop\Examples.xlsx"End Sub

Note que o primeiro passo do código é declarar ‘wb’ como uma variável do tipo livro de trabalho. Isto diz ao VBA que esta variável pode conter o objecto do manual.

a próxima declaração usa SET para atribuir a variável ao novo livro de trabalho que estamos adicionando. Uma vez que esta atribuição é feita, podemos usar a variável wb para salvar o livro de trabalho (ou fazer qualquer outra coisa com ele).

Looping through Open Workbooks

já vimos alguns exemplos de códigos acima que usaram looping no código.

nesta secção, vou explicar diferentes maneiras de circular através de livros de trabalho abertos usando VBA.

Suponha que você deseja salvar e fechar todos os livros abertos, exceto aquele com o código e, em seguida, você pode usar o código abaixo:

Sub CloseandSaveWorkbooks()Dim wb As WorkbookFor Each wb In WorkbooksIf wb.Name <> ThisWorkbook.Name Thenwb.Close SaveChanges:=TrueEnd IfNext wbEnd Sub

O código acima usa o loop For each para percorrer cada livro na colecção de Livros. Para fazer isso, primeiro precisamos declarar ‘wb’ como a variável de tipo de livro de trabalho.

em cada ciclo de ciclo de ciclo, cada nome de livro de trabalho é analisado e se não corresponder ao nome do livro de trabalho que tem o código, ele é fechado após salvar o seu conteúdo.

O mesmo também pode ser alcançado com um laço diferente como mostrado abaixo:

Sub CloseWorkbooks()Dim WbCount As IntegerWbCount = Workbooks.CountFor i = WbCount To 1 Step -1If Workbooks(i).Name <> ThisWorkbook.Name ThenWorkbooks(i).Close SaveChanges:=TrueEnd IfNext iEnd Sub

o código acima usa o para o próximo loop para fechar todos os workbooks, exceto aquele que tem o código nele. Neste caso, não precisamos declarar uma variável de livro de trabalho, mas em vez disso, precisamos contar o número total de livros de trabalho abertos. Quando temos a contagem, usamos o laço para o próximo para ver cada manual. Além disso, usamos o número de índice para nos referirmos aos livros de trabalho neste caso.

Note que no código acima, estamos fazendo loop de WbCount para 1 com o passo -1. Isto é necessário como com cada loop, o livro de trabalho fica fechado e o número de livros de trabalho é diminuído por 1.

erro ao trabalhar com o objecto do Livro de Trabalho (erro de tempo de execução ‘9’)

um dos erros mais comuns que poderá encontrar ao trabalhar com os livros de trabalho é o erro de tempo de execução ‘9’-subscrito fora do intervalo.

Workbook Object in VBA - Runtime Error 9 Subscript Out of Range

geralmente, os erros de VBA não são muito informativos e muitas vezes deixam que você descubra o que correu mal.

Aqui estão algumas das possíveis razões que podem levar a este erro:

  • O Livro de trabalho que você está tentando acessar não existe. Por exemplo, se eu estou tentando acessar o quinto livro de trabalho usando Workbooks(5), e há apenas 4 livros de trabalho abertos, então eu vou obter este erro.
  • Se você está usando um nome errado para se referir ao livro de trabalho. Por exemplo, se o nome do seu livro de trabalho for exemplos.xlsx e você usa o exemplo.xlsx. então ele irá mostrar-lhe este erro.
  • Se você não gravou um livro de trabalho, e você usa a extensão, então você obtém este erro. Por exemplo, se o nome do seu livro de trabalho é Book1, e você usa o nome Book1.xlsx sem gravá-lo, você vai obter este erro.o livro de trabalho a que está a tentar aceder está fechado.

obtenha uma lista de todos os livros de trabalho abertos

Se quiser obter uma lista de todos os livros de trabalho abertos no livro de trabalho actual (o livro de trabalho onde está a correr o código), poderá usar o código abaixo:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).NameNext iEnd Sub

o código acima adiciona uma nova folha de trabalho e depois lista o nome de todos os livros de trabalho abertos.

Se você quiser obter o seu caminho de arquivo também, você pode usar o código abaixo:

Sub GetWorkbookNames()Dim wbcount As Integerwbcount = Workbooks.CountThisWorkbook.Worksheets.AddActiveSheet.Range("A1").ActivateFor i = 1 To wbcountRange("A1").Offset(i - 1, 0).Value = Workbooks(i).Path & "\" & Workbooks(i).NameNext iEnd Sub

abra o Livro de trabalho especificado, fazendo duplo-click na célula

Se você tiver uma lista de caminhos de arquivos para os livros de trabalho do Excel, você pode usar o código abaixo para simplesmente fazer duplo-click na célula com o caminho do arquivo e ele irá abrir esse livro de trabalho.

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)Workbooks.Open Target.ValueEnd Sub

este código seria colocado nesta janela de código do Livro de trabalho.

para fazer isto:

  • faça duplo-click sobre o objecto deste livro de trabalho no Explorador do projecto. Note que o objeto deste Workbook deve estar no manual onde você deseja esta funcionalidade.
  • copie e cole o código acima.

Agora, Se você tiver a localização exata dos arquivos que você deseja abrir, você pode fazer isso simplesmente fazendo duplo-click no caminho do arquivo e VBA abriria instantaneamente esse livro de trabalho.

onde colocar o código VBA

perguntando-se onde o código VBA vai no seu manual do Excel?

Excel tem uma infra-estrutura VBA chamada VBA editor. Você precisa copiar e colar o código na janela de código do módulo de edição VB.

Aqui estão os passos para fazer isto:

  1. vá para a página de desenvolvimento.usando livros de trabalho no Excel VBA - Developer Tab em ribbon
  2. carregue na opção Visual Basic. Isto irá abrir o editor de VB na infra-estrutura.carregue no Visual Basic
  3. No Project Explorer pane no Editor VB, carregue com o botão direito em qualquer objecto para o livro de trabalho em que queira inserir o código. Se não vir o Project Explorer, vá para a página Ver e clique no Project Explorer.
  4. vá para inserir e clique no módulo. Isto irá inserir um objecto de Módulo para o seu livro de trabalho.Using Workbooks in Excel VBA-insering module
  5. Copy and paste the code in the module window.Using Workbooks in Excel VBA-inserting module

you May Also Like the Following Excel VBA Tutorials:

  • How to Record a Macro in Excel.
  • criando uma função definida pelo usuário no Excel.
  • Como criar e usar Add-in No Excel.
  • Como Resue Macros colocando-o no livro pessoal de Macro.
  • obtenha a lista de nomes de arquivos de uma pasta no Excel (com e sem VBA).
  • Como usar a função Instr do Excel VBA (com exemplos práticos).
  • Como classificar dados no Excel usando VBA (um guia passo a passo).