Excel - selección de rangos múltiples con Range()
Hola,
Necesito seleccionar numerosas áreas de una hoja para cambiar el color de fondo.
Para ello, he creado una macro donde selecciono rangos con nombre:
Pero si la cadena "zone1, ...zoneX" supera 255 caracteres, Excel muestra un error en tiempo de ejecución de la macro:
Mi pregunta: ¿existe alguna forma para que Range maneje una cadena de más de 255 caracteres de manera que haga una sola selección? o ¿estoy obligado a hacerlo varias veces y por lo tanto recorrer varias selecciones?
Configuración: Windows 7 / Chrome 45.0.2454.101
Necesito seleccionar numerosas áreas de una hoja para cambiar el color de fondo.
Para ello, he creado una macro donde selecciono rangos con nombre:
Range("zone1, zone2, ... zoneX").Select Pero si la cadena "zone1, ...zoneX" supera 255 caracteres, Excel muestra un error en tiempo de ejecución de la macro:
error 1004 : la method 'range' del objeto '_global' ha fallado
Mi pregunta: ¿existe alguna forma para que Range maneje una cadena de más de 255 caracteres de manera que haga una sola selección? o ¿estoy obligado a hacerlo varias veces y por lo tanto recorrer varias selecciones?
Configuración: Windows 7 / Chrome 45.0.2454.101
2 respuestas
-
Hola,
No entiendo muy bien, una selección en Excel es ilimitada.
¿Podrían darnos el código exacto?
Atentamente.-
El código es bastante simple.
eso, funciona (la cadena cellules tiene 250 caracteres de longitud) :Dim cellules as String
cellules = "zone_1, zone_2, zone_3, zone_4, zone_5, zone_6, zone_7, zone_8, zone_9, zone_10, zone_11, zone_12, zone_13, zone_14, zone_15, zone_16, zone_17, zone_18, zone_19, zone_20, zone_21, zone_22, zone_23, zone_24, zone_25, zone_26, zone_27, zone_28, zone_29"
Range(cellules).Select
eso, no funciona (la cadena cellules tiene 259 caracteres de longitud) :Dim cellules as String
cellules = "zone_1, zone_2, zone_3, zone_4, zone_5, zone_6, zone_7, zone_8, zone_9, zone_10, zone_11, zone_12, zone_13, zone_14, zone_15, zone_16, zone_17, zone_18, zone_19, zone_20, zone_21, zone_22, zone_23, zone_24, zone_25, zone_26, zone_27, zone_28, zone_29, zone_30"
Range(cellules).Select
J'aurais pu changer le nom des zones en z_1, ... , z_30 mais c'est long
J'ai contourné le problème en faisant 2 sélections au lieu d'une (et donc en lançant 2 traitements au lieu d'un) -
-
Las zonas están definidas en una hoja clásica, a mano, y no hay ningún error de nombres (lo he verificado, varias veces).
La definición de una cadena de más de 255 c no plantea ningún problema (ver el segundo ejemplo). es únicamente el hecho de usar range(celdas) con celdas > 255 c lo que falla, ya sea pasando por una cadena o directamente (range("zone1 ... zone30")).
(PD: también intenté cortar la cadena concatenándola con &) -
Hola,
Hice una pequeña búsqueda en Google para ver si se pueden fusionar zonas.
No se encuentra nada al respecto, pero luego busqué si se podían fusionar objetos de rango. y voilà
https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2003/aa213609(v=office.11)?redirectedfrom=MSDN
Encontré el método Union.
EntoncesDim Cellules as range Set Cellules = Application.Union(Range("zone_1"), Range("zone_2"),Range("zone_3")) Cellules.select -
@PlacageGranbyGracias, eso confirma mi investigación
-
-
Hola,
Creo haber encontrado: parece que hay un límite de 255 caracteres para las cadenas usadas como parámetro de un método (pero no para los sub ...) : para ejemplos, realizar una búsqueda en "excel vba 255 character limit parameter".
La solución es usar Union(Range("zona1")[, Range("zona2"...)]) para construir un Range como en mi caso.
Gracias a Kuartz :)