我有以下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
答案 0 :(得分:2)
答案是即使您解锁了单元格,数据验证仍然是不受限制的。在应用数据验证之前,您必须取消保护工作表。
答案 1 :(得分:1)
我认为您无法在启用保护时设置验证。
我所做的是在程序开始时删除保护并在最后添加它,记住错误处理,如果发生故障,应该重新设置保护。
我经常创建一个应用保护的类。
说一个名为cProtect的课程
Option Explicit
Private Sub Class_Initialize()
Sheet1.Unprotect
End Sub
Private Sub Class_Terminate()
Sheet1.Protect
End Sub
在我的程序中,我从:
开始Dim protect as cProtect
Set protect = new cProtect
这会导致通过类初始化方法删除保护,然后当实例因任何原因(程序结束,错误)超出范围时,终止触发并将保护应用于其上。