Excel VBA清除宏不工作,除非在筛选条件表上

Excel VBA清除宏不工作,除非在筛选条件表上,excel,vba,userform,Excel,Vba,Userform,我构建了一个用于进行简单筛选搜索的用户表单。我可以在选择任何工作表时打开表单并进行筛选。但是,当我使用userform中的clear按钮但不在筛选条件工作表(Sheet1)上时,第一条Select语句出现“1004:Select Method of Range class failed”错误 Sub Clear() ' ' Clear Macro ' Sheet1.Range("A2:H2").Select Selection.ClearContents Sheet1.R

我构建了一个用于进行简单筛选搜索的用户表单。我可以在选择任何工作表时打开表单并进行筛选。但是,当我使用userform中的clear按钮但不在筛选条件工作表(Sheet1)上时,第一条Select语句出现“1004:Select Method of Range class failed”错误

Sub Clear()
'
' Clear Macro
'
    Sheet1.Range("A2:H2").Select
    Selection.ClearContents
    Sheet1.Range("A5:H1725").Select
    Selection.ClearContents
    Sheet1.Range("A2").Select

End Sub
我是被迫打开筛选表还是我的代码不能正常工作?我希望有一个带有“打开表单”按钮的工作表,其中隐藏了数据(Sheet2)和筛选条件(Sheet1)

在cmdClear_click()上,我在运行Clear之前调用此命令:

Private Sub ClearForm()
'
'clear values
    With Me
        .txtCustId = ""
        .txtCustName = ""
        .txtAddress = ""
        .txtCity = ""
        .txtState = ""
        .txtZip = ""
        .txtCountry = ""
        .txtStatus = ""
    End With
End Sub

我能想到的另一件可能会把事情搞砸的事情是Me…

。选择
仅当您在指定的工作表上时有效,在您的代码中使用的是
Sheet1(..)。选择
意味着您在Sheet1上选择了某些内容,如果您在不同的工作表/选项卡上,则会失败。要避免这种情况,必须避免使用Select

没有选择的结果相同:

Sub Clear()
'
' Clear Macro
    With ThisWorkbook
        'Replace "Sheet1" if you have renamed your Sheet to something else
        .Sheets("Sheet1").Range("A2:H2").ClearContents
        .Sheets("Sheet1").Range("A5:H1725").ClearContents
    End With
End Sub

。选择
仅当您在指定的工作表上时有效,在您的代码中使用的是
工作表1(..)。选择
表示您在工作表1上选择了某些内容,如果您在不同的工作表/选项卡上,则会失败。要避免这种情况,必须避免使用Select

没有选择的结果相同:

Sub Clear()
'
' Clear Macro
    With ThisWorkbook
        'Replace "Sheet1" if you have renamed your Sheet to something else
        .Sheets("Sheet1").Range("A2:H2").ClearContents
        .Sheets("Sheet1").Range("A5:H1725").ClearContents
    End With
End Sub

一般来说,您希望在您的代码中如前所述,最好避免使用激活和选择,但是为了快速修复,您可以尝试使用
ActiveSheet
而不是
ActiveSheet
ActiveSheet.Range(…)。也可以选择
,您是在单独的模块中还是在工作表模块中有此代码?@RicardoA:它在单独的模块中,而不是在工作表模块中。如果表单没有查看活动工作表,会发生什么情况?@controlnetic.nomad:我知道这个问题和答案,但我现在无法理解,请避免使用Select,我刚刚发布的答案是这样的,如果有任何问题,请回复答案。一般来说,您希望在您的代码中如前所述,最好避免使用激活和选择,但是为了快速修复,您可以尝试
ActiveSheet
ActiveSheet.Range(…)。也可以选择
,您是在单独的模块中还是在工作表模块中有此代码?@RicardoA:它在单独的模块中,而不是在工作表模块中。如果表单没有查看活动工作表,会发生什么情况?@controlnetic.nomad:我知道这个问题和答案,但我现在无法理解,请避免使用Select,我刚刚发布的答案是这样的,如果有任何问题,请回复答案。如果您只使用Sheet1,则可以将工作簿和工作表一起调用:
与此工作簿一起使用。工作表(“Sheet1”)
,然后继续使用
.Range(“A2:H2”).ClearContents
。根据您使用
中所做的工作的多少,有时调用工作表名称也会更容易/更干净。如果您仅使用Sheet1,则可以将工作簿和工作表一起调用:
使用此工作簿。工作表(“Sheet1”)
,然后继续使用
范围(“A2:H2”)。ClearContents
。根据您使用
中执行的操作的多少,有时调用工作表名称也会更容易/更干净。