如何以编程方式引用excel中的单元格验证的动态范围

时间:2015-06-07 16:16:02

标签: excel vba validation excel-vba

我正在尝试使用验证将选项列表显示为单元格的下拉列表,但我想从另一个工作表上生成的单元格中动态填充选项列表。我一直在1004 error: "Application-defined or object-defined error"声明中获得.Add。如果我使用refStrg1或refStrg2,我会收到此错误。我构建的引用函数正常运行。 Excel 2010。

以下是我的测试代码:

Private Sub btnTest_Click()
    Dim refStrg1 As String, _
        refStrg2 As String

    refStrg1 = "=indirect(" & """" & "'Sheet" & Sheets("Chosen Benchmarks").Index _
    & "'!B2:B" & getLastRowFromOf(Sheets("Chosen Benchmarks"), "B") & """" & ")"
    refStrg2 = "=Sheet" & Sheets("Chosen Benchmarks").Index _
    & "!B2:B" & getLastRowFromOf(Sheets("Chosen Benchmarks"), "B")

    With Sheets("Chosen Benchmarks").Range("F2").Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlEqual, _
        Formula1:=refStrg2 '<-- Error 1004
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

End Sub

在调试模式下,我有以下手表报告:

Sheets("Chosen Benchmarks").Index = 4
getLastRowFromOf(Sheets("Chosen Benchmarks"), "B") = 102
refStrg1 = "=indirect("'Sheet4'!B2:B102")"
refStrg2 = "=Sheet4!B2:B102"

任何有关获取公式参考表位置的帮助都将不胜感激。另外我应该注意,我可以在引用字符串的开头删除“=”字符以获得对单元格的验证,以显示为单个选项的文字公式字符串(当然没有等号),但我确实需要这些值作为我试图引用的那些单元格中的列表。

提前致谢!

1 个答案:

答案 0 :(得分:1)

显然我生产的参考字符串让Excel混淆了,因为我已经重命名了Sheet 4.使用单引号围绕Sheet的名称而不是Sheet及其索引号使得formula1文本有效。

refStrg2 = "='Chosen Benchmarks'!B2:B" & getLastRowFromOf(Sheets("Chosen Benchmarks"), "B")