728x90
AutoFilter를 사용중인 영역에서 Macro작업을 할 필요가 있을 때에
이미 설정된 Filter 정보를 저장했다가 Macro 작업 이후 다시 동일한 설정을 할 필요가 있을 때
아래와 같이 Backup 및 Restore를 할 수 있습니다.
먼저 필터가 적용중인 주소를 저장할 변수를 설정합니다.
Private cFilteredAddress As Variant '필터된 영역의 주소 저장용
필터를 백업할 때는 각 열마다 필터된 첫번째 내용(Criteria1), 연산자(Operator), 두번째 내용(Criteria2)를 배열을 이용하여 저장해 둡니다.
Public Function BackUpFilters(sh As Worksheet)
Dim FilterArray As Variant
Dim col As Integer, f As Integer
If IsMissing(sh) Or sh Is Nothing Then Set sh = ActiveSheet
With sh.AutoFilter
On Error Resume Next
cFilteredAddress = .Range.Address
On Error GoTo 0
If cFilteredAddress = vbNullString Then Exit Function
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
On Error Resume Next
FilterArray(f, 3) = .Criteria2
On Error GoTo 0
End If
End If
End With
Next f
End With
End With
BackUpFilters = FilterArray
End Function
Macro작업을 완료한 이후에 백업된 필터 배열을 읽어서 다시 설정해 주도록 합니다.
Private Sub ReStoreFilters(sh As Worksheet, FilterArray As Variant)
Dim col As Integer, f As Integer
If IsMissing(sh) Or sh Is Nothing Then Set sh = ActiveSheet
For col = 1 To UBound(FilterArray, 1)
If Not IsEmpty(FilterArray(col, 1)) Then
If FilterArray(col, 2) Then
sh.Range(cFilteredAddress).AutoFilter field:=col, _
Criteria1:=FilterArray(col, 1), _
Operator:=FilterArray(col, 2), _
Criteria2:=FilterArray(col, 3)
Else
sh.Range(cFilteredAddress).AutoFilter field:=col, _
Criteria1:=FilterArray(col, 1)
End If
End If
Next col
FilterArray = Empty
End Sub
이 매크로는 보이는 셀에 붙여넣기 할 때에 사용되었습니다.
728x90
'Excel - VBA' 카테고리의 다른 글
VBA CreateObject("htmlfile")을 이용한 URL Encode 및 HTML Entity 제거 (0) | 2023.07.10 |
---|---|
VBA로 인터넷 연결을 확인하기 (0) | 2023.07.10 |
길이 0인 문자열 제거하기 (0) | 2023.06.28 |
VBA 배열(Array) 관련 유용한 함수 (0) | 2023.05.22 |
샘플링 검사 (KS Q ISO 2859-1) 다회 샘플링 방식 지원 함수 (0) | 2023.05.20 |