数据验证中的VBA错误:应用程序定义的错误或对象定义的错误
我有以下代码数据验证中的VBA错误:应用程序定义的错误或对象定义的错误,vba,excel,Vba,Excel,我有以下代码 Set works1 = ThisWorkbook.Worksheets("Sheet1") Set works2 = ThisWorkbook.Worksheets("Sheet2") Set rangeval1 = works1.Cells(11 , 4) Set rangeval2 = works2.Range("j322:j325") With rangeval1.Validation .Delete .Add Type:=xlValidateList, A
Set works1 = ThisWorkbook.Worksheets("Sheet1")
Set works2 = ThisWorkbook.Worksheets("Sheet2")
Set rangeval1 = works1.Cells(11 , 4)
Set rangeval2 = works2.Range("j322:j325")
With rangeval1.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
Formula1:="='" & works2.name & "'!" & rangeval2.Address "Line with the error"
End With
我无法找出错误是什么,因为代码对我来说似乎是正确的我猜您在运算符后面缺少一个逗号。它应该是Add类型:=xlValidateList,AlertStyle:=xlValidAlertStop,运算符:=xlBetween,公式1:=“='”&works2.name&“!”&rangeval2.Address。请让我知道 它从sheet2下拉列表中获取值
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=("='" & works2.Name & "'!" & rangeval2.Address)
更新代码
Sub start()
Set works1 = ThisWorkbook.Worksheets("Sheet1")
Set works2 = ThisWorkbook.Worksheets("Sheet2")
Set rangeval1 = works1.Cells(11, 4)
Set rangeval2 = works2.Range("d2:d5")
With rangeval1.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=("='" & works2.Name & "'!" & rangeval2.Address)
End With
End Sub
我不知道为什么斯利拉姆的答案对你不起作用 以下内容适合我
Option Explicit
Sub test()
Dim works1 As Worksheet
Dim works2 As Worksheet
Dim rangeval1 As Range
Dim rangeval2 As Range
Set works1 = ThisWorkbook.Worksheets("Sheet1")
Set works2 = ThisWorkbook.Worksheets("Sheet2")
Set rangeval1 = works1.Cells(11, 4)
Set rangeval2 = works2.Range("j322:j325")
With rangeval1.Validation
.Delete
.Add _
Type:=xlValidateList, _
AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, _
Formula1:="='" & works2.Name & "'!" & rangeval2.Address
End With
End Sub
注意顶部的显式选项,然后用类型声明每个变量。您的代码中可能已经有了这一点。但很难说你在问题中发布了什么
如果仍然不起作用,请检查您的工作表是否真的命名为Sheet1
和Sheet2
注意:
我刚刚发现一个bug,如果当前Excel选择是一个图表,则不能使用VBA的Add
方法更改验证
这可能是您面临的问题。我以前也遇到过同样的问题。问题是您需要激活要创建验证的工作表并将其选中。最重要的是,您需要选择要创建验证的范围
currentSheet.Activate
currentSheet.Range("A3").EntireRow.Insert
currentSheet.Cells("C3").Select
With currentSheet.Cells("C3").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween,
Formula1:="A,B,C,D"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.errorMessage = ""
.ShowInput = True
.ShowError = True
End With
请确保您的工作表没有受到保护,如果这样,请取消工作表的保护并重试,它将正常工作 我遇到了这个问题,问题是它第一次起作用,但以后没有任何一次起作用。问题是我试图将验证(.validation.add)添加到一个已经有列表验证的单元格中。我必须在问题之前插入一行以清除验证(.validation.Delete)。我忘了在问题中添加逗号,但它在VBA编辑器的代码中,但我仍然得到相同的结果error@Gajju:如果顶部有“option explicit”语句,请删除它,然后尝试运行代码。让我知道我写代码的表格,我没有在top@Gajju:那太好了。应该这样。我正在根据我的最新更新(检查答案)使用您的代码,我已将其放在表2中。检查一下,让我知道。仅更改范围值。还要确保参考Excel Library哪个版本的Excel?Excel 2007和早期版本不允许在数据验证中直接引用其他工作表-您必须命名范围。