【问题标题】:reverse engineer vba code excel逆向工程vba代码excel
【发布时间】:2012-06-27 15:20:17
【问题描述】:

我不是 VBA 程序员。但是,我有一个“不愉快”的任务,那就是用另一种语言重新实现某人的 VBA 代码。 VBA 代码由 75 个模块组成,它们使用一张巨大的“计算表”来存储所有“全局变量”。因此,它通常不使用描述性变量名称,而是使用:

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

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

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

是否有任何(免费)工具可以让您对此类代码进行逆向工程(例如创建 Nassi-Shneiderman 图、流程图)?谢谢。

【问题讨论】:

  • 哎呀,我希望发起人不再为该组织或任何其他组织工作!对不起,但我想不出任何有用的东西。也许如果每个变量单元格在很多地方都使用,您可以导出代码然后编写一些东西来用值替换正则表达式 - 但不确定这是否会有所帮助。
  • 谢谢,我正在考虑类似的事情。

标签: vba excel


【解决方案1】:

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

  1. 将所有代码复制到能够进行正则表达式搜索/替换的文本编辑器(例如 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 
    

显然,您需要更正您需要使用的任何其他语言的输出行语法和变量名结构。

附:如果您不熟悉 RegEx(正则表达式),您会在网络上找到大量解释它的文章。

猜你喜欢
  • 2018-09-20
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2015-04-13
  • 2010-09-11
  • 2021-08-16
  • 2011-12-28
相关资源
最近更新 更多