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

Function CheckFilters(r As Range) As String

Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
c = AWS.AutoFilter.Filters.Count

'go through each column and check for filters
For i = 1 To c Step 1
   If AWS.AutoFilter.Filters(i).On Then
        ActiveSheet.Columns(1).Hidden = True
        fstate = fstate & r(i).Value & ", "
   End If
Next i

'removes the last comma
fstate = Left(fstate, Len(fstate) - 2)

Else
ActiveSheet.Columns(1).Hidden = False
fstate = "Keine aktiven Filter"
End If

CheckFilters = fstate

End Function

Но ActiveSheet.Columns(1).Hidden = True кажется, игнорируется при вызове из функции. Когда я звоню из сабвуфера, это работает.

Может кто-нибудь мне помочь?

2 ответа2

1

Я нашел решение https://stackoverflow.com/a/12808974/3789751 .

У меня есть следующий саб

Sub HideUnHide()
Set AWS = ActiveSheet
fstate = ""

If AWS.FilterMode Then
    c = AWS.AutoFilter.Filters.Count

    For i = 1 To c Step 1
        If AWS.AutoFilter.Filters(i).On Then
            ActiveSheet.Columns(1).Hidden = True
        End If
    Next i

Else
    ActiveSheet.Columns(1).Hidden = False
End If
End Sub

И это вызывается из Worksheet_Calculate

Sub Worksheet_Calculate()
    Call Modul1.HideUnHide
End Sub
0

В VBA функции очень ненадежны, когда дело доходит до изменения рабочего листа (они отлично подходят для возврата значений). Вам лучше использовать саб вместо этого. Саб будет иметь два параметра; Диапазон ввода и строка вывода.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .