逆向工程vba代码excel

时间:2012-06-25 15:23:02

标签: vba excel-vba excel

我不是VBA程序员。但是,我有一个令人不快的'用另一种语言重新实现某些VBA代码的任务。 VBA代码由75个模块组成,这些模块使用一个大量的计算表'存储所有全局变量'。因此,它不使用描述性变量名称,而是经常使用:

= Worksheets("bla").Cells(100, 75).Value

Worksheets("bla").Cells(100, 75).Value =

更糟糕的是,'计算表'还包含一些公式。

是否有任何(免费)工具可以对这些代码进行反向工程(例如创建Nassi-Shneiderman图表,流程图)?感谢。

1 个答案:

答案 0 :(得分:4)

我认为@JulianKnight的建议应该有效 在此基础上,您可以:

  1. 将所有代码复制到能够进行RegEx搜索/替换的文本编辑器(例如Notepad ++)。
  2. 然后使用RegEx搜索/替换搜索查询,如:
    Worksheets\(\"Bla\"\).Cells\((\d*), (\d*)\).Value
  3. 并替换为:
    Var_\1_\2

    这会将所有工作表存储的值转换为带有行列索引的变量名称 例如:

    Worksheets("bla").Cells(100, 75).Value    To    Var_100_75
    
  4. 这些变量仍需要初始化。
    这可以通过编写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 
    
  5. 显然,您需要更正输出行语法和变量名称结构以用于您需要使用的任何其他语言。

    P.S。如果您不熟悉RegEx(正则表达式),您会在网上找到大量文章来解释它。