Я написал C# Надстройку для VBA-редактора ms-access. См .: Как написать надстройку для среды разработки: «Microsoft Visual Basi c для приложений»
Моя надстройка ищет код, помечает его и - после второй клик - удаляет его.
Активный модуль содержит три строки кода:
Option Compare Database
'Delete This
Option Explicit
Это код, который я использую (конечно, сводится к проблеме):
int m_called = 0;
protected override void button_Click(CommandBarButton Ctrl, ref bool CancelDefault)
{
if (m_called == 0)
{
m_VBE.ActiveCodePane.SetSelection(2, 1, 2, 13);
}
else
{
m_VBE.ActiveCodePane.CodeModule.DeleteLines(2, 1);
m_VBE.ActiveCodePane.SetSelection(2, 2, 2, 2);
}
m_called++;
}
После запуска этого кода выбираются буквы: «Option Expli».
Это происходит только при настройке первого выбора через «SetSelection» (первая строка). Вместо этого, выбор точно такой же детали вручную приводит к правильному положению выделения (= как курсор в виде строки в начале второй строки перед «Option Explicit»).
Установка курсора на строку 1 будет работать нормально. Установка его на второй символ строки 2 (2, 2, 2, 2; между «O» и «p») также работает. Буквально любая другая позиция, кроме начала второй строки, работает просто отлично!
Так есть ли обходной путь для этой странной ошибки?
Это то, что я пробовал:
- я дважды вызывал SetSelection => не меняет результат
- Установка выбора перед удалением строки => не меняет результат