Excel - selección de rangos múltiples con Range()
David
-
David -
David -
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
-
-
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 :)