Cara menyimpan kisaran semua kolom tersembunyi di VBA untuk Excel
Di VBA untuk Excel, saya perlu menyimpan kisaran semua kolom di lembar yang disembunyikan, sayangnya saya tidak berhasil menemukan cara melakukan ini. Untuk menempatkan lebih banyak konteks, maksud saya adalah menyimpan rentang kolom tersembunyi dari lembar dalam variabel sementara, lalu memunculkan kolom, menyimpan buku kerja dan menyembunyikan kembali kolom yang disimpan, sehingga buku kerja selalu disimpan dengan semua kolom terlihat . Saya terjebak pada langkah "simpan kisaran kolom tersembunyi dari sheet dalam variabel sementara" . Terima kasih atas bantuan Anda.
Jawaban
Mungkin ada cara yang lebih efisien untuk mencapai apa yang Anda inginkan, tetapi salah satu caranya adalah dengan mengulang melalui kolom rentang Anda, dan jika kolom disembunyikan, tambahkan ke variabel rentang menggunakan Union
.
Misalnya, Anda ingin menyimpan semua kolom tersembunyi dari variabel mInitialRange
menjadi variabel mHiddenColumns
. Ini akan memberi Anda:
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
Edit: Peningkatan saran @BigBen berikut
Ini sebenarnya proses yang cukup sederhana. Di masa mendatang Anda benar-benar perlu berbagi dengan kami apa yang telah Anda lakukan untuk mencoba menyelesaikan masalah.
Saya berasumsi Anda cukup baru mengenal vba untuk menanyakan ini, silakan lihat komentar yang saya tinggalkan di kode di bawah ini.
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