数据验证中的VBA错误:应用程序定义或对象定义错误

时间:2014-06-13 05:00:17

标签: 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, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, _
    Formula1:="='" & works2.name & "'!" & rangeval2.Address          "Line with the error"

 End With

我无法弄清楚错误是什么,becoz代码似乎对我来说是正确的

6 个答案:

答案 0 :(得分:0)

我猜你在运营商后缺少一个逗号。它应该是Add Type:= xlValidateList,AlertStyle:= xlValidAlertStop, Operator:= xlBetween, Formula1:=“='”& works2.name& “'!” &安培; rangeval2.Address。请让我知道

它将来自sheet2的值作为下拉列表Sheet 2

提取给我

Sheet1

.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

答案 1 :(得分:0)

我不知道为什么Sriram的答案不适合你。

以下适用于我。

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

注意顶部的Option Explicit,然后用类型声明每个变量。您可能已在代码中使用此功能。但很难说你在问题中发布了什么。

如果仍然无效,请检查您的工作表是否真的命名为Sheet1Sheet2

答案 2 :(得分:0)

注意:

我刚刚发现的一个错误,如果当前的Excel选择是一个图表,则无法使用VBA的void oddSwap(int *x, int *y) { int temp = *x; *x = *y * 5; *y = temp * 5; } int main() { int x=5; int y=3; oddSwap(&x,&y); printf("\n%d:%d", x,y); return 0; } 方法更改验证。

这可能是您面临的问题。

答案 3 :(得分:0)

我以前有同样的问题。问题是您需要激活要创建验证的工作表并选择它。最重要的是,您需要在要创建验证的范围内进行选择。

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

答案 4 :(得分:0)

请确保您的工作表没有受到保护,如果这样,请取消保护工作表,然后重试,它将起作用!

答案 5 :(得分:0)

我遇到了这个问题,问题是它是第一次工作,但随后没有工作。问题是我试图将验证(.Validation.Add)添加到已经对其进行列表验证的单元格中。我必须排成一行以清除验证(.Validation.Delete)。