Раздражающее поведение именования VBA - PullRequest
8 голосов
/ 03 мая 2011

Я использую Access 2007, и это поведение можно повторить следующим образом.

1) Создать новый файл accdb базы данных доступа.
2) Открыть базу данных и создать новый модуль vba.
3) Создайте 1-ю подпрограмму sub1:

Sub sub1()
    Msgbox Err.Description
End Sub

4) Создайте 2-ю подпрограмму sub2:

Sub sub2(Description as String)
    Msgbox Description
End Sub

В этот момент все нормально.
5) Но если я пойду и поменяю sub2так что «Description» читает «description», то есть меняет «D» на «d» следующим образом:

Sub sub2(description as String)
    Msgbox description
End Sub

Это также имеет эффект включения и изменяет sub1!Таким образом, теперь sub1 читает:

Sub sub1()
    Msgbox Err.description
End Sub

Почему «Err.Description» изменилось на «Err.description»?

Такое поведение, похоже, не влияет на действительную функциональность кода.так что никаких проблем нет.У меня большая проблема в том, что я экспортирую свои модули vba в виде текстовых файлов и помещаю их под контроль SVN.И совсем недавно из-за этого в хранилище было внесено множество бессмысленных «изменений».

Есть идеи, как этого избежать?

Ответы [ 2 ]

7 голосов
/ 03 мая 2011

Извините. Это жестко закодированная «особенность» VBA. См. Аналогичный вопрос здесь: Как восстановить регистр по умолчанию для переменной в VBA (Excel 2010)?

Способ, который я обошел с помощью управления исходным кодом, состоит в том, чтобы запустить мой репозиторий с помощью скрипта, который выполняет следующее:

  1. Восстановить все измененные файлы с расширениями кода VBA (создание резервных копий .orig файлов).
  2. Выполните сравнение файлов .orig без учета регистра с их аналогами
  3. Если нет изменений (кроме изменений в регистре), удалите файл .orig
  4. Для остальных файлов .orig (с реальными изменениями) удалите соответствующий файл и удалите расширение .orig

Это эффективно скрывает файлы, в которых только изменения имеют место (постоянная проблема при работе с файлами VBA, как вы испытываете). Он не скрывает изменения регистра в файле, в который были внесены другие изменения. Это далеко не идеальное решение, но лучшее, что я придумал.

0 голосов
/ 03 мая 2011

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

...