VBA - 如何根据调用它所在的子的子来确定 IF 语句的结果?

Posted

技术标签:

【中文标题】VBA - 如何根据调用它所在的子的子来确定 IF 语句的结果?【英文标题】:VBA - How to determine the outcome of an IF statement based on the sub that called the sub it is in? 【发布时间】:2017-01-11 04:58:42 【问题描述】:

第一次发布海报,但长期阅读。我终于有一个问题,要么不在这里,要么我根本无法正确地表达它来返回答案。

我想要实现的是拥有一个我可以从其他潜艇调用的单个潜艇,这对所有事情都是相同的 90%,并且仅根据调用它的潜艇更改最后 10%(可能通过IF 语句)

可能是这样的:

Sub A()
Call Main
End Sub

Sub B()
Call MAIN
End Sub

Sub MAIN()
If Sub A called Sub MAIN Then
Answer = 1
elseif: Sub B called Sub MAIN Then
Answer = 2
Endif
End sub

我认为这可能是不可能的,但使用这样的东西而不是编写一堆几乎相同的潜艇会很棒。

感谢任何建议!

【问题讨论】:

【参考方案1】:

如果从特定位置调用,只需传递一个可选参数:

Sub A()
    MAIN
End Sub

Sub B()
    MAIN True
End Sub

Sub MAIN(Optional fromB As Boolean = False)
    If fromB Then
        Answer = 2
    Else
        Answer = 1
    End If
End Sub

【讨论】:

感谢您的快速回复!我尝试了上述方法,但我总是得到相同的答案(1)。唯一的区别是我在 sub B 中的 MAIN 旁边没有“TRUE”,因为它是语句的预期结尾,这会有所不同吗?我并不总是知道哪个子会调用 MAIN,因为它将基于用户输入。 @JRegan - 删除 Call 语句 - 它已过时。否则,将参数括在括号中:Call MAIN(True) 删除了 Call 语句并包装了允许我放入它的 TRUE,但两个答案我仍然得到 1。还有什么可能会绊倒这件事吗?我现在使用的和你上面的一样。 TRUE 旁边只有一个 sub 是否会限制我在 false/true 下的 2 个选项? @JRegan - 您可以传递参数所需的任何内容。至于确定为什么你总是得到 1,我需要查看你的实际代码。上面的示例应该从 B 返回 1,从 A 返回 2。 我还没有把它放到我的代码中,只是测试它在 3 个单独的 subs 中(都在同一个模块中),唯一的区别是我包含了 'Msgbox Answer' 来输出MAIN 子末尾的值。其他一切都是一样的。很奇怪..

以上是关于VBA - 如何根据调用它所在的子的子来确定 IF 语句的结果?的主要内容,如果未能解决你的问题,请参考以下文章

VBA - 在“IF语句”中嵌套“带语句”

给定传递给它的参数类型,如何确定函数参数的类型?

VBA Excel如何在工作表区域内查找某个值,发回这个值所在的行号、列号

真核生物基因启动子和增强子的异同点???

Excel VBA从另一个具有多个输入,不同大小的输出的子调用子

Word VBA命令确定找到的字符是否在行尾