我不是VBA程序员。但是,我有一个"不愉快"的任务,即用另一种语言重新实现某人的 VBA 代码。VBA代码由75个模块组成,这些模块使用一个巨大的"计算表"来存储所有"全局变量"。因此,它通常不使用描述性变量名称,而是使用:
= Worksheets("bla").Cells(100, 75).Value
或
Worksheets("bla").Cells(100, 75).Value =
更糟糕的是,"计算表"还包含一些公式。
是否有任何(免费)工具允许您对此类代码进行逆向工程(例如创建Nassi-Shneiderman图,流程图)?谢谢。
我认为@JulianKnight的建议应该有效在此基础上,您可以:
- 将所有代码复制到能够进行正则表达式搜索/替换的文本编辑器中(例如。记事本++)。
- 然后使用正则表达式搜索/替换与搜索查询,如下所示:
Worksheets("Bla").Cells((d*), (d*)).Value
-
并替换为:
Var_1_2
这会将所有工作表存储的值转换为带有行列索引的变量名称。
例:Worksheets("bla").Cells(100, 75).Value To Var_100_75
-
这些变量仍需要初始化。
这可以通过编写VBA代码来完成,该代码只需读取" Bla"工作表中的每个(相关)单元格,并将其作为变量初始化代码写出到文本文件中。
例:Dim FSO As FileSystemObject Dim FSOFile As TextStream Dim FilePath As String Dim col, row As Integer FilePath = "c:WriteTest.txt" ' create a test.txt file or change this Set FSO = New FileSystemObject ' opens file in write mode Set FSOFile = FSO.OpenTextFile(FilePath, 2, True) 'loop round adding lines For col = 1 To Whatever_is_the_column_limit For row = 1 To Whatever_is_the_row_limit ' Construct the output line FSOFile.WriteLine ("Var_" & Str(row) & "_" & Str(col) & _ " = " & Str(Worksheets("Bla").Cells(row, col).Value)) Next row Next col FSOFile.Close
显然,您需要更正需要使用的任何其他语言的输出行语法和变量名称结构。
附言如果您不熟悉 RegEx(正则表达式),您会在网上找到大量解释它的文章。