Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 我能找到调用函数的sub吗?_Vba_Excel - Fatal编程技术网

Vba 我能找到调用函数的sub吗?

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 我所知道的唯一方法是在第一个子系统和第二个子系统中传递带有函数调用的字

我有一个相当大的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称之为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”,你将能够看到它运行的函数,如果我能得到那行文本的话。这将解决所有问题。如上文所述,如果可能的话,我不知道如何解决,但也许其他人可能是你所需要的,但我不确定这是否真的是你想要做的