Esto es por qué. Cuando se dice esto:
Dim startCell, iCell As Range
que creo que haya hecho esto:
Dim startCell As Range, iCell As Range
pero lo tienes muy hecho es la siguiente:
Dim startCell 'As Variant, by default
Dim iCell As Range
Este es un error clásico de VBA. La mayoría de los programadores de VBA lo han logrado, y es por eso que la mayoría de los programadores de VBA recurren a declarar solo una variable por declaración Dim
(es decir, una por línea). De lo contrario, es demasiado fácil cometer ese error y es difícil detectarlo después.
Así que con Dim startCell
ha declarado implícitamente su variable como tipo de Variante (equivalente a Dim startCell As Variant
).
Cuando a continuación, dice esto:
Set startCell = Cells(iCell.Row + 1, iCell.Column)
la variante adquiere el tipo de la cosa en el lado derecho de la asignación de referencia (rango). Sin embargo, cuando se dice esto:
startCell = Cells(iCell.Row + 1, iCell.Column)
sin la palabra clave Set
, no estamos asignando una referencia, pero un valor a la variable startCell
, que ahora adquiere el tipo del valor en el lado derecho. ¿Qué es ese tipo? Bueno, la propiedad predeterminada de un objeto Range es Value
, por lo que obtendrá el tipo de Cells(iCell.Row + 1, iCell.Column).Value
. Si esa celda contiene una cadena, obtendrás una cadena.
startCell no es del tipo de rango aquí ... – Qbik