Подтвердить что ты не робот

Рефакторинг кода vba - есть ли какие-нибудь инструменты для оказания помощи?

Я пытаюсь реорганизовать свой код VBA. Я так привык использовать рефакторинг в Java-среде IDE в течение нескольких лет. Поддерживает ли редактор VBA какой-либо рефакторинг или какие-либо надстройки? У MZ Tools такой функции не было.

Я хочу иметь возможность сделать хотя бы следующее: 1. Переименовать переменные 2. Разделить процедуры в подпроцедуры, чтобы сделать код более читаемым 3. Измените область действия переменной от глобальной к процедуре и наоборот

4b9b3361

Ответ 1

Отказ от ответственности. Я активно участвую в этом проекте.


Rubberduck является надстройкой с открытым исходным кодом для VBA IDE в рамках [очень] активной разработки, что включает эту функциональность.

Версия 1.2 включает инструмент рефакторинга метода извлечения:

extract method refactoring

Версия 1.3 включает рефакторинг переименования:

rename refactoring

Версия 2.0 (бета доступна, все еще стабилизируется) включает в себя десяток рефакторингов:

Rubberduck 2.0 refactorings

  • Ввести параметр повышает локальную переменную до параметра
  • Ввести поле способствует локальной переменной в область видимости модуля
  • Encapsulate Field превращает общедоступное поле в свойство
  • Move Closer to Usage перемещает поле, которое используется только в 1 процедуре, в эту процедуру. Или перемещает локальную переменную сразу же после ее первого использования.
  • Extract Interface позволяет вам выбирать, какие члены класса извлекаются в интерфейс, создает для них новые классы классов с заглушками и делает исходный класс реализованным извлеченным интерфейсом.
  • Интерфейс реализации создает заглушки для всех членов нереализованного интерфейса, поэтому вам не нужно создавать их вручную, выбирая их по одному в раскрывающемся списке панели:

    Implements IClass1
    
    Public Sub IClass1_DoSomething()
        Err.Raise 5 'TODO implement interface member
    End Sub
    
    Public Function IClass1_GetFoo() As Integer
        Err.Raise 5 'TODO implement interface member
    End Function
    
    Sub DoSomething()
    
    End Sub
    
    Function GetFoo() As Integer
    
    End Function
    

Дополнительные инструменты рефакторинга находятся в дорожной карте проекта, на которой вы можете следовать GitHub.

Ответ 2

Единственным инструментом рефакторинга, который я знаю в VBA, является Ctrl + F и Ctrl + R.

Ответ 3

Я использую V-Tools для работы с рефакторингом, так как он будет искать/заменять объекты, а не только код VBA. http://www.skrol29.com/us/vtools.php

Ответ 4

Да, есть.... почти

В старые добрые времена я использовал этот. http://www.moshannon.com/speedferret.html

помог мне много, и я думаю, что у меня есть 3,5-дюймовые диски;)

Трюк заключается в том, чтобы скопировать ваш код excel в Access или VB6 и провести там рефакторинг. Замена области: решение - это творческое именование и использование replace. процедуры плевки... ну, это руководство, извините.

Обычно это не стоит, если у вас нет какого-то серьезного кода excel vba, я бы рекомендовал преобразовать большую часть его в dll С# или VB.Net, где вы можете делать рефакторинг, тестирование и некоторую современную магию и делать только как можно меньше VBA.