Algunos aficionados te dirán que se usa para limpiar objetos de la memoria y liberar espacio, si estas de suerte te darán un ejemplo en donde ponen Objeto = Nothing justo antes del End Sub.
Esto es una novatada, y solo se me ocurren dos razones de por que lo hacen:
1-Porque en realidad no saben lo que hacen y/o creen que se ve "cool"
2-Porque vienen de otros lenguajes como C o C++ (pero probablemente la causa sea la numero 1)
C y C++ son ejemplos de lenguajes en los que el programador es responsable de la creación y la destrucción de los objetos.
Ahora te explicaré por que NO NECESITAS destruir los objetos manualmente, y te diré las únicas 3 ocasiones en que SI DEBES destruirlos manualmente.
En VBA como en algunos otros lenguajes de programación como por ejemplo Java, creo que Ruby también, y algunos otros que se me escapan ahora mismo, existe algo que se denomina Garbage Collector que traducido al español seria "Recolector de Basura". Esto es una característica de estos lenguajes, y una de las razones por las que los hace tan lentos y de bajo rendimiento.
El garbage collector se basa en un contador de referencias, VBA te garantiza la destrucción de un objeto cuando sus referencias llegan a 0; y las referencias de un objeto llegan a 0 cuando este sale de su ámbito; y su ámbito termina en el End Sub.
Por eso antes te decía que destruir objetos justo antes del End Sub no hace absolutamente nada mas que verse un poco ridículo. El propio End Sub establece la referencia en 0 y el Garbage Collector destruye el objeto por ti.
Ahora te diré 3 ocasiones en que si deberías hacerlo manualmente y te las diré en orden de probabilidad de que te ocurran:
Caso 1: Cuando tienes un proceso relativamente largo en donde usaras un objeto hasta cierto punto y luego ya no lo necesitaras mas, en ese caso seria conveniente destruir el objeto para dar paso al resto del código. Ejemplo:
Sub CodigoIlustrativo()
Dim Objeto as Objeto
Set Objeto = Objeto Nuevo
Objeto.Metodo 'aquí trabajas todo lo que quieras con tu objeto'
Set Objeto = Nothing 'Aquí ya no necesitas mas el objeto pero tu macro continuará haciendo otras cosas'
'Mas código'
'Mas código'
'Mas código'
End Sub
Caso 2: Cuando necesitas inicializar un objeto dentro de un bucle, imagina que debes hacer un bucle de mil repeticiones y dentro del bucle necesitas inicializar un objeto cada vez. Una buena practica seria destruir el objeto al final de la iteración para volverlo a inicializar desde 0 en la próxima iteración. Ejemplo:
Sub CodigoIlustrativo()
Dim Objeto as Objeto
For i = 1 to 1000
Set Objeto = Objeto Nuevo
'resto de código del bucle'
Set Objeto = Nothing
'para la próxima iteracion las referencias vuelven a estar en 0'
Next i
End Sub
Caso 3 (y esto probablemente nunca te ocurrirá): Cuando dos objetos mantienen una referencia uno de otro, en estos casos el Garbage Collector de VBA es pésimo, y los objetos nunca se destruirán hasta que tu mismo rompas la cadena. Ejemplo:
Si tu ObjetoA tiene una referencia de tu ObjetoB y tu ObjetoB también tiene una referencia de tu ObjetoA, VBA no será capaz de destruirlo a menos que explícitamente digas: ObjetoA.ReferenciaObjetoB = Nothing o viceversa.
Ni siquiera se me ocurre un ejemplo con sentido en este momento ya que estos casos son muy raro verlos especialmente cuando no programas POO (cosa que casi nadie hace en VBA)