Excel - selección de rangos múltiples con Range()

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:
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

  1. Kuartz Mensajes publicados 852 Fecha de registro   Estado Miembro Última intervención   65
     
    Hola,

    No entiendo muy bien, una selección en Excel es ilimitada.

    ¿Podrían darnos el código exacto?

    Atentamente.
    1
    1. David
       
      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)
      0
    2. Kuartz Mensajes publicados 852 Fecha de registro   Estado Miembro Última intervención   65
       
      Una cadena de caracteres de una variable de tipo String puede contener aproximadamente 2^31 (teoría) caracteres. Es decir, un poco más de 2 mil millones. Dudo que venga de ahí. Debe haber otro problema en su código.

      ¿Dónde ha definido las zonas?
      0
    3. David
       
      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 &)
      0
    4. PlacageGranby Mensajes publicados 402 Estado Miembro 26
       
      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.


      Entonces
       Dim Cellules as range Set Cellules = Application.Union(Range("zone_1"), Range("zone_2"),Range("zone_3")) Cellules.select
      0
      1. David > PlacageGranby Mensajes publicados 402 Estado Miembro
         
        Gracias, eso confirma mi investigación
        0
  2. David
     
    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 :)
    1