У меня есть две таблицы Excel и существующий макрос, который копирует данные из одной из этих таблиц (таблица A) и вставляет их в нижнюю часть другой таблицы (таблица B).Я обнаружил, что если таблица A фильтруется, этот макрос не будет работать, поскольку он говорит, что не может копировать данные из отфильтрованной таблицы.Я хочу изменить существующий макрос так, чтобы он сначала копировал любые фильтры (любые, все или ни один из моих столбцов могут быть отфильтрованы при запуске макроса), затем удаляет их, затем выполняет мои ранее запрограммированные действия, а затем повторно применяет сохраненные фильтры, тогда достает мне пиво.Хотя я бы согласился сделать все возможное, чтобы принести мне пива.
Я предполагаю, что это распространенная проблема, поэтому я искал некоторый код, который мог бы поместить в начало и конец моего существующего кода.Я обнаружил следующее, но когда я добавляю его в существующий код и запускаю макрос, в начале строки я получаю сообщение об ошибке: "currentFiltRange = .Range.Address" Состояния ошибки ", переменная объекта или переменная блокане установлен".Я очень плохо знаком с VBA и не знаю, что не так со следующим кодом, который я скопировал.
Sub CopyThisWeekToRollupAndFilter()
Dim w As Worksheet
Dim filterArray()
Dim currentFiltRange As String
Dim col As Integer
Set w = ActiveWorkbook.Sheets("Weekly")
' Capture AutoFilter settings
With w.AutoFilter
currentFiltRange = .Range.Address
With .Filters
ReDim filterArray(1 To .Count, 1 To 3)
For f = 1 To .Count
With .Item(f)
If .On Then
filterArray(f, 1) = .Criteria1
If .Operator Then
filterArray(f, 2) = .Operator
filterArray(f, 3) = .Criteria2 'simply delete this line to make it work in Excel 2010
End If
End If
End With
Next f
End With
End With
'Remove AutoFilter
w.AutoFilterMode = False
' Add my existing code here'
' Restore Filter settings
For col = 1 To UBound(filterArray(), 1)
If Not IsEmpty(filterArray(col, 1)) Then
If filterArray(col, 2) Then
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1), _
Operator:=filterArray(col, 2), _
Criteria2:=filterArray(col, 3)
Else
w.Range(currentFiltRange).AutoFilter field:=col, _
Criteria1:=filterArray(col, 1)
End If
End If
Next col
End Sub