Cómo guardar el rango de todas las columnas ocultas en VBA para Excel

Aug 20 2020

En VBA para Excel, necesito guardar el rango de todas las columnas en la hoja que están ocultas, desafortunadamente no logro averiguar cómo hacerlo. Para poner más contexto, mi intención es guardar el rango de columnas ocultas de la hoja en una variable temporal, luego mostrar las columnas, guardar el libro de trabajo y volver a ocultar las columnas guardadas, para que el libro de trabajo siempre se guarde con todas las columnas visibles. . Estoy atascado en el paso "guardar el rango de columnas ocultas de la hoja en una variable temporal" . Gracias por tu ayuda.

Respuestas

romulax14 Aug 20 2020 at 20:28

Puede haber una forma más eficiente de lograr lo que desea, pero una forma sería recorrer las columnas de su rango, y si la columna está oculta, agréguela a una variable de rango usando Union.
Por ejemplo, supongamos que desea almacenar todas las columnas ocultas de una variable mInitialRangeen una variable mHiddenColumns. Esto te daría:

Dim mInitialRange As Range, mHiddenColumns As Range
For Each mcolumn In mInitialRange.Columns
    If mcolumn.Hidden Then
        If mHiddenColumns Is Nothing Then
            Set mHiddenColumns = mcolumn
        Else
            Set mHiddenColumns = Union(mHiddenColumns, mcolumn)
        End If
    End If
Next mcolumn

Editar: mejorado siguiendo los consejos de @BigBen

Veegore Aug 20 2020 at 20:21

En realidad es un proceso bastante simple. En el futuro, realmente necesita compartir con nosotros lo que ha hecho para tratar de resolver el problema.

Supongo que es bastante nuevo en vba para preguntar esto, consulte los comentarios que dejé en el siguiente código.

    Sub runme()
Dim HiddenColumns(), size As Integer
    'Using a seperate counter, loop through your range of data.
    'If you find a hidden column redim our hidden columns array and add that row's number to the array
    'then increase our seperate counter
    size = 0
    For i = 1 To 12 'Change this to your range
        If Columns(i).Hidden = True Then
            ReDim Preserve HiddenColumns(size) 'Redim and preserve the array to our "size" variable (which will always be one more than the current array size
            HiddenColumns(size) = i
            size = size + 1
        End If
    Next i

    'Now we want to loop through our array and flip all the columns that were hidden to shown
    'You can add this to the original array building loop to be more efficent I'm just breaking it up here
    'for demonstration purposes
    For i = 0 To size - 1
        Worksheets("Sheet1").Columns(HiddenColumns(i)).Hidden = False
    Next i

    'Call your workbook saving here
    ThisWorkbook.Save

    'Now loop through our array of columns once more to rehide them
    For i = 0 To size - 1
        Worksheets("sheet1").Columns(HiddenColumns(i)).Hidden = True
    Next i
End Sub