Эта проблема не возникает, потому что вы используете имена переменных, которые соответствуют встроенному свойству. Это происходит просто потому, что вы используете два разных варианта написания одной и той же переменной. Если вы использовали iRow
в одном модуле и irow
в другом, вы все равно получите ту же проблему.
Вы не можете остановить это поведение. IDE VBA автоматически изменяет имена подпрограмм, функций, переменных и свойств в соответствии с регистром последнего оператора объявления, который был отредактирован. Затем он также запоминает регистр, используемый для всех будущих экземпляров, введенных / отредактированных где-либо в коде.
При выполнении этого переименования среда IDE не различает guish между локальными и глобальными переменными или свойствами разные классы. Если вы изменяете регистр в любом месте, он будет обновляться и использоваться везде.
Это действительно полезно, чтобы предотвратить случайные ошибки кода. VBA нечувствителен к регистру, и использование другого регистра не приведет к созданию других переменных. Попытка управлять различными переменными на основе регистра, даже в разных модулях, не является хорошей практикой.
Если они локальные и различаются без риска путаницы, то вы все равно можете использовать одинаковое написание регистра. Зачем иметь одно соглашение об именах в одном модуле и другое соглашение об именах в другом модуле?
Однако, если вам нужно различать guish между переменными в разных модулях, тогда вы должны использовать разные символы - в любом случае, и при этом проблема не возникнет.
Это поведение также помогает вам гарантировать, что код вводится правильно при вводе, особенно если вы объявляете все переменные, подпрограммы и т. д. c с at хотя бы одна заглавная буква. Затем вы сможете редактировать весь код, используя только нижний регистр, что сокращает усилия, и тогда все, что правильно написано, будет автоматически преобразовано в объявленный регистр. Если вы вводите переменную в нижнем регистре, и она не меняет автоматически регистр, то вы сразу же знаете, что неправильно набрали переменную, вместо того, чтобы обнаруживать ошибку только при попытке скомпилировать / запустить.
Обратите внимание, что Проблема, которую действительно возникает из-за использования встроенных свойств в качестве имен для переменных и подпрограмм, заключается в том, что автоматическое c изменение регистра также применимо и здесь. Поэтому, если вы определите переменную как VALue
, она будет переименовывать свойство .Value
везде, где она используется.
Если вы затем определите подпрограмму как value
, она переименует обе существующие VALue
переменная, а также свойство .Value
.
Если вы следуете хорошим правилам именования и нигде не используете имена, у вас не возникнет этой проблемы.