我可能不擅长谷歌搜索,因为我找不到以下问题的答案:
Sub TEST()
Dim sthstring as string
sthstring = "Hello World"
end sub
虽然我们都知道使用 msgbox 打印“Hello world”很容易,但是否可以打印出变量的名称(在本例中为“sthstring”) >) 以及如何?
编辑:请不要提供以下答案:
Dim someotherstring as string
someotherstring = "sthstring"
因为我想找到一种方法来打印变量的“名称”,谢谢
最佳答案
阅读完评论后,我想您可能会发现这个答案很有用。
VBA 不支持反射,就像 @Monty Wild 已经提到的那样,但添加对 Microsoft Visual Basic for Applications Extensibility 5.3
的引用将授予您访问 VBE 对象的权限。然后,您可以迭代 VBA 项目中的对象模块,并以 String
格式检索模块的完整代码。
考虑以下事项(将其粘贴到新工作簿的 Module1
中)
Sub Main()
Dim code As String
code = GetCodeModule("Module1")
Debug.Print code
End Sub
Private Function GetCodeModule(ByVal codeModuleName As String) As String
Dim VBProj As VBIDE.VBProject
Dim VBComp As VBIDE.VBComponent
Dim CodeMod As VBIDE.CodeModule
Set VBProj = ThisWorkbook.VBProject
Set VBComp = VBProj.VBComponents(codeModuleName)
Set CodeMod = VBComp.CodeModule
GetCodeModule = CodeMod.Lines(1, CodeMod.CountOfLines)
End Function
您的 code
变量现在存储 Module1
中的确切代码,您可以通过打开立即窗口 ctrl+克。
您可能想要编写/使用某种Find
函数来反汇编字符串组件以检索变量名称和值,但我不建议这样做,因为它可能会变得非常棘手。
关于excel - 打印变量的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173082/