Y puedo preguntar porque no debería Nunca declararlas como "As New"? No es óptimo?
exacto no es optimo, mira una cita de la pagina de el guile que habla sobre esto, mejor explicado imposible:
Buenas normas de conducta con los objetos:
La forma que acabamos de ver de crear un objeto es la más recomendable. El porqué es que así sólo reservamos espacio real cuando vamos a usar el objeto. Me explico: Veamos otras formas de declarar/asignar variables de objetos:
Dim miNombre As Object
Set miNombre = New cNombre
Esta sería la forma de crear un objeto del que no sabemos que clase será. En nuestro caso, es un desperdicio de código (interno del VB) y recursos (no demasiados) que no es necesario. Cuando se usa una variable declarada As Object, el Visual Basic no sabe, hasta que se está ejecutando, de que clase será y reserva unas líneas (ocultas) de código para poder hacer su trabajo cuando esté ejecutándose el programa.
Dim miNombre As New cNombre
De esta forma, al mismo tiempo que declaramos la clase, le indicamos al VB que en cuanto ejecute el módulo en el que se encuentra la declaración, cree el objeto. Aunque ese objeto nunca se use, se creará en memoria y ahí estará hasta que se destruya... ¿Desperdicio de recursos? Más bien sí.
Pero tanto esta última forma como la primera, es la más rápida y menos consumidora de código interno y recursos o tiempo que el Visual necesita para crear objetos.
Esto es por la sencilla razón que ya le estamos indicando cómo va a ser ese objeto y por tanto él sabe cómo es y cuanto necesitará para albergarlo... por supuesto, esto sólo se puede hacer con objetos que actualmente hay en las referencias o en nuestro proyecto.
¿Qué método usar para declarar variables de objetos?
Si sabemos el tipo de antemano, usaremos el primer método:
Dim miNombre As cNombre
Cuando queramos usarlo, sólo debemos asignarlo mediante SET y ya estará disponible.
Habrá ocasiones, la mayoría, en que se necesite usar el NEW junto con la declaración, un caso es para usar colecciones, ya que no se comporta de igual forma. La razón de este "extraño" comportamiento, al menos en forma práctica, la teórica te la dejo a ti, para que profundices con los manuales del Visual Basic, es que al usarlo sin NEW sólo tenemos una copia "fija" de esa variable. Por otro lado, con NEW obtendremos una nueva copia después de destruir la copia anterior. Esto lo verás prácticamente en el código de ejemplo para probar todo esto.
otra cita de internet, que explica bien esto:
If you're working in VB classic (6.0), try not to declare your new object variables like this:
Dim obj As New Class
This is a slow way to program. Everywhere you use the variable obj, VB will check if it's already been instantiated or not. This slows down your program. Instead, declare the variable without the New keyword, and instantiate it separately in a sensible place.
Dim obj As Class
Set obj = New Class
You may find out that it did not make sense to go object-oriented. If this happens, just revert back to your original module. You did take a backup copy, didn't you?
saludos.