Вы знаете, как отмечать строки в коде VBA? - PullRequest
0 голосов
/ 11 марта 2019

Я хотел бы различать строки в моем коде VBA, особенно пару команд.Я пытаюсь их каскадировать, но, несмотря на все мои усилия, иногда я теряюсь, какой код пары принадлежит / где он заканчивается, когда у меня больше циклов в других циклах.Есть ли способ пометить линии по цвету?Чтобы я мог расстроить пару команд по цвету?

Спасибо.

Джейк

Ответы [ 3 ]

3 голосов
/ 11 марта 2019

К сожалению, в редакторе VBA нет функции для сопоставления , если и закрывающего endif .Я использую Rubberduck, бесплатное дополнение к VBA.С его помощью вы можете легко сделать отступ для своего кода и сделать его более читабельным.

До:

Option Explicit

Function test(a As Integer)
Dim b As Integer

    b = 1
     If a > 1 Then
   b = 2
    If a > 21 Then
b = 3
Else
b = 4
    End If
       End If
    test = b
End Function

После обработки в Rubberduck:

Option Explicit

Function test(a As Integer)
    Dim b As Integer

    b = 1
    If a > 1 Then
        b = 2
        If a > 21 Then
            b = 3
        Else
            b = 4
        End If
    End If
    test = b
End Function

Это может сделать гораздо большечем это тоже.Вы можете скачать его здесь: http://rubberduckvba.com/

2 голосов
/ 11 марта 2019

Как было предложено, используйте индентор для обеспечения согласованного отступа. Существует несколько надстроек VBIDE, которые предоставляют эту функциональность, включая оригинальный Smart Indenter (бесплатный, только 32-разрядный) и Rubberduck (бесплатный, с открытым исходным кодом, также работает на 64-разрядных хостах - я м вкладчик).

Напишите меньшие процедуры

Процедуры, которые требуют столько же, сколько , чтобы выполнить обещание, данное их именем. Процедуры, которые делают одну вещь, обычно делают это хорошо, и их довольно легко назвать осмысленно.

Если у вас есть вложенный цикл, внутренний цикл может быть извлечен в свою собственную область. Если вложенный цикл имеет условное выражение, каждая условная ветвь может быть реорганизована и извлечена в свою собственную область. Вероятный результат состоит в том, что вы в конечном итоге удаляете избыточный код , потому что во многих случаях то, что вы извлекаете из одной ветви, очень похоже на то, что вы вытаскиваете из другой ветви, сохраните несколько значений параметров, которые, однажды рефакторинг, становятся актуальными параметрами; процедуры становятся меньше, более специализированными, они делают так мало, что называть их тривиально: «эта процедура делает X», и это совершенно ясно из кода.

Refactor Arrow Code

У Джеффа Этвуда есть отличная статья под названием Код выравнивающей стрелки . Если ваш код выглядит так:

If ...
    If ...
        If...
            For ...
               For ...
                   If ...
                       ...
                   End If
               Next
            Next
        End If
    End If
End If

... у вас есть код стрелки . Существуют известные, документированные методы для подлинного улучшения такого кода, и '~~~~~~BANNER COMMENTS~~~~~ не является одним из них.

  1. Заменить условия защитными оговорками.

    If SomeImportantCondition Then
        'procedure body
    End If
    

    становится:

    If Not SomeImportantCondition Then Exit Sub / Err.Raise ...
    'procedure body
    
  2. Извлечение условных блоков в их собственную область.

  3. Инвертировать условия для уменьшения вложенности.

  4. Возвращайтесь / выходите пораньше, если можете.

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

Rubberduck code metrics

Комментарии для высказывания почему , а не что . Пусть код скажет что .

2 голосов
/ 11 марта 2019

Функция маркировки как таковая отсутствует.Используйте функцию «Комментарий» с апострофом для создания разделов

например

'~~~~~PRINT FILE~~~~~~

'~~~~~CLOSE~~~~~~

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...