Я написал надстройку C # для VBA-редактора ms-access. См.: Как написать надстройку для среды разработки: Microsoft Visual Basic для приложений
Моя надстройка ищет код, отмечает его и — после второго клика — удаляет.
В активном модуле есть три строки кода:
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 => результат не меняется
- Установка выделения перед удалением строки => не меняет результат