Как сохранить диапазон всех скрытых столбцов в VBA для Excel

#excel #vba #range #hidden

#excel #vba #диапазон #скрытый

Вопрос:

В VBA для Excel мне нужно сохранить диапазон всех скрытых столбцов на листе, к сожалению, мне не удается выяснить, как это сделать. Чтобы добавить больше контекста, я намереваюсь сохранить диапазон скрытых столбцов листа во временной переменной, затем отобразить столбцы, сохранить книгу и повторно скрыть сохраненные столбцы, чтобы книга всегда сохранялась со всеми видимыми столбцами. Я застрял на шаге «сохранить диапазон скрытых столбцов листа во временной переменной». Спасибо за вашу помощь.

Комментарии:

1. Привет, сначала поделитесь с нами любым кодом, который вы пробовали. Далее я бы рассмотрел это как 3 шага. 1. Перечислите все заголовки. 2. Определите, видны ли они 3. Если они не видны, добавьте их в массив. Затем последним шагом является создание подраздела, который фактически раскрывает / скрывает массив заголовков.

2. @Отмечает. Здесь мне нужно получить диапазон скрытых столбцов. Затем можно запустить что-то вроде mRange.EntireColumn.Hidden = False

Ответ №1:

Возможно, существует более эффективный способ достичь желаемого, но одним из способов было бы перебирать столбцы вашего диапазона, и если столбец скрыт, добавьте его в переменную диапазона с помощью Union .
Например, предположим, что вы хотите сохранить все скрытые столбцы из переменной mInitialRange в переменную mHiddenColumns . Это дало бы вам :

 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
  

Редактировать: Улучшено после советов @BigBen

Комментарии:

1. На самом деле мне было интересно, можно ли избежать циклов с помощью атрибутов листа или методов, которые я, возможно, пропустил. Спасибо за эту функцию, которая отвечает на мой вопрос, возвращая диапазон скрытых столбцов.

Ответ №2:

На самом деле это довольно простой процесс. В будущем вам действительно нужно поделиться с нами тем, что вы сделали, чтобы попытаться решить проблему.

Я предполагаю, что вы достаточно новичок в vba, чтобы задавать этот вопрос, пожалуйста, ознакомьтесь с комментариями, которые я оставил в приведенном ниже коде.

     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
  

Комментарии:

1. Это может сработать, однако я ищу функцию, возвращающую диапазон.

2. Ах, я неправильно понял, каков был конечный результат