Pregunta extraña?

28/02/2004 - 18:21 por juanca | Informe spam
Cual es el proposito o el efecto dentro de esta macro, de
incluir o eliminar la linea "Set wksH = Nothing"?
Es una macro de Fernando de consultas anteriores pero dejo
la prejunta abierta porque se que muchos saben la respusta.

Yo entiendo que es para limpiar de la memoria el valor de
la variable, pero entonces me pregunto, No deberian todas
los procedimientos donde utilizamos variables de limpiar
su valor de la memoria una vez que terminan las macros?

Sub SeleccionarHojas()
Dim wksH As Worksheet
Dim mtr(), n

For Each wksH In Worksheets
If Left(wksH.Name, 4) = "Hoja" Then
n = n + 1
ReDim Preserve mtr(1 To n)
mtr(n) = wksH.Name
End If
Next
Worksheets(mtr()).Select

Set wksH = Nothing
End Sub
 

Leer las respuestas

#1 Fernando Arroyo
28/02/2004 - 19:57 | Informe spam
Al crear la variable de tipo Worksheet, su valor es Nothing porque no "apunta" a ningún objeto. Cuando se hace el Set Variable = objeto Worksheet, se "conecta" la variable con el objeto, y al hacer de nuevo Set ... = Nothing se "desconecta". Normalmente no pasa nada si no se hace el Set... = Nothing porque la "desconexión" se produce automáticamente al terminar la ejecución del código, salvo que se trate de objetos usados para automatización (por ejemplo, un objeto Word.Application que se haya creado desde Excel).

Lo que me sucede a mí es que me he acostumbrado a poner la instrucción Set... = Nothing cada vez que creo un objeto, y ya lo hago sin pensar.
Un saludo.


Fernando Arroyo
MS MVP - Excel

"juanca" escribió en el mensaje news:39f301c3fe1f$57fc4e20$
Cual es el proposito o el efecto dentro de esta macro, de
incluir o eliminar la linea "Set wksH = Nothing"?
Es una macro de Fernando de consultas anteriores pero dejo
la prejunta abierta porque se que muchos saben la respusta.

Yo entiendo que es para limpiar de la memoria el valor de
la variable, pero entonces me pregunto, No deberian todas
los procedimientos donde utilizamos variables de limpiar
su valor de la memoria una vez que terminan las macros?

Sub SeleccionarHojas()
Dim wksH As Worksheet
Dim mtr(), n

For Each wksH In Worksheets
If Left(wksH.Name, 4) = "Hoja" Then
n = n + 1
ReDim Preserve mtr(1 To n)
mtr(n) = wksH.Name
End If
Next
Worksheets(mtr()).Select

Set wksH = Nothing
End Sub

Preguntas similares