Come salvare l'intervallo di tutte le colonne nascoste in VBA per Excel

Aug 20 2020

In VBA per Excel, ho bisogno di salvare l'intervallo di tutte le colonne del foglio che sono nascoste, purtroppo non riesco a scoprire come farlo. Per mettere più contesto, il mio intento è salvare l'intervallo di colonne nascoste del foglio in una variabile temporanea, quindi mostrare le colonne, salvare la cartella di lavoro e nascondere nuovamente le colonne salvate, in modo che la cartella di lavoro venga sempre salvata con tutte le colonne visibili . Sono bloccato sul passaggio "salva l'intervallo di colonne nascoste del foglio in una variabile temporanea" . Grazie per il tuo aiuto.

Risposte

romulax14 Aug 20 2020 at 20:28

Potrebbe esserci un modo più efficiente per ottenere ciò che desideri, ma un modo sarebbe quello di scorrere le colonne del tuo intervallo e, se la colonna è nascosta, aggiungila a una variabile di intervallo utilizzando Union.
Ad esempio, supponiamo di voler archiviare tutte le colonne nascoste da una variabile mInitialRangein una variabile mHiddenColumns. Questo ti darebbe:

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

Modifica: migliorato seguendo i consigli di @BigBen

Veegore Aug 20 2020 at 20:21

In realtà è un processo piuttosto semplice. In futuro hai davvero bisogno di condividere con noi quello che hai fatto per cercare di risolvere il problema.

Presumo che tu sia abbastanza nuovo su vba per chiederlo, per favore vedi i commenti che ho lasciato nel codice sottostante.

    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