Estoy tratando de hacer una tabla con varias columnas como fuente de área.
Básicamente, quiero seleccionar columnas específicas, donde me salto algunas de las columnas, y la combinación de todos ellos en un rango. He instalación de un bucle, donde puedo crear un rango, y anexar la dirección de una cadena y se separa con una coma. Estoy bastante seguro de que esta es la forma en que Excel lo quiere en formato.

PERO, no puedo parecer para crear una nueva gama de esta cadena.

Espero que alguien aquí me puede ayudar.

Me gustaría mucho para evitar tener que copiar las columnas en una hoja nueva, y acaban de marcar todos como un rango.

Tengo el siguiente código, para hacer la combinada rango:

'Loops for each number of sections
For Z = 1 To Sheet1.txtNoSections

    'Get gauge to use
    Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value
    'Sets varibel for distance from root
    Dist = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 3).Value
    'Get range to use
    Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, Section))
    RangeString = RangeString & ChartRange.AddressLocal
    If Z <> 1 Then
        RangeString = RangeString & ","
    End If

Next Z

Entonces he tratado de conseguir una nueva gama con algo como esto, pero no hubo suerte.

Dim ActualRange As Range
Set ActualRange = ActiveSheet.Range(RangeString)

Cuando la impresión de la RangeString, se parece a esto:
$S$2$V$6181$S$2:$X$6181,$S$2:$Z$6181,$S$2:$AB$6181,$S$2:$AD$6181,$S$2:$AF$6181,$S$2:$AH$6181,$S$2:$AJ$6181,$S$2:$AL$6181,$S$2:$AN$6181,$S$2:$AP$6181,$S$2:$AR$6181,$S$2:$AT$6181,$S$2:$AV$6181,$S$2:$AX$6181,$S$2:$AZ$6181,$S$2:$BB$6181,$S$2:$BD$6181,$S$2:$BF$6181,$S$2:$BH$6181,$S$2:$BJ$6181,$S$2:$BL$6181,$S$2:$BN$6181,$S$2:$BP$6181

Parece el mismo de la unión iba a hacer.

  • Te gustaría porbbably un mejor uso de la Unión método de concatenación de gama (que no funcionará si su rango termina con una coma ,)
  • Puedes publicar lo que RangeString parece que después de ejecutar el código? Usted puede poner un Debug.Print RangeString después de Next Z y comprobar su valor. edit: Buen punto Jmax 🙂
  • Por supuesto, mi cadena terminada en una coma. He cambiado, pero todavía se produce un error cuando intento configurar el rango.
  • falta una coma en $S$2$V$6181$S$2:$X$6181 También si usted considera $S$2:$X$6181,$S$2:$Z$6181 entonces no tiene sentido como S-Z se incluyen S-X y así sucesivamente para el resto
  • Creo que esto es lo que estamos tratando? RangeString debería tener este aspecto "S2:S6181,V2:V6181,X2:X6181,Z2:Z14,AB1:AB6181,........,BP2:BP6181"
  • Su RangeString falta una primera coma para delimitar el primer Rango. Se realmente debe utilizar las funciones estándar tales como la Unión
  • Sí, puedo ver que he un poco saltado la primera coma :). @JMax, estás en lo correcto. Que debo utilizar las funciones estándar. No sabía de la unión, pero voy a darle una oportunidad.
  • La unión era el camino a seguir :). Si usted hace una respuesta, te marcan.

InformationsquelleAutor Nicolai | 2012-03-28

2 Comentarios

  1. 7

    Como se discute en los comentarios de arriba, la mejor manera de manejar esto, es nativo de las funciones de VBA como Union.

    Usted puede encontrar varias referencias sobre cómo utilizar este:

    Sin embargo, por favor tenga en cuenta que puede responder propia pregunta (es incluso muy recomendable) y aceptar. De esta manera, usted puede compartir sus conocimientos con la comunidad y la forma en que ha resuelto el problema con su propio código.

    En mi humilde opinión, esto sería aún mejor que aceptar mi respuesta.

    • He respondido con el código que terminó. Yo realmente no quiero marcar mi propia respuesta, cuando se resolvió mi problema :).
    • +1 en Union 🙂
  2. 2

    Siguientes JMax orientación, la que terminó con la Unión.
    Este es el código que terminó.
    El primer tiempo a través del bucle, me puse el CombinedRange a mi rango real, y las posteriores ejecuciones, me unión.

    For Z = 1 To Sheet1.txtNoSections
    
        'Get gauge to use
        Section = Workbooks(ThisWorkbook.Name).Worksheets(1).Cells(26 + Z, 6).Value
        'Get range to use
        Set ChartRange = ActiveSheet.Range(ActiveCell, ActiveCell.Offset(rc, 0))
        Debug.Print "ChartRange(" & Z & "): " & ChartRange.Address
        If Z = 1 Then
            Set CombinedRange = ChartRange
        Else
            Set CombinedRange = Union(CombinedRange, ChartRange)
        End If
        ActiveCell.Offset(0, 5).Activate
    
    Next Z
    Debug.Print "Combined: " & CombinedRange.Address
    • +1 para la publicación de su solución 🙂

Dejar respuesta

Please enter your comment!
Please enter your name here