VBA-如何根据调用其所在sub的sub确定IF语句的结果?

VBA-如何根据调用其所在sub的sub确定IF语句的结果?,vba,Vba,第一次贴海报,但阅读时间很长。我终于有了一个问题,要么不在这里,要么就是我无法用正确的措辞来回答 我试图实现的是拥有一个我可以从其他sub调用的sub,这对所有东西都是90%相同的,并且仅根据调用它的sub更改最后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 c

第一次贴海报,但阅读时间很长。我终于有了一个问题,要么不在这里,要么就是我无法用正确的措辞来回答

我试图实现的是拥有一个我可以从其他sub调用的sub,这对所有东西都是90%相同的,并且仅根据调用它的sub更改最后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
我认为这可能是不可能的,但是如果使用类似的东西而不是编写一堆几乎相同的sub,那就太好了


任何建议都将不胜感激

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

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
语句-它已过时。否则,将参数包装在括号中:
callmain(True)
。删除Call语句并包装True,这允许我将其放入,但两个答案仍为1。还有什么东西可能会弄错吗?我现在用的和你上面的一样。此外,如果只有一个子项旁边有TRUE,则false/TRUE?@JRegan下的选项将限制为2个-您可以传递参数所需的任何内容。至于你为什么总是得到1,我需要看看你的实际代码。上面的例子应该从B返回1,从A返回2。我还没有将其放入我的代码中,只是在3个单独的子模块(都在同一个模块中)中进行测试,唯一的区别是我包含了“Msgbox Answer”,以便在主子模块的末尾输出值。其他所有内容都是相同的。很奇怪。。