簡體   English   中英

Excel VBA篩選器重置在“立即”窗口中有效,但在“ Sub BeforeClose”中無效

[英]Excel VBA filter reset works in Immediate window but not in Sub BeforeClose

在工作簿關閉之前,我編寫了以下代碼來重置所有驗證和/或自動過濾功能:

Sub Workbook_BeforeClose(Cancel As Boolean)

    On Error Resume Next
    Worksheets("Query").Cells.SpecialCells(xlCellTypeAllValidation).Clear

    On Error Resume Next
    Worksheets("Table").Cells.SpecialCells(xlCellTypeAllValidation).Clear

    On Error Resume Next
    Worksheets("Table").ShowAllData

    On Error Resume Next
    Worksheets("Query").Activate

    ThisWorkbook.Save

End Sub

但是,“ Worksheets(“ Table”)。ShowAllData”似乎僅在立即窗口中起作用。 當我在過濾表格“表格”上的表格后關閉程序並再次打開它時,我得到

We found a problem with some content in "Book1.xlsm". Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes.

最初沒有發生這種情況,似乎沒有原因。 為什么篩選器重置在立即窗口中起作用,但在我的子例程中卻不起作用? 我該如何解決?

永遠不要使用On Error Resume Next否則您將永遠學不到任何東西

您需要先檢查一下是否Autofilter器,因為這是一個切換...

  If ActiveSheet.FilterMode Then
    ActiveSheet.ShowAllData
  End If

要么

  If ActiveSheet.FilterMode Then
    ActiveSheet.AutoFilterMode = False
  End If

不需要有太多On Error Resume Next OERN。 只有一個會做。

我試過了

Sub Workbook_BeforeClose(Cancel As Boolean)
    On Error Resume Next
    Worksheets("Query").Cells.SpecialCells(xlCellTypeAllValidation).Clear
    Worksheets("Table").Cells.SpecialCells(xlCellTypeAllValidation).Clear
    On Error GoTo 0

    If Worksheets("Table").FilterMode Then Worksheets("Table").ShowAllData

    Worksheets("Query").Activate

    ThisWorkbook.Save
    DoEvents
End Sub

而且我沒有得到任何錯誤。 試試吧。

我們發現“ Book1.xlsm”中的某些內容存在問題。 您是否希望我們盡力恢復原狀? 如果您信任此工作簿的來源,請單擊“是”。

如果仍然出現錯誤,則不是因為這段代碼。 您需要查看有關已修復內容的報告。 我覺得您的DataValidation列表之一導致了此問題。 就像我說的,檢查維修報告。 如果報告說Datavalidation已修復,那么您需要檢查一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM