bueno, yo no soy ningún experto, pero ya que responder tu pregunta me puede ayudar un poco a mi mismo a respondérmela también, pues acá va una explicación, que espero sea de beneficio tuyo, mio y del que lea (en todo caso no me creas mucho y has algunas pruebas tú también, jejej).
Seguro que has visto que mucha gente escribe, en lugar de range("a1"), algo así [a1].
Bueno, los [ ] son una abreviación del método evaluate. [a1] es equivalente a evaluate("a1"), lo que, en este caso, como bien citas tu, convierte un nombre: "a1", en un objeto: celda A1. Por esto puedes escribir: evaluate("a1").select o abreviando, [a1].select.
Yo, personalmente, evito usar [a1] porque tiene un efecto significativo en el rendimiento (al menos eso es lo que he leído) y acá hago una prueba muy torpe de esto:
Ten en cuenta que [a1] no equivale a range("a1") sino a evaluate("a1"). Así, puedes comparar estos dos bucles:
bucle 1 (evaluate):
- Código: Seleccionar todo
Sub prueba_evaluate()
For X = 1 To 50000
Evaluate("a" & X) = Evaluate("a" & X).Row
Next X
End Sub
bucle 2 (range):
- Código: Seleccionar todo
Sub prueba_range()
For X = 1 To 50000
Range("a" & X) = Range("a" & X).Row
Next X
End Sub
verás que usando evaluate la macro se demora casi el doble, al menos en mis pruebas en mi equipo (y acá podrás encontrar una discusión sobre el tiempo de ejecución de distintos tipos de bucles, al igual que una forma para medirlos:
http://www.ayudaexcel.com/foro/showthre ... 048&page=2Bueno, eso en cuanto a convertir un nombre en un objeto (y no aplica sólo para celdas como bien puedes leer en la ayuda de VBA).
La otra parte, que hace muy poderoso al método evaluate, es lo que tu citas como convertir un nombre en un valor.
Piensa en evalute como una celda. Es decir, cuando ingresas algo en evalute("...") o [...] has de cuenta que lo estás ingresando en un celda y que el resultado será el que te dé la celda. Si en una celda ingresas =SUMA(A1:A10) el resultado es la suma de los valores en A1:A10. Si usas evaluate("sum(a1:a10)") tendrás el mismo resultado. =HOY() en una celda te dará el mismo resultado que evaluate("today()") o simplemente [today()].
Otro ejemplo, si usas [1+1] o lo que es lo mismo, evaluate("1+1") el resultado será 2. Así, puedes crear cualquier cadena de texto como una fórmula de una hoja de excel y obtener su resultado por medio de evaluate. Así, con evaluate puedes hacer practicamente cualquier cosa que harías en una celda

, sí sí, eso fue lo que dije, jeje, has de cuenta que tienes una celda pero en VBA con evaluate, lo que te permite el uso de fórmulas matriciales, nombres definidos (si tienes una celda llamada "pacop", puedes usar [pacop] o evaluate("pacop") para traer el valor de esa celda), inlcuso puedes convertir una cadena de texto en una matriz:
Sub Matriz_evaluate()
Range("a1:e1") = Evaluate("{1,2,3,4,5}")
End Sub
Bueno, seguro dentro de poco alguien nos dará una mejor explicación y más convincente, y creo que yo la agradeceré tanto como tú

.