programing

워크시트 클래스의 ShowAllData 메서드가 실패했습니다.

codeshow 2023. 4. 17. 22:08
반응형

워크시트 클래스의 ShowAllData 메서드가 실패했습니다.

자동 필터가 이미 켜져 있으면 VBA 스크립트가 작동하지 않습니다.왜 그런 줄 알아?

    wbk.Activate
    Set Criteria = Sheets("Sheet1").Cells(i, 1)

    Set rng = Sheets("Sheet1").Range(Cells(i, 2), Cells(i, 4))

    wb.Activate
    If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData 'remove autofilter, but it crashes on this line

    Selection.AutoFilter

    Range("$A$1:$BM$204").AutoFilter Field:=2, Criteria1:=Criteria.Value

    rng.Copy

    Range("$BC$2:$BE$204").SpecialCells(xlCellTypeVisible).PasteSpecial

대단히 고맙습니다

AutoFilterMode는 실제로 특정 열에 적용된 필터가 있는지 여부에 관계없이 활성화되면 True가 됩니다., 「 」ActiveSheet.ShowAllData는 계속 실행되어 오류가 발생합니다(실제 필터링이 없기 때문입니다).

같은 문제가 있어서, 그 문제를 해결했습니다.

If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
  ActiveSheet.ShowAllData
End If

따라서 실제 적용된 필터가 없지만 AutoFilterMode가 켜져 있는 경우 ShowAllData가 실행되지 않을 수 있습니다.

캐치 ★★★★★★★★★★★★★★★★★★★」Or ActiveSheet.FilterMode.

이를 피하는 간단한 방법은 워크시트 방법 ShowAllData를 사용하지 않는 것입니다.

필터가 활성화되어 있지만 필터가 설정되어 있지 않은 경우 오류를 발생시키지 않는 동일한 ShowAllData 메서드가 자동 필터에 있습니다.

If ActiveSheet.AutoFilterMode Then ActiveSheet.AutoFilter.ShowAllData

「」ShowAllData method of Worksheet class failed일반적으로 적용된 필터가 없을 때 필터를 제거하려고 할 때 발생합니다.

건 잘 요.AutoFilter또는 적용된 필터만 제거해도 됩니다.하다, 하다, 하다, 하다

두려면AutoFilter 개요:

If ActiveSheet.AutoFilterMode Or ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
End If

의 이면에 는, 이 에는, 「아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아AutoFilter또는 필터가 적용되었는지 여부(고급 필터도 제거됩니다)를 확인합니다.

를 하다, 「」를 완전히 삭제해 주세요.AutoFilter:

ActiveSheet.AutoFilterMode = False

경우 '비활성화', '비활성화', '비활성화'를 .AutoFilter★★★★★★★★★★★★★★★★★★.

저도 방금 같은 문제를 겪었어요.시행착오를 겪은 후 필터 영역 오른쪽에서 선택한 레코드의 수가 0일 경우 ShowAllData는 실패합니다.

좀 더 많은 맥락이 아마도 관련이 있을 것이다.나는 여러 장의 시트를 가지고 있는데, 각각 필터가 달려 있다.모든 시트에 표준 필터를 설치하고 싶기 때문에 이렇게 VBA를 사용합니다.

Sheets("Server").Select
col = Range("1:1").Find("In Selected SLA").Column
ActiveSheet.ListObjects("Srv").Range.AutoFilter Field:=col, Criteria1:="TRUE"

이 코드는 "In Selected SLA"라는 제목의 열 필터를 조정하고 다른 모든 필터는 변경하지 않습니다.이로 인해 0개의 레코드를 표시하는 필터를 만들 수 있다는 안타까운 부작용이 있습니다.이것은 UI만으로는 할 수 없습니다.

이러한 상황을 피하기 위해 위의 필터링을 적용하기 전에 모든 필터를 리셋하고 싶습니다.리셋 코드는 다음과 같습니다.

Sheets("Server").Select
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

선택한 셀을 이동하지 않은 방법을 확인합니다.선택한 항목이 오른쪽에 있는 경우 필터가 제거되지 않으므로 필터 코드가 0 행 필터를 구축합니다.두 번째로 코드가 실행되면(제로 행 필터로) ShowAllData가 실패합니다.

회피책은 간단합니다.ShowAllData를 호출하기 전에 필터 컬럼 내에서 선택 항목을 이동합니다.

Application.Goto (Sheets("Server").Range("A1"))
If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData

Excel 버전 14.0.7128.199(32비트) = Office 2010에서 사용되었습니다.

이거면 될 거야.이를 정의하고 필요할 때 호출합니다(클리어 버튼을 만드는 경우 버튼 로직에 적합합니다).

Sub ResetFilters()
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub

저도 같은 문제입니다.제가 생각하기에는 그 이유는...

1) 액티브 셀이 테이블 내에 있으면 "Active Sheet"Show All Data를 사용할 수 있습니다.2) 액티브 셀이 테이블 내에 없을 경우 "Active Sheet"를 선택합니다.Show All Data"가 작동하지 않습니다.이 코드 ActiveSheet를 사용합니다.리스트 오브젝트("Srv")Range.AutoFilter 필드:=1은 필터를 지울 수 있습니다.

아래에 이 코드를 추가합니다.이 필터를 끄면 필터가 해제됩니다.필터 없이 두 번째로 다시 켜집니다.

우아하진 않지만 내 목적에 부합했어

ActiveSheet.ListObjects("MyTable").Range.AutoFilter

'then call it again?
ActiveSheet.ListObjects("MyTable").Range.AutoFilter

언급URL : https://stackoverflow.com/questions/18226045/showalldata-method-of-worksheet-class-failed

반응형