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
进行更正,现在它每次都运行,没有任何问题!:)