Selecionar uma folha de cálculo utilizando VBA no Excel
Esta página apresenta diferentes formas de selecionar uma folha de cálculo para operar com base no nome ou no número.
Considera-se importante utilizar uma folha de cálculo e as variáveis do livro de trabalho em vez de confiar no código curto para aceder a uma folha de cálculo. Activesheet.
Embora forneça um código curto para aceder a uma folha de cálculo, a utilização do CodeName
pode conduzir a erros, uma vez que só funciona em determinadas condições.
Discutiu duas condições de erro possíveis e a forma de as tratar.
Selecionar a folha de cálculo por nome
A propriedade Item
da coleção Worksheets
é utilizada para devolver um único objeto Worksheet da coleção.
A título de exemplo, o seu nome é o seguinte:
Dim ws As Worksheet
Set ws = Application.ActiveWorkbook.Worksheets.Item(Index:="data")
A coleção Worksheets
é aqui obtida a partir de umaWorkbook.Worksheets
chamada de procedimento.
O procedimento Item
devolve um objeto do tipo Worksheet
que é opcionalmente atribuído a uma variável ws
.
... ou mais curto:
Dim ws As Worksheet
Set ws = Worksheets(Index:="data")
- Se
Worksheets
é chamado sem especificar o livro de trabalho que o Excel assumeApplication.ActiveWorkbook
- Uma prática comum com itens de coleção é a utilização de uma abreviatura: Em vez da palavra completa
collection.Item(...)
o mais curtocollection(...)
é utilizado. - Como não torna as coisas mais claras, também deixamos de fora o
Item
nome do parâmetro(Index:=...)
ActiveWorkbook
para fornecer o método pai Workbook
objeto cujo Worksheets
está a ser utilizada. No código real, é preferível utilizar variáveis de objeto explicitamente declaradas e atribuídas, no caso atual: Dim wb As Workbook
: Set wb = ActiveWorkbook
muito provavelmente com outra expressão de atribuição de objeto.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim wsData As Worksheet
Set wsData = wb.Worksheets("Data")
Selecionar folha por número de índice
Uma ficha de trabalho também pode ser identificada pelo seu número na coleção, em que a folha 1 corresponde à primeira folha de trabalho.
Dim ws As Worksheet
Set ws = Worksheets(1)
Folhas ou fichas de trabalho
Na verdade, também pode obter uma folha de trabalho a partir da coleção Sheets
do livro de trabalho. Esta última contém todas as folhas do livro de exercícios:
para além das folhas de cálculo, também os gráficos (folhas de gráficos).
Se pretender que seja devolvida uma folha de cálculo, é mais seguro utilizar Worksheets
, sendo específico quanto ao tipo.
Charts
,
a sua contagem de folhas será diferente. Por exemplo, se começar com um gráfico seguido de uma folha de cálculo,
Sheets(2)
será a mesma folha de cálculo que Workheets(1)
.
Selecionar folha de cálculo por nome de variável
Exceto no caso das macros de uso geral, é frequente saber qual o nome das folhas de cálculo em que a macro actua.
Dim strWorkbook As String: strWorkbook = "Demo.xlsx"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Worksheets(strWorksheet)
Ainda assim, o nome da folha pode incluir um elemento variável, por exemplo, a data (formatada) de algum relatório de produção como ficheiro csv.
Nesse caso, pode percorrer as folhas de trabalho da seguinte forma: o carácter universal Like "...*"
devolverá
a folha de cálculo pretendida com o nome que começa por "Data" e um fim não especificado:
Dim wsData As Worksheet
Dim ws As Worksheet
For Each ws In wb.Worksheets
If ws.Name Like "Data*" Then
Set wsData = ws
Exit For
End If
Next ws
Selecionar folha de cálculo por nome de código
Se a macro só precisar de trabalhar em folhas do livro de trabalho em que a macro está localizada, pode utilizar uma sintaxe mais curta:
Sheet1.Range("A1").Value = "Hello world"
Worksheet.CodeName
só pode devolver folhas em ThisWorkbook
.
Selecionar a folha à esquerda
Utilize a propriedade Previous
para obter a folha à esquerda. Utilize a propriedade Next
para obter a folha à direita.
Dim wsPrevious As Worksheet
Set wsPrevious = Sheet2.Previous
If Not wsPrevious Is Nothing Then
End If
- É evidente que nem sempre haverá uma folha anterior.
Por isso, antes de atuar sobre a folha selecionada, pode ser bom verificar:
Not wsPrevious Is Nothing
. Isto evitará Erro de tempo de execução 9: subscrito fora do intervalo. - Se também tiver folhas de gráfico no seu livro de trabalho, poderá querer tornar o código mais circunspeto para evitar
adicionando o tratamento de erros ou declarando a nova variável como
Object
e verificar se é o tipo de que necessita.
Selecionar a folha à direita
Utilize a propriedade Next
para colocar a folha à direita.
Dim wsNext As Worksheet
Set wsNext = Sheet2.Next
Selecionar intervalo de folhas de cálculo
Em última análise, é provável que queira fazer coisas com um intervalo na folha de cálculo para o qual utilizará uma variável Range
.
Dim strWorkbook As String: strWorkbook = "Demo.xlsm"
Dim wb As Workbook
Set wb = Workbooks(strWorkbook)
Dim strWorksheet As String: strWorksheet = "data"
Dim ws As Worksheet
Set ws = wb.Sheets(strSheet)
Dim rng As Range
Set rng = ws.Range("A2:B6")
Erro de tempo de execução 9: subscrito fora do intervalo
Se o endereço Index
se referir a um item que não está presente na coleção, será devolvido o erro de tempo de execução 9: subscrito fora do intervalo.
Dependendo da utilização efectiva, pode considerar adicionar o tratamento de erros.
Sub Demo()
On Error GoTo HandleError
Set ws = Worksheets("xxx")
HandleExit:
Exit Sub
HandleError:
MsgBox Err.Description
Resume HandleExit
End Sub
Evento de abertura de folha de cálculo
Pode utilizar o procedimento Worksheet_Activate() que é executado quando a folha é selecionada. Para adicionar o código, abra o módulo da folha de cálculo (selecione no Explorador de projectos) e, na combinação de módulos da esquerda, selecione Worksheet e, na combinação da direita, selecione Activate. Isto irá inserir um bloco de código vazio e, em seguida, completá-lo para:
Private Sub Worksheet_Activate()
MsgBox "Hi! I'm " & Me.Name & ", who are you?"
End Sub
Autor: Mark Uildriks Referência: Worksheets.Item() | Microsoft Learn