VBA插入验证列表 - 工作表被锁定时出现1004错误?

3
我有以下的vba代码,它能够正常工作;然而,当我锁定/保护我的工作表时它无法正常工作,即使我在单元格格式选项中取消了相关单元格的“锁定”选项。

为什么当工作表被锁定时会出现

错误1004应用程序或对象定义错误

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If Range("B10").Value <> "" Then
        Dim MyList(9) As String
        MyList(0) = "60 Days EOM"
        MyList(1) = "60 Days DOI"
        MyList(2) = "45 Days EOM"
        MyList(3) = "45 Days DOI"
        MyList(4) = "30 Days EOM"
        MyList(5) = "30 Days DOI"
        MyList(6) = "14 Days DOI"
        MyList(7) = "10 Days EOM"
        MyList(8) = "7 Days DOI"
        MyList(9) = "Immediate Payment"
        With Range("N38").Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                 Operator:=xlBetween, Formula1:=Join(MyList, ",")
        End With
        If Intersect(Target, Target.Worksheet.Range("N38")) Is Nothing Then
            Range("N38").Value = "60 Days EOM"
        End If
    Else
        Range("N38").Validation.Delete
        Range("N38").Value = ""
    End If
End Sub

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - sous2817
2个回答

3
答案是,即使您解锁了单元格,数据验证仍然是受限制的。在应用数据验证之前,您必须取消保护工作表。

1

当保护启用时,我认为您无法设置验证。

我的做法是在过程开始时删除保护,在结束时重新添加保护,记住错误处理,如果失败则应将保护设置回来。

我经常创建一个应用保护的类。

比如一个名为cProtect的类。

Option Explicit

Private Sub Class_Initialize()
    Sheet1.Unprotect
End Sub

Private Sub Class_Terminate()
    Sheet1.Protect
End Sub

在我的程序中,我从以下开始:

And in my procedure I start with:

Dim protect as cProtect
Set protect = new cProtect

这会通过类初始化方法移除保护,然后当实例由于任何原因(过程结束、错误)超出作用域时,终止触发并重新应用保护。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接