我不是VBA程序员。但是,我有一个令人不快的'用另一种语言重新实现某些VBA代码的任务。 VBA代码由75个模块组成,这些模块使用一个大量的计算表'存储所有全局变量'。因此,它不使用描述性变量名称,而是经常使用:
= Worksheets("bla").Cells(100, 75).Value
或
Worksheets("bla").Cells(100, 75).Value =
更糟糕的是,'计算表'还包含一些公式。
是否有任何(免费)工具可以对这些代码进行反向工程(例如创建Nassi-Shneiderman图表,流程图)?感谢。
答案 0 :(得分:4)
我认为@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
显然,您需要更正输出行语法和变量名称结构以用于您需要使用的任何其他语言。
P.S。如果您不熟悉RegEx(正则表达式),您会在网上找到大量文章来解释它。