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 Excel如何在工作表区域内查找某个值,发回这个值所在的行号、列号