
Modos de referenciar-se a um Worbook:
Tags: VBA, Excel, Series, reference, referenciando, workbook, worksheet

✔ VBA Excel Specialist® - Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance. Contate-nos: brazilsalesforceeffectiveness@gmail.com | ESTE BLOG NÃO SE RESPONSABILIZA POR QUAISQUER DANOS PROVENIENTES DO USO DOS CÓDIGOS AQUI POSTADOS EM APLICAÇÕES PESSOAIS OU DE TERCEIROS.



workbooks = Arquivo que contém todas as planilha em diversas pastas.
worksheets = Planilhas individuais, contidas nas abas.
A propriedade do ActiveWorkbook faz referência ao workbook que tem o foco.Digamos que após atualizar a informação num workbook ativo, provavelmente deseje salvá-lo, esta é uma tarefa simples para a propriedade do ActiveWorkbook. A SUB a seguir utilizará a propriedade ActiveWorkbook para fechar o workbook ativo:Sub CloseActiveWBSemSalvar()' Fecha o workbook ativo sem salvar.ActiveWorkbook.Close FalseEnd SubSub CloseActiveWBSalvando()'Fecha o workbook ativo e o salva.ActiveWorkbook.Close TrueEnd SubSub CloseActiveWBEscolheSeSalva()'Fecha o workbook ativo escolhendo se deseja salvar.'Deixa o usuário decidir se deseja salvar ou não.ActiveWorkbook.CloseEnd SubSim, o exemplo foi apenas elucidativo, pode-se facilmente combinar estes três estado em uma única função passando o modo como a ação será executada através de parâmetros.Abaixo segue outro exemplo onde o nome, o caminho são atribuidos:Function GetActiveWBPathName() As StringLet GetActiveWBPathName = ActiveWorkbook.Path & "\" & ActiveWorkbook.NameEnd Function


workbooks = Arquivo que contém todas as planilha em diversas pastas.
worksheets = Planilhas individuais, contidas nas abas.
A propriedade para o ThisWorkbook é similar a propriedade ActiveWorkbook, mas...
ActiveWorkbook avaliará o workbook com foco, ThisWorkbook se referirá ao workbook que estiver rodando no momento.
Esforce-se para distinguir estes dois momentos. Sim este aparente pormenor acrescenta grande flexibilidade uma vez que o workbook ativo nem sempre é o workbook que está rodando o código.Function GetThisWB() As StringLet GetThisWB = ThisWorkbook.Path & "\" & ThisWorkbook.NameEnd FunctionA Figura abaixo mostra o resultado da execução do procedimento:


workbooks = Arquivo que contém todas as planilha em diversas pastas.
worksheets = Planilhas individuais, contidas nas abas.
As coleções de Workbooks contém todos os objetos Workbooks que estão abertos.Para instanciá-lo, a seguinte SUB populará um listbox num formulário do usuário com os nomes de todos os workbooks abertos:Private Sub UserForm_Activate()'Popula o listbox com os nomes dos workbooks abertos.Dim wb As WorkbookFor Each wb In WorkbooksListBox1.AddItem wb.NameNext wbEnd SubO FORM resultante é mostrado na Figura abaixo. perceba a listagem de todos os workbooks abertos. Ao utilizar a referência à coleção Workbooks, poderá referenciá-los sem "hard-coding", simplesmente o nome do workbook.Para listar todos os workbooks abertos é uma tarefa fácil; agradeça isso a existência da Workbooks collection. Todavia abrir todos os workbooks numa pasta específica é uma tarefa dura, mas você poderá se beneficiar desta SUB:Sub OpenAllwb()'Abre todos os workbooks numa pasta específica.Dim i As IntegerWith Application.FileSearchLet .LookIn = "C:\A&A"Let .FileType = msoFileTypeExcelWorkbooks' Se houver workbooks.If .Execute > 0 ThenFor i = 1 To .FoundFiles.CountWorkbooks.Open (.FoundFiles(i))Next i' Caso não hajam workbooks ElseMsgBox "Não existem workbooks para acessar.", vbOKOnlyEnd IfEnd WithEnd SubEsta tarefa mostra o que pode ser feito com a coleção Workbooks. Neste caso o código não circula através da coleção Workbooks; antes tenta tirar vantagem de um dos métodos da coleção (collection) — especificamente, o método Open (abrir).Fechar todos os workbooks abertos é tão fácil como foi abrí-los, aplique a SUB abaixo:Sub CloseAllWB()'Fecha todos workbooks abertos.Workbooks.CloseEnd SubPara visualizar mais métodos e propriedades de collection, pressionando F2 no VBE e naveguendo no Object Browser.


workbooks = Arquivo que contém todas as planilha em diversas pastas.
worksheets = Planilhas individuais, contidas nas abas.
Caso saiba o nome do workbook ao qual deseja fazer referência, uma referência explícita pode ser o melhor método. Para tanto lembre-se que precisará de um situação estável. Não poderá utilizar esta solução numa planilha onde o workbook muda de nome a todo momento. Mas, também possa passar o nome do workbook como referência através de uma função.Function Activatewb (wbname As String)'Abre a variável wbname.Workbooks(wbname).ActivateEnd FunctionA execução é simples, passe o nome do workbook que deseja ativar como argumento da função:ActivateWB ("Alefe&BeteProcessamentodeDados.xlsb")(Lembre-se que é necessário incluir a extensão xls, xlsx, xlsb.)Abaixo disponibilizo uma função que também usa a propriedade do Workbooks para determinar qual está aberto no momento:Function IsWBOpen (wbname As String) As Boolean' Abre o workbook.Dim wb As WorkbookOn Error Resume NextSet wb = Workbooks(wbname)IsWBOpen = Not wb Is NothingEnd FunctionSe wbname estiver aberta, a função retorna True. Quando não estiver aberta, a função retorna False.


workbooks = Arquivo que contém todas as planilha em diversas pastas.
worksheets = Planilhas individuais, contidas nas abas.
Talvez nos seja imposta a condição de que o único modo para fazermos a referência a um workbook seja através do valor do índice. (Sim talvez esteja alterando uma aplicação de terceiros, por exemplo.)O MS Excel acessa o valor do índice quando o mesmo é aberto nele. o primeiro workbook aberto recebe o valor 1 de índice, o segundo workbook aberto receberá o valor 2 de índice, e assim sucessivamente.É claro que não é tão simples, este método tem um pequeno problema que o acompanha, pois quando deletamos um workbook ou o fechamos o valor do índice de toda a coleção Workbook muda.Por exemplo, digamos que tenhamos 3 worbooks abertos com os seguintes índices de valor:StatisticalDashboardFunctions.xls - 3111112.xls - 2HumanResources.xls - 1Se uma tarefa em particular depende que todos os três workbooks estejam abertos utilizando-se dos valores dos índices destes, poderá ocorrer alguns desencontros quando os 'instanciarmos': Workbooks(1).ActivateIsto ativará HumanResources.xls como aberto, se fechá-la a StatisticalDashboardFunctions.xls e 111112.xls se moverão para baixo no índice:StatisticalDashboardFunctions.xls virá a ter o índice como 2Ao passo que 111112.xls terá o índice como 1.Usar o valor do índice como referência para os workbooks não é necessariamente errado, mas precisa entender o que está envolvido nesta escolha, sobre os possíveis erros que poderão ocorrer e como os corrigirá.
