Vba 我能找到调用函数的sub吗?
我有一个相当大的VBA项目,现在我需要知道什么子调用函数 例如:Vba 我能找到调用函数的sub吗?,vba,excel,Vba,Excel,我有一个相当大的VBA项目,现在我需要知道什么子调用函数 例如: sub first() RunSomeCode end sub sub second() RunSomeCode end sub Function RunSomeCode() ' here I need to know if the calling sub is first() or second() end function 我所知道的唯一方法是在第一个子系统和第二个子系统中传递带有函数调用的字
sub first()
RunSomeCode
end sub
sub second()
RunSomeCode
end sub
Function RunSomeCode()
' here I need to know if the calling sub is first() or second()
end function
我所知道的唯一方法是在第一个子系统和第二个子系统中传递带有函数调用的字符串以及调用子系统名称。但是这个函数是从任何地方调用的,我想知道是否有更简单的方法来实现它
我需要获取sub称之为RunSomeCode的字符串,仅在调试中获取是不够的。
Ctrl+L
是VBA中调用堆栈的快捷方式。您可以看到堆栈。正如您在下面的屏幕截图中所看到的,该函数是在秒以下调用的:
假设您只需要第一次和第二次使用它,那么这可能会有所帮助
Option Explicit
Sub first()
RunSomeCode "First"
End Sub
Sub second()
RunSomeCode "Second"
End Sub
Sub third()
RunSomeCode
End Sub
Function RunSomeCode(Optional Caller As String)
' here I need to know if the calling sub is first() or second()
If Len(Caller) > 0 Then
Debug.Print Caller
End If
End Function
您是否尝试过在“视图”菜单下使用调用堆栈?调试时是否需要它?如果Imran正确,则应使用调用堆栈。如果您在运行时需要它,那么您所建议的可能是方法,您只需添加第二个参数作为可选参数。这意味着只有在first
或second
调用RunSomeCode
的情况下,才能传递参数。但无论如何,我认为这是一个例子,你应该给出一些背景,为什么你真的需要这个resp。你真正的问题是什么。@QHarr这不是重复的。这只在调试中讨论。我在运行代码时需要它。它不仅仅包括调用堆栈。看。问题本身就其所问内容而言是重复的,即如何在被调用方中显示代表调用方的字符串?答案是否充分是另一回事。所以我认为它是一个潜在的复制品。你结束对一个问题的投票是因为你找到了一个适合这个问题的答案,而不是因为你找到了一个重复的标题或标题词说了同样的话。如果你只匹配标题中的单词,那么我认为你的接近投票特权应该被撤销。@Andreas-我能想到的一个简单方法是在每个子/函数
的末尾编写debug.print NAME-of-SUB/FUNCTION
,运行程序并检查结果。因此,您将看到它们被调用的顺序。我不确定这将做什么。你的意思是我应该在代码中添加debug.print“first”
?@Andreas-差不多。这就是我认为我需要做的。但不是我想做的。我只是假设有一种方法可以从“手表”窗口“提取”信息。如果你在一个变量上添加一个“Watch”,你将能够看到它运行的函数,如果我能得到那行文本的话。这将解决所有问题。如上文所述,如果可能的话,我不知道如何解决,但也许其他人可能是你所需要的,但我不确定这是否真的是你想要做的