Как восстановить регистр по умолчанию для переменной в VBA (Excel 2010)?

В какой-то момент я случайно назвал переменную range (все в нижнем регистре), и с тех пор редактор Visual Basic for Applications отказывается использовать Range (в стиле Pascal); он автоматически исправит его до нижнего регистра. Как мне перезагрузить его «мозги», чтобы он забыл о своем прошлом проступке?

ПРИМЕЧАНИЕ. Я пытался выполнить глобальную замену всех, но в тот момент, когда я редактирую любую отдельную строку, она снова исправляется.

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


person Neil C. Obremski    schedule 31.01.2011    source источник
comment
Это очень очень незначительная косметическая проблема, пока вы не начнете пытаться поместить свой код VBA в системы контроля версий, которые не могут игнорировать регистр (например, mercurial). В этот момент это становится очень очень раздражающим.   -  person mwolfe02    schedule 31.01.2011


Ответы (2)


Вам нужно изменить имя переменной в строке объявления (например, оператор Dim) где-нибудь (на самом деле где угодно).

Это одна из самых раздражающих особенностей VBA IDE (как будто контроль версий уже недостаточно усложнен в VBA, постоянная смена регистра сводит меня с ума). Регистр переменных изменяется глобально в VBA IDE, независимо от фактической области действия переменной. Похоже, что VBA IDE использует подход, основанный на самых последних объявлениях.

Обычно все, что вам нужно сделать, это просто обновить регистр где-нибудь в строке объявления, но VBA может быть упрямым. Я еще не взломал код полностью.

Примечание. Как отмечает @Scorchio в комментариях ниже, регистр переменной изменяется глобально в текущем проекте; другие проекты, которые могут быть открыты в интегрированной среде разработки VBA (например, другие книги при работе в Excel), НЕ затрагиваются.

ОБНОВЛЕНИЕ: сегодня я расширил эту запись в своем блоге Access/VBA: Функция изменения регистра в VBA

person mwolfe02    schedule 31.01.2011
comment
Га, конечно! Я просто вставил Dim Range как String, VBA исправил все вхождения в него, а затем удалил эту строку. Спасибо :) - person Neil C. Obremski; 31.01.2011
comment
Как я выжил без этих знаний?! - person Simon Cowen; 01.02.2011
comment
Это одна из самых раздражающих особенностей VBA IDE. Ты сделал это. терпеть не могу такое поведение - person JohnZaj; 21.03.2013
comment
Я думал, что теряю его - спасибо, что прояснили это. - person DaveU; 26.09.2014
comment
Регистр переменных изменяется глобально в VBA IDE, независимо от фактической области действия переменной. Я не думаю, что это правда, я тестировал это в Excel 2010, и похоже, что это глобальный проект, а не глобальный IDE. - person Scorchio; 16.01.2015
comment
@Scorchio: Спасибо за подсказку. Я делаю большую часть своей работы с VBA в MS Access, где я работаю исключительно с одним открытым проектом. Для меня нет практической разницы между IDE-global и project-global, возможно, поэтому я никогда не обращал на это внимания. Я обновил свой ответ, чтобы включить ваш комментарий. - person mwolfe02; 16.01.2015
comment
Вы, вероятно, только что спасли горсть моих волос. Спасибо! - person Boris; 13.07.2016

Побеждает последняя декларация вовремя.

  1. Перейдите на первую строку и введите Dim Range As String
  2. Перейти к следующей строке
  3. Вернитесь и удалите свой Dim Range As String
person thanos.a    schedule 26.08.2015
comment
Точно так же, если вам удалось назвать переменную так же, как стандартный объект, и теперь у объекта перепутался регистр, проделайте аналогичный трюк: Private WithEvents querytable As querytable, а затем Private WithEvents QueryTable As QueryTable. Нажмите Enter, оба должны быть написаны с большой буквы. - person mcw; 07.10.2015