Articles

excel-vba When To Use ActiveWorkbook and ThisWorkbook

Example

É uma Boa Prática VBA especificar sempre a que pasta de trabalho se refere o seu código VBA. Se esta especificação for omitida, então o VBA assume que o código é direcionado para a pasta de trabalho atualmente ativa (ActiveWorkbook).

'--- the currently active workbook (and worksheet) is impliedRange("A1").value = 3.1415Cells(1, 1).value = 3.1415

No entanto, quando várias pastas de trabalho estão abertas ao mesmo tempo — particularmente e especialmente quando o código VBA está sendo executado a partir de um Add-In do Excel — as referências ao código ActiveWorkbook podem ser confundidas ou mal direcionadas. Por exemplo, um add-in com um UDF que verifica a hora do dia e o compara com um valor armazenado em uma das planilhas do add-in (que normalmente não são facilmente visíveis para o usuário) terá que identificar explicitamente qual pasta de trabalho está sendo referenciada. Em nosso exemplo, nossa pasta de trabalho aberta (e ativa) tem uma fórmula na célula A1 =EarlyOrLate() e NÃO tem nenhuma VBA escrita para essa pasta de trabalho ativa. Em nosso add-in, temos a seguinte Função Definida pelo Usuário (UDF):

Public Function EarlyOrLate() As String If Hour(Now) > ThisWorkbook.Sheets("WatchTime").Range("A1") Then EarlyOrLate = "It's Late!" Else EarlyOrLate = "It's Early!" End IfEnd Function

O código para o UDF é escrito e armazenado no add-in do Excel instalado. Ele usa os dados armazenados em uma planilha no add-in chamado “WatchTime”. Se o UDF tivesse usado ActiveWorkbook ao invés de ThisWorkbook, então ele nunca seria capaz de garantir qual pasta de trabalho era destinada.

Deixe uma resposta

O seu endereço de email não será publicado.