Come salvare l'intervallo di tutte le colonne nascoste in VBA per Excel
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
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 mInitialRange
in 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
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