Cara menyimpan kisaran semua kolom tersembunyi di VBA untuk Excel

Aug 20 2020

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

romulax14 Aug 20 2020 at 20:28

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 mInitialRangemenjadi 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

Veegore Aug 20 2020 at 20:21

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