首页 > 解决方案 > 在数据验证中使用 INDIRECT

问题描述

我想在 VBA 中的数据验证中应用 Excel 的 INDIRECT 函数。

我正在使用 VBA 填充数据验证条件,并使用 INDIRECT 通过 HLOOKUP 从另一个命名范围中找到适当的工作簿命名范围。

我认为我的问题在于 VBA 代码的语法。我无法弄清楚双引号的正确位置。这将返回错误 400 通知。

我有以下内容(为清楚起见,省略了功能代码部分)。HLOOKUP 引用的列 F 包含一个用户可选择的值,而 DepartmentRef 是一个命名范围:

Sub AddNewRoom()
Dim targetRow As Integer
targetRow = Range("EndRoomData").Row
With Worksheets("RoomData")
    With .Range("G" & targetRow).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
            xlBetween, Formula1:="=indirect(hlookup(F" & targetRow & ",DepartmentRef,2,false))"
    End With
End With
End Sub

当我更改验证公式以删除代码变量时,代码正常运行:

With .Range("G" & targetRow).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=indirect(hlookup(F7,DepartmentRef,2,false))"
End With

标签: excelvbavalidationsyntax

解决方案


不要使用直接的“名称”单元格引用,但请尝试:

Formula1:="=INDIRECT(HLOOKUP(" & Worksheets("RoomData").Cells(targetRow, 6).Address(False, False) & ",DepartmentRef,2,FALSE))"

推荐阅读