我有一个在打开工作簿时运行的查询。如果查询刷新到新工作表(面板),我不知道如何正确修改下面的代码以反映此更改。谢谢。
尝试使用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
答案 0 :(得分:0)
因此,对于VBA中的这些类型的错误,我希望确保可以使用Dim
声明的所有数据都已完成。通过这种方式,我可以查看每个变量并查看其值以进行手动错误检查。
例如我拿了
Formula1:="=$J$1:$O$1" & lastrow
并将其更改为formula
字符串,我在开始时调暗:
Dim formula as String
然后在你得到最后一行之后你可以调试变量并看到它等于(例如)
"=$J$1:$O$113"
现在手动测试一下,我尝试添加一个数据验证列表作为它的来源。这就是我收到错误的地方:
此错误消息清楚地总结了它。您不能拥有跨多个列的数据验证列表。您需要更改设计以匹配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