2012-06-25 2 views
4

Я не программист VBA. Однако у меня есть «неприятная» задача перепрограммировать код VBA на другом языке. Код VBA состоит из 75 модулей, которые используют один массивный «лист расчета» для хранения всех «глобальных переменных». Таким образом, вместо того, чтобы использовать описательные имена переменных, он часто использует:reverse engineer vba code excel

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

или

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

Чтобы сделать вещи хуже, «лист расчета» также содержит некоторые формулы.

Есть ли какие-либо (бесплатные) инструменты, которые позволяют вам перепроектировать такой код (например, создать диаграмму Насси-Шнейдермана, блок-схемы)? Благодарю.

+0

Ой, я надеюсь, что создатель больше не работает для организации - или любой другой организации, если на то пошло! Извините, но я не могу придумать ничего, что могло бы помочь. Возможно, если каждая ячейка переменной используется во многих местах, вы можете экспортировать код, а затем написать что-то, чтобы заменить регулярное выражение на значения - не совсем уверен, что это поможет. –

+0

Спасибо, я думал о чем-то подобном. – cs0815

ответ

4

Я думаю, что предложение @JulianKnight «s должен работать Опираясь на это, вы можете: (. Например, Notepad ++)

  1. Скопируйте весь код в текстовый редактор, способный RegEx поиска/замены.
  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 
    

Очевидно, что вам нужно, чтобы исправить синтаксис строки вывода и переменную структуру имя для любой другой язык, который вы должны использовать.

P.S. Если вы не знакомы с RegEx (Regular Expressions), вы найдете множество статей в Интернете, объясняющих это.

+0

http://www.experts-exchange.com/articles/Programming/Languages/Visual_Basic/Using-Regular-Expressions-in-Visual-Basic-for-Applications-and-Visual-Basic-6.html –

Смежные вопросы