Vba 应用程序定义或对象定义错误(运行时错误1004)

Vba 应用程序定义或对象定义错误(运行时错误1004),vba,excel,Vba,Excel,当我试图清除单元格内容并重置其各自的颜色时,出现运行时错误1004。我先解除工作表的保护,然后尝试清除单元格内容并重置单元格颜色,但excel引发异常。任何建议都将不胜感激 Sub ClearField() Dim ws As Worksheet Dim pw As String pw = "xxxxxxxxxxxx" Set ws = ActiveSheet With ws 'unprotect sheet

当我试图清除单元格内容并重置其各自的颜色时,出现运行时错误1004。我先解除工作表的保护,然后尝试清除单元格内容并重置单元格颜色,但excel引发异常。任何建议都将不胜感激

    Sub ClearField()



    Dim ws As Worksheet
    Dim pw As String

    pw = "xxxxxxxxxxxx"

    Set ws = ActiveSheet

    With ws
        'unprotect sheet
        .Unprotect pw



        Range("O3:R3").Select
        Selection.ClearContents
        Range("O3:R3").Interior.Color = RGB(255, 255, 255)


        Range("X3:AC3").Interior.Color = RGB(255, 255, 255)
        Range("X3:AC3").Select
        Selection.ClearContents



        Range("AE3:AJ3").Interior.Color = RGB(255, 255, 255)
        Range("AE3:AJ3").Select
        Selection.ClearContents



        Range("AL3").Interior.Color = RGB(255, 255, 255)
        Range("AL3").Select
        Selection.ClearContents



        Range("A7:AI36").Select
        Range("A7:AI36").Interior.Color = RGB(255, 255, 255)
        Range("AI7").Activate
        Selection.ClearContents



        Range("J39:V40").Interior.Color = RGB(255, 255, 255)
        Range("J39:V40").Select
        Selection.ClearContents



        Range("AD44:AL45").Interior.Color = RGB(255, 255, 255)
        Range("AD44:AL45").Select
        Selection.ClearContents



        Range("AX3:AY3").Interior.Color = RGB(255, 255, 255)
        Range("AX3:AY3").Select
        Selection.ClearContents



        Range("AU7:AU36").Interior.Color = RGB(255, 255, 255)
        Range("AU7:AU36").Select
        Selection.ClearContents




        Range("AZ7:BC36").Interior.Color = RGB(255, 255, 255)
        Range("AZ7:BC36").Select
        Selection.ClearContents



        Range("BF7:BP36").Interior.Color = RGB(255, 255, 255)
        Range("BF7:BP36").Select
        Selection.ClearContents


        Range("E6").Select


        Range("AN46:AW51").Interior.Color = RGB(255, 255, 255)
        Range("AN46:AW51").Select
        Selection.ClearContents

        'protect worksheet
        .Protect pw
    End With



End Sub

您需要使用与取消保护和保护相同的方式来限定所有
范围(…)
引用,方法是使用
。您还可以删除所有的
select
语句,然后按照我在下面向您展示的方式操作您的范围

Sub ClearField()

Dim ws As Worksheet
Dim pw As String

pw = "xxxxxxxxxxxx"

Set ws = ActiveSheet

    With ws
        'unprotect sheet
        .Unprotect pw

        With .Range("O3:R3")
            .ClearContents
            .Interior.Color = RGB(255, 255, 255)
        End With

        ' ... rewrite the rest in the way I have done above

        'protect worksheet
        .Protect pw

    End With

End Sub

保持一致也是一种方法

Dim ws As Worksheet, rng As Range
Dim pw As String
pw = "xxxxxxxxxxxx"
Set ws = ActiveSheet
With ws
    .Unprotect pw  'unprotect sheet
    Set rng = .Range("O3:R3,X3:AC3,AE3:AJ3,AL3,A7:AI36,J39:V40,AD44:AL45,AX3:AY3,AU7:AU36,AZ7:BC36,BF7:BP36,AN46:AW51")
    rng.Interior.Color = RGB(255, 255, 255)
    rng.ClearContents
    .Protect pw
End With

有人回答了吗?