【问题标题】:evaluated result of indirect function in VBAVBA中间接函数的评估结果
【发布时间】:2019-01-16 10:08:55
【问题描述】:

我正在编写 VBA 并想评估特定单元格是否引用其他工作表中的单元格。我通常通过分析“!”之前单元格值中的字符来评估这一点。

但是,当单元格使用“间接”函数引用另一个工作表中的单元格时,此方法不起作用。

例如,=INDIRECT (ADDRESS(row, col,,,sheet_name))=INDIRECT ("SUM(" & A1(cell containing sheet_name) &"B2:B3)") 引用其他工作表中的单元格,但我无法在 VBA 中检测到这一点,因为没有像“!”这样的表达式在公式中。

那么,有人可以帮我找出是否有任何方法可以评估 VBA 中的间接函数,特别是将=INDIRECT (ADDRESS(2, 1,,,"sheet2")) 转换为=sheet2!A2 的方法,或者另一种方法来了解单元格是否包含“间接”函数是否引用其他工作表中的单元格。

提前感谢您的支持!

【问题讨论】:

    标签: excel vba reference


    【解决方案1】:

    试试这个代码:

    Sub getRangeAddress()
        Dim oRng As Range
        Set oRng = Evaluate("=INDIRECT(Address(2, 1, , , ""Sheet2""))")
        If oRng.Parent.Name <> ActiveSheet.Name Then
            MsgBox oRng.Address(, , , True)
        End If
    End Sub
    

    【讨论】:

    • 您好查尔斯,非常感谢您的快速回复。当间接函数仅引用一个单元格时,它工作得很好,例如 "=INDIRECT(Address(2, 1, , , ""Sheet2""))" 没关系,但如果可能的话,我想检测一下,即使有超过 1 个单元格。
    • 例如,当我在单元格 B4 中输入 "=INDEX(A1:A4, MATCH(INDIRECT(C5&"!B3"),Sheet1!$A$3:$A$7,0))"而单元格 C5 包含“Sheet2”,oRng.Parent.Name 是“Sheet1”,这意味着我无法检测到单元格 B4 是指 Sheet2 中的单元格。那么,有没有其他方法可以知道特定单元格所指的所有工作表?非常感谢您的支持
    • 必须将公式解析为表达式并单独评估表达式。交叉点、多个范围运算符等也有很多极端情况。请参阅我的 Formula Explorer Pro Beta 4.2。 decisionmodels.com/fxl_mgrpro_beta2.htm
    • 谢谢你,查尔斯。您的工具以一种奇妙的方式工作!我也想写一个代码来查看我的VBA代码中的所有先例,是否有任何提示(例如,要使用的函数)让我实现找到所有先例?非常感谢您的专业知识,因为我没有其他网站可以参考...
    • 也许您可以解析出 INDIRECT 和 OFFSET 函数,使用上面代码中的 Evaluate 技巧将它们转换为范围地址并替换回公式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2011-07-17
    • 2015-11-03
    • 1970-01-01
    • 2020-06-06
    相关资源
    最近更新 更多