VB6如何获取当前运行脚本的文件名(类Python __file__功能)
在VB6中获取当前运行的.bas模块文件名
首先要明确:VB6的.bas是标准模块文件,无法像Python脚本那样单独运行,它必须隶属于某个VB工程(EXE/DLL/OCX等)。因此需要分两种场景处理:
1. IDE调试环境下获取当前执行代码所在的.bas文件名
可以借助VB的IDE对象模型遍历工程模块,结合错误行号定位当前模块。示例代码如下:
Function GetCurrentBasFileName() As String Dim vbProj As VBIDE.VBProject Dim vbComp As VBIDE.VBComponent Dim currentLine As Long ' 触发临时错误以获取当前代码行号 On Error Resume Next Err.Raise 1 currentLine = Erl() On Error GoTo 0 ' 关联当前活动工程 Set vbProj = App.VBE.ActiveVBProject ' 遍历所有标准模块 For Each vbComp In vbProj.VBComponents If vbComp.Type = vbext_ct_StdModule Then ' 验证当前行是否属于该模块 If vbComp.CodeModule.ProcOfLine(currentLine, vbext_pk_Proc) <> "" Then GetCurrentBasFileName = vbComp.Name & ".bas" Exit Function End If End If Next vbComp GetCurrentBasFileName = "无法识别模块" End Function
注意事项:
- 需要在VB6 IDE中启用「信任对VB工程对象模型的访问」:依次点击「工具」→「选项」→「编辑器」,勾选对应选项。
- 该方法仅在IDE调试时有效,编译为EXE后无法使用。
2. 编译为EXE后获取模块标识
VB6编译为EXE时,原始的.bas文件名不会被保留在程序中,无法直接获取。如果需要在运行时区分不同模块,建议在每个.bas模块中定义一个常量来标识自身:
' 在Module1.bas中定义 Public Const MODULE_FILENAME As String = "Module1.bas" ' 在Module2.bas中定义 Public Const MODULE_FILENAME As String = "Module2.bas"
之后在代码中需要的位置,直接引用MODULE_FILENAME即可得到当前模块的文件名标识。
补充:如果你的需求是获取当前运行的EXE文件名,可以用App.EXEName & ".exe";CurDir()仅返回当前工作目录,和模块/EXE的实际路径、文件名无关。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

