【问题标题】:Excel VBA - Data Validation - Using =INDIRECT() - creating dependent drop downsExcel VBA - 数据验证 - 使用 =INDIRECT() - 创建相关下拉列表
【发布时间】:2020-01-14 11:43:57
【问题描述】:

我目前正在努力创建取决于先前选择的数据验证下拉菜单

(OS X 上的 Excel 版本 16.32)

我想要实现的目标:在 F 列中,我想使用公式“=INDIRECT($Ei)”创建数据验证 - 所以对于单元格 F2 =INDIRECT(E2),单元格 F3 =间接(E3)

问题:如果 E 列中的选择已经完成,则当前代码有效。如果 E 列中的单元格为空(默认情况下应为空),我会收到 1004 错误

代码目前看起来像这样:

Dim currentrows As Integer
Dim i As Integer
Dim indirect_address As Variant

For Each ws In Sheets
    If ws.Name <> "Overview" And ws.Name <> "Hidden" Then
    currentrows = ws.UsedRange.Rows.Count
    ws.Activate
        With Range("E2:E" & currentrows).Validation
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                Operator:=xlBetween, Formula1:="=Hidden!$A$2:$A$4"
        End With
        For i = 2 To currentrows
            indirect_address = "E" & i
            With Range("F" & i).Validation
                .Delete
                .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
                    Operator:=xlBetween, Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"
            End With
        Next i
    End If
Next ws

我特别在这部分苦苦挣扎,因为我不完全理解它

Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"

我之前使用了以下 sn-p,但这导致 =INDIRECT("Ei") 由于公式中的 "" 而不起作用

Formula1:="=INDIRECT(""" & Range(indirect_address).address(False, False) & """)" 

感谢期待 -CM

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    让我们尝试,改变

    Operator:=xlBetween, Formula1:="=INDIRECT(" & Range(indirect_address).address(False, False) & ")"
    

    Operator:=xlBetween, Formula1:="=INDIRECT(""" & indirect_address & """)"
    

    【讨论】:

    • 嗨,僵局,很遗憾不是。结果是这也会在公式字段中创建一个 =INDIRECT("E2")。它只能在没有引号 imgur.com/a/PUGwaCu 的情况下工作,有什么办法可以逃脱它们?
    • 它只能以这种方式工作(删除 4 个引号),但前提是 F 列已经填充 Formula1:="=INDIRECT(" &amp; indirect_address &amp; ")" 可能我应该考虑一种解决方法,预先填充 F 列并且一旦 E 中的数据验证是就地删除F的内容。似乎VBA在运行时需要一个有效的结果
    • 好吧,我没有注意到他们返回了相同的结果。你是对的。上面的代码只是将数据填充到下拉列表中
    【解决方案2】:

    我想我已经找到了这个问题的原因和解决方法。看起来在宏的运行时,VBA 需要一个有效的结果才能不出错。这意味着需要使用有效选项填充 E 列中的字段才能在 F 列中创建有效的数据验证

    这意味着我在 F 列中创建下拉菜单之前使用选项预先填充 E 列。之后我将 E 列值设置回 .value = "" 并且一切都按预期工作

    【讨论】:

      猜你喜欢
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-01
      相关资源
      最近更新 更多