Excel 2013 VBA Clear All Filters 매크로
오래된 매크로가 작동하지 않는 것 같습니다.VBA 매크로를 실행하도록 적절한 보안을 설정했지만 워크시트의 모든 필터를 클리어하기 위한 몇 가지 방법을 시도하면 컴파일 오류가 발생합니다.
제가 시도한 것은 다음과 같습니다.
Sub AutoFilter_Remove()
'This macro removes any filtering in order to display all of the data but it does not remove the filter arrows
ActiveSheet.ShowAllData
End Sub
시트에 필터가 있는 컬럼이 많기 때문에 사용자가 사용하기 쉽도록 모든 필터를 지울 수 있는 버튼이 있습니다.
이것을 시험해 보세요.
If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
필터가 현재 적용되지 않으면 ShowAllData가 오류를 발생시킵니다.이 조작은 유효합니다.
Sub ResetFilters()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
시트에 이미 필터가 붙어 있는 경우는, 다음의 순서에 따릅니다.
Sub Macro1()
Cells.AutoFilter
End Sub
제거합니다.
테이블의 경우는, 다음의 순서에 따라서 온/오프 여부를 확인합니다.
If wrkSheetCodeName.ListObjects("TableName").ShowAutoFilter Then
wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
End if
다시 켜려면:
wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
이거 괜찮네.
If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
훌륭합니다. 제가 찾은 유일한 답변은 저의 특별한 욕구를 충족시키는 것입니다.참고마워요!
화면이 깜박이지 않도록 약간의 추가만 하면 [워크북의 모든 시트에 동일한 비밀번호가 할당됩니다]를 반복하면서 각 시트에 비밀번호가 삭제되었다가 다시 적용됩니다.당신의 투고 정신에 따라, 다른 누군가를 돕기 위해 이 말을 덧붙입니다.
Sub ClearFilters()
Application.ScreenUpdating = False
On Error Resume Next
For Each wrksheet In ActiveWorkbook.Worksheets
'Change the password to whatever is required
wrksheet.Unprotect Password:="Albuterol1"
wrksheet.ShowAllData 'This works for filtered data not in a table
For Each lstobj In wrksheet.ListObjects
If lstobj.ShowAutoFilter Then
lstobj.Range.AutoFilter 'Clear filters from a table
lstobj.Range.AutoFilter 'Add the filters back to the table
End If
'Change the password to whatever is required
wrksheet.Protect Password:="Albuterol1", _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowFiltering:=True
Next 'Check next worksheet in the workbook
Next
Application.ScreenUpdating = True
End Sub
비교적 오래된 포스트라는 걸 알고 있고 네크로맨서가 되는 걸 별로 좋아하지 않아하지만 같은 문제가 있어서 이 스레드에서 몇 가지 옵션을 시도했지만 성공하지 못했기 때문에 몇 가지 답을 조합하여 동작하는 매크로를 얻었습니다.
이것이 다른 사람에게 도움이 되기를 바랍니다.
Sub ResetFilters()
On Error Resume Next
For Each wrksheet In ActiveWorkbook.Worksheets
wrksheet.ShowAllData 'This works for filtered data not in a table
For Each lstobj In wrksheet.ListObjects
If lstobj.ShowAutoFilter Then
lstobj.Range.AutoFilter 'Clear filters from a table
lstobj.Range.AutoFilter 'Add the filters back to the table
End If
Next 'Check next worksheet in the workbook
Next
End Sub
Excel에는 두 가지 유형의 필터가 있습니다.
- 자동 필터
- 고급 필터
자동 필터 기능을 사용하면, 이러한 작은 드롭 다운 버튼을 사용해 Excel 인터페이스에서 필터링 할 수 있습니다.고급 필터 기능을 사용하면 기준 범위를 사용하여 필터링할 수 있습니다.
ShowAll 메서드는 모든 행을 표시하지만 이러한 드롭다운버튼을 삭제하지는 않습니다.이러한 버튼을 제거하려면 워크시트의 AutoFilterMode 속성을 FALSE로 설정해야 합니다.
필터를 제거하기 위해 자주 사용하는 Sub는 다음과 같습니다.
Sub RemoveFilters(ByRef WhichSheet As Worksheet)
If WhichSheet.FilterMode Then WhichSheet.ShowAllData
If WhichSheet.AutoFilterMode Then WhichSheet.AutoFilterMode = False
End Sub
모든 데이터가 표시되며 드롭다운버튼이 삭제됩니다.여러 시트 또는 워크북에서 데이터를 스태킹(복사 및 붙여넣기)할 때 유용합니다.이게 도움이 됐으면 좋겠다.
저는 이 회피책이 꽤 효과적이라는 것을 알았습니다.기본적으로 테이블에서 자동 필터가 삭제되었다가 다시 적용되므로 이전 필터가 모두 삭제됩니다.지금까지의 경험으로 볼 때, 여기에 기재되어 있는 다른 방법에서는, 에러 처리가 필요하게 되는 일은 없습니다.
Set myTable = YOUR_SHEET.ListObjects("YourTableName")
myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
이것도 동작합니다.
If ActiveSheet.FilterMode Then cells.AutoFilter
나는 보통 이 코드를 사용한다.
Sub AutoFilter_Remove()
Sheet1.AutoFilterMode = False 'Change Sheet1 to the relevant sheet
'Alternatively: Worksheets("[Your Sheet Name]").AutoFilterMode = False
End Sub
그러면 먼저 AutoFilterMode가 설정되어 있는지(필터링 가능) 확인한 다음 FilterMode가 켜져 있는지(필터링 중) 확인한 후 필터링을 끕니다.
오류, 즉 보호 - 기타 답변 확인
컨텍스트가 추가되었습니다(스크립트가 시트 위에 루프되어 CSV로 저장되므로 필터를 삭제해야 합니다.다만, AutoFilterMode가 설정되어 있는 경우는, 온인 채로 합니다).
For Each WS In ActiveWorkbook.Worksheets
Select Case WS.Name
Case "01", "02", "03", "04", "05"
With WS
If WS.AutoFilterMode Then
If WS.FilterMode Then WS.ShowAllData
End If
' Processing data
End With
Case Else
' Nothing to see here
End Select
Next
다음과 같은 방법을 사용해 보십시오.
Sub ClearDataFilters()
'Clears filters on the activesheet. Will not clear filters if the sheet is protected.
On Error GoTo Protection
If ActiveWorkbook.ActiveSheet.FilterMode Or _
ActiveWorkbook.ActiveSheet.AutoFilterMode Then _
ActiveWorkbook.ActiveSheet.ShowAllData
Exit Sub
Protection:
If Err.Number = 1004 And Err.Description = _
"ShowAllData method of Worksheet class failed" Then
MsgBox "Unable to Clear Filters. This could be due to protection on the sheet.", _
vbInformation
End If
End Sub
.FilterMode
워크시트가 필터 모드일 경우 true를 반환합니다.(자세한 것에 대하여는, 여기를 참조해 주세요).
자세한 내용은 여기를 참조해 주세요..AutoFilter
.
그리고 마지막으로, 이것은 다음 정보에 대해 더 많은 정보를 제공합니다..ShowAllData
★★★★★★ 。
여기 제가 사용하는 원라이너가 있습니다.자동 필터를 체크하고, 검출되면 삭제합니다.
일부 응답과 달리 이 코드는 처음부터 자동 필터링되지 않은 워크시트에 사용되는 경우 자동 필터링을 생성하지 않습니다.
If Cells.AutoFilter Then Cells.AutoFilter
필요한 것은 다음과 같습니다.
ActiveSheet.AutoFilter.ShowAllData
이유는 무엇입니까? 워크시트와 마찬가지로 AutoFilter에도 ShowAllData 메서드가 있지만 활성 필터 없이 자동 필터를 사용하도록 설정한 경우에도 오류가 발생하지 않습니다.
저는 이게 제일 좋아요.
파일을 저장하고 닫기 전에 보통 다음을 사용합니다.
Sub remove_filters
ActiveSheet.AutofilterMode = False
End Sub
필터 헤더를 활성화하고 showaldata를 실행하면 100% 작동합니다.예를 들어 다음과 같습니다.
Range("A1:Z1").Activate
ActiveSheet.ShowAllData
Range("R1:Y1").Activate
ActiveSheet.ShowAllData
A1:Z1 및 R1에 필드 헤더가 있는 경우:각각 Y1 입니다.
.filtermode
가 반환됩니다.
Dim returnValue As Boolean
returnValue = worksheet1.FilterMode
if returnValue Then
worksheet1.ShowAllData
End If
이것을 시험해 보세요.
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In ActiveWorkbook.Worksheets
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next ws
End Sub
이 코드는 모든 필터를 지우고 정렬을 제거합니다.
출처: 워크북의 각 테이블에 대한 필터 삭제(VBA)
여기 필터를 수정하기 위한 코드가 있습니다.예를 들어 시트에서 필터를 켜면 열을 추가한 다음 새 열도 필터로 덮이도록 할 수 있습니다.
Private Sub AddOrFixFilters()
ActiveSheet.UsedRange.Select
' turn off filters if on, which forces a reset in case some columns weren't covered by the filter
If ActiveSheet.AutoFilterMode Then
Selection.AutoFilter
End If
' turn filters back on, auto-calculating the new columns to filter
Selection.AutoFilter
End Sub
이 실마리는 아주 오래된 것이지만, 나는 어떤 대답도 마음에 들지 않았고, 결국 나만의 글을 쓰게 되었다.지금 공유합니다.
우선은 다음과 같습니다.
Sub ResetWSFilters(ws as worksheet)
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This gets rid of "normal" filters - but tables will remain filtered
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
'And this gets rid of table filters
End Sub
이 매크로에 특정 워크시트를 입력하면 해당 워크시트가 필터링되지 않습니다.워크시트가 하나만 명확한지 확인해야 할 경우 유용합니다.그러나 나는 보통 워크북 전체를 하고 싶다.
Sub ResetAllWBFilters(wb as workbook)
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub
예를 들어 처리해야 할 워크북을 열고 필터를 리셋한 후 작업할 수 있습니다.
Sub ExampleOpen()
Set TestingWorkBook = Workbooks.Open("C:\Intel\......") 'The .open is assuming you need to open the workbook in question - different procedure if it's already open
Call ResetAllWBFilters(TestingWorkBook)
End Sub
가장 많이 사용하는 것:모듈이 저장된 워크북의 모든 필터 재설정:
Sub ResetFilters()
Dim ws As Worksheet
Dim wb As Workbook
Dim listObj As ListObject
Set wb = ThisWorkbook
'Set wb = ActiveWorkbook
'This is if you place the macro in your personal wb to be able to reset the filters on any wb you're currently working on. Remove the set wb = thisworkbook if that's what you need
For Each ws In wb.Worksheets
If ws.FilterMode Then
ws.ShowAllData
Else
End If
'This removes "normal" filters in the workbook - however, it doesn't remove table filters
For Each listObj In ws.ListObjects
If listObj.ShowHeaders Then
listObj.AutoFilter.ShowAllData
listObj.Sort.SortFields.Clear
End If
Next listObj
Next
'And this removes table filters. You need both aspects to make it work.
End Sub
필터가 있는 경우에만 지워지고 필터가 없는 경우에도 오류가 발생하지 않습니다.ActiveSheet의 경우.AutoFilterMode, ActiveSheet 순으로 선택합니다.열("A")자동 필터
멀티 테이블과 레인지 시트에 이 방법을 사용하고 있습니다.
Sub RemoveFilters(Ws As Worksheet)
Dim LO As ListObject
On Error Resume Next
Ws.ShowAllData
For Each LO In Ws.ListObjects
LO.ShowAutoFilter = True
LO.AutoFilter.ShowAllData
Next
Ws.ShowAllData
End Sub
와우, 나중에 로그인하면 첫 번째 줄의 일부를 제외하고 모두 삭제되었습니다.내 잘못이다.하지만, 이것은 간단할 것이다.
두 테스트 모두 Sheet1 Filter의 A1 및 A5에 공백으로만 텍스트를 입력합니다.A5에서 텍스트 입력 테스트 중 하나를 실행합니다. 필터링을 시도해 보십시오!
Sub SubsequentFilterFails()
With Sheet1 'assumes code name is still Sheet1
.ShowAllData 'assumes a filter has been applied
.Range(.Cells(2, 1), .Cells(7, 1)).EntireRow.Delete
End With
End Sub
Sub SubsequentFilterWorks()
With Sheet1
.Cells.AutoFilter
.Range(.Cells(2, 1), .Cells(7, 1)).EntireRow.Delete
.Cells.AutoFilter
End With
End Sub
따라서 워크시트를 클리닝하기 위해 필터를 클리어하는 경우.Cells.AutoFilter 가 사용됩니다.
AutoFilter 열을 루프합니다. 열이 활성화(on)된 후 열 필터를 재설정하면 루프 후에 새 기준을 삽입할 수 있습니다.이 코드는 AutoFilter 배너를 삭제하지 않습니다.
Dim iCol as Long
Dim ws as Worksheet
...
For iCol = 1 To ws.AutoFilter.Filters.count
If ws.AutoFilter.Filters(iCol).On Then ws.AutoFilter.Range.AutoFilter Field:=iCol
Next
...
ws.AutoFilter.Range.AutoFilter Field:=4, Criteria1:="AABBCC"
AutoFilterMode를 부울로 사용합니다.
If Worksheets("Sheet1").AutoFilterMode Then Selection.AutoFilter
사용하기 전에 먼저 테이블의 범위를 선택해야 합니다.ActiveSheet.ShowAllData
언급URL : https://stackoverflow.com/questions/21761027/excel-2013-vba-clear-all-filters-macro
'programing' 카테고리의 다른 글
Azure Table 스토리지에 유지되는 속성을 제외하려면 어떻게 해야 합니까? (0) | 2023.04.21 |
---|---|
SSIS Excel 데이터 원본 - 열 데이터 형식을 재정의할 수 있습니까? (0) | 2023.04.21 |
UIView 서브클래스를 위한 적절한 프랙티스 (0) | 2023.04.21 |
변수와 함께 Bash를 사용하여 여러 줄 문자열을 쓰는 방법은 무엇입니까? (0) | 2023.04.21 |
WPF 명령줄 인수, 스마트한 방법? (0) | 2023.04.21 |