应用程序或对象定义错误

时间:2015-01-26 20:07:51

标签: excel excel-vba vba

我有一个在打开工作簿时运行的查询。如果查询刷新到新工作表(面板),我不知道如何正确修改下面的代码以反映此更改。谢谢。

尝试使用J-O中的范围来填充A2中的数据验证,但截至目前,我收到错误,突出显示粗体部分。

' Select Patient

Application.ScreenUpdating = False
With Sheets(“panel”)
    lastrow = Cells(.Rows.Count, "J").End(xlUp).Row
With Selection.Validation
    End With
    With .Range("A2").Validation
        .Delete
        **.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=$J$1:$O$1" & lastrow**
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End With
Application.ScreenUpdating = True

1 个答案:

答案 0 :(得分:0)

因此,对于VBA中的这些类型的错误,我希望确保可以使用Dim声明的所有数据都已完成。通过这种方式,我可以查看每个变量并查看其值以进行手动错误检查。

例如我拿了

Formula1:="=$J$1:$O$1" & lastrow

并将其更改为formula字符串,我在开始时调暗:

Dim formula as String

然后在你得到最后一行之后你可以调试变量并看到它等于(例如)

"=$J$1:$O$113"

现在手动测试一下,我尝试添加一个数据验证列表作为它的来源。这就是我收到错误的地方:

error dialog

此错误消息清楚地总结了它。您不能拥有跨多个列的数据验证列表。您需要更改设计以匹配Excel可以执行的操作。

为了进一步仔细检查,我回去并将公式更改为:

formula = "=$J$1:$J$" & lastrow

在#34; A2"

中出现了非常流畅,没有错误和一个漂亮的下拉列表

我使用的完整子是:

Sub Macro1()
Application.ScreenUpdating = False
Dim formula As String

With Sheets("panel")
    lastrow = .Cells(.Rows.Count, "J").End(xlUp).Row
    formula = "=panel!$J$1:$J$" & lastrow
End With

With Sheets("annovar")
    With .Range("A2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:=formula
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
End With
Application.ScreenUpdating = True
End Sub