Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA-工作表类的ShowAllData方法失败_Vba_Excel_Filter_Named Ranges - Fatal编程技术网

Excel VBA-工作表类的ShowAllData方法失败

Excel VBA-工作表类的ShowAllData方法失败,vba,excel,filter,named-ranges,Vba,Excel,Filter,Named Ranges,我已经自动将适当的记录输入到我用作数据库的表中,当该表被过滤时,输入就不起作用了 所以我在每次记录输入之前都要对数据库进行反过滤 Public Sub UnFilter_DB() Dim ActiveS As String, CurrScreenUpdate As Boolean CurrScreenUpdate = Application.ScreenUpdating Application.ScreenUpdating = False ActiveS = ActiveSheet.Name

我已经自动将适当的记录输入到我用作数据库的表中,当该表被过滤时,输入就不起作用了

所以我在每次记录输入之前都要对数据库进行反过滤

Public Sub UnFilter_DB()
Dim ActiveS As String, CurrScreenUpdate As Boolean

CurrScreenUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
ActiveS = ActiveSheet.Name

    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    Sheets("DB").ShowAllData
    DoEvents
    Sheets(ActiveS).Activate

Application.ScreenUpdating = CurrScreenUpdate
End Sub
但现在,它仍然停留在
表格(“DB”)上。显示所有数据,说明:

工作表类的ShowAllData方法失败

因为该表已未筛选

我不知道是否最好使用一个错误处理程序,比如下一步错误恢复时的
或者如何检测是否有过滤器


欢迎任何指点

如果使用
工作表.AutoFilter.ShowAllData
而不是
工作表.ShowAllData
则在未筛选任何内容时不会引发错误

这假设
Worksheet.AutoFilterMode=True
,否则您将得到一个关于
AutoFilter
不是对象的错误

Public Sub UnFilter_DB()
Dim ActiveS As String, CurrScreenUpdate As Boolean

CurrScreenUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
ActiveS = ActiveSheet.Name

    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    Sheets("DB").AutoFilter.ShowAllData
    DoEvents
    Sheets(ActiveS).Activate

Application.ScreenUpdating = CurrScreenUpdate
End Sub

如果使用
工作表.AutoFilter.ShowAllData
而不是
工作表.ShowAllData
则在未筛选任何内容时不会引发错误

这假设
Worksheet.AutoFilterMode=True
,否则您将得到一个关于
AutoFilter
不是对象的错误

Public Sub UnFilter_DB()
Dim ActiveS As String, CurrScreenUpdate As Boolean

CurrScreenUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
ActiveS = ActiveSheet.Name

    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    Sheets("DB").AutoFilter.ShowAllData
    DoEvents
    Sheets(ActiveS).Activate

Application.ScreenUpdating = CurrScreenUpdate
End Sub

以下是我的工作解决方案

Public Sub UnFilter_DB()
Dim ActiveS As String, CurrScreenUpdate As Boolean

CurrScreenUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
ActiveS = ActiveSheet.Name

    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    On Error Resume Next
    If Sheets("DB").FilterMode = True Then Sheets("DB").ShowAllData
    On Error GoTo 0

    DoEvents
    Sheets(ActiveS).Activate

Application.ScreenUpdating = CurrScreenUpdate
End Sub

我编写了一个效率更高的版本,可以方便地使用命名范围进行重用:

如何使用它:

Private Sub TEST_UnFilter_Table()
    Dim tB As Workbook, _
        Sh As Worksheet

    Set tB = ThisWorkbook
    Set Sh = tB.Sheets("DB")

    Call UnFilter_Table(Sh, "Db_Val")
End Sub
以及带有优化功能的正确功能(如果您有大桌子):


以下是我的工作解决方案

Public Sub UnFilter_DB()
Dim ActiveS As String, CurrScreenUpdate As Boolean

CurrScreenUpdate = Application.ScreenUpdating
Application.ScreenUpdating = False
ActiveS = ActiveSheet.Name

    Sheets("DB").Activate
    Sheets("DB").Range("A1").Activate
    On Error Resume Next
    If Sheets("DB").FilterMode = True Then Sheets("DB").ShowAllData
    On Error GoTo 0

    DoEvents
    Sheets(ActiveS).Activate

Application.ScreenUpdating = CurrScreenUpdate
End Sub

我编写了一个效率更高的版本,可以方便地使用命名范围进行重用:

如何使用它:

Private Sub TEST_UnFilter_Table()
    Dim tB As Workbook, _
        Sh As Worksheet

    Set tB = ThisWorkbook
    Set Sh = tB.Sheets("DB")

    Call UnFilter_Table(Sh, "Db_Val")
End Sub
以及带有优化功能的正确功能(如果您有大桌子):


你不是在循环中做这件事,所以没什么区别。我只想在错误恢复时添加
,然后在
ShowAllData
之前添加
,然后在
ShowAllData
@AnalystCave.com之后添加
错误恢复时转到0
:我尝试了,但有时仍然会出现错误。。。如果您感兴趣,请查看答案!看看你不是在循环中做这件事,所以没有什么区别。我只想在错误恢复时添加
,然后在
ShowAllData
之前添加
,然后在
ShowAllData
@AnalystCave.com之后添加
错误恢复时转到0
:我尝试了,但有时仍然会出现错误。。。如果您感兴趣,请查看答案!看一看太棒了!我在下一步继续出错时组合了
,在
AutoFilterMode
上测试,然后使用
AutoFilter
进行更正,现在它每次都运行,没有任何问题!:)伟大的我在下一步继续出错时组合了
,在
AutoFilterMode
上测试,然后使用
AutoFilter
进行更正,现在它每次都运行,没有任何问题!:)