Articles

excel-vba Cuándo usar ActiveWorkbook y ThisWorkbook

Ejemplo

Es una buena práctica de VBA especificar siempre a qué libro de trabajo se refiere su código VBA. Si se omite esta especificación, entonces VBA asume que el código se dirige al libro de trabajo activo en ese momento (ActiveWorkbook).

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

Sin embargo, cuando hay varios libros de trabajo abiertos al mismo tiempo — particularmente y sobre todo cuando el código VBA se ejecuta desde un Add-In de Excel — las referencias al ActiveWorkbook pueden ser confundidas o mal dirigidas. Por ejemplo, un complemento con un UDF que comprueba la hora del día y la compara con un valor almacenado en una de las hojas de trabajo del complemento (que normalmente no son fácilmente visibles para el usuario) tendrá que identificar explícitamente a qué libro de trabajo se está haciendo referencia. En nuestro ejemplo, nuestro libro de trabajo abierto (y activo) tiene una fórmula en la celda A1 =EarlyOrLate() y NO tiene ningún VBA escrito para ese libro de trabajo activo. En nuestro complemento, tenemos la siguiente función definida por el usuario (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

El código de la UDF está escrito y almacenado en el complemento de Excel instalado. Utiliza los datos almacenados en una hoja de trabajo del complemento llamada «WatchTime». Si el UDF hubiera utilizado ActiveWorkbook en lugar de ThisWorkbook, nunca podría garantizar a qué libro de trabajo estaba destinado.

Dejar una respuesta

Tu dirección de correo electrónico no será publicada.