Автоматизация Excel. Нужно получить предыдущий выбор при изменении выбора - PullRequest
0 голосов
/ 31 октября 2008

Я работаю над диалоговым окном импорта (из Excel), которое использует автоматизацию, чтобы позволить пользователю выбирать диапазоны ячеек для импорта. Когда диапазон выбран, я использую приемник событий, чтобы перехватить событие и выделить первую строку и первый столбец. Мне нужен способ отключить первую строку и столбец предыдущего выделения. Я не думаю, что безопасно просто получить выбранный диапазон во время изменения выделения и запомнить его, например, (psuedocode для краткости и ясности):

OnSelectionChange()
 {
 if (m_PrevSelection)
    UnHilite(m_PrevSelection);
 HiliteCurrentSelection();
 GetSelectedRange(m_PrevSelection);
}

Я предполагаю, что простое удержание этого диапазона (полученного из _Application :: Selection) без его освобождения вызовет всевозможные проблемы (но, возможно, я ошибаюсь). Я не нашел способа скопировать диапазон (IRange Copy просто копирует содержимое ячейки из одного диапазона в другой).

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

Ответы [ 3 ]

1 голос
/ 31 октября 2008

Если бы вы работали в Excel VBA, вы могли бы

Set Rng = Application.Selection

где Rng - объект диапазона Excel. Я полагаю, вы могли бы воспроизвести этот объект оттуда, где вы находитесь.

Или вы можете сохранить адрес ячейки в строковой переменной, как вы предложили, что, конечно, не требует никаких объектов.

К сожалению, Excel не хранит историю выборов.

0 голосов
/ 31 октября 2008

Всякий раз, когда вы обнаруживаете новый диапазон (что вы уже делаете, чтобы выделить первую строку и столбец), сохраняйте детали этого диапазона где-то в переменных (предполагая, что это один прямоугольный диапазон, сохраняйте первую и последнюю строки, и первый и последний столбец).

Всякий раз, когда вы обнаруживаете новый диапазон после этого, теперь вы сохраняете детали предыдущего диапазона, чтобы использовать их для очистки предыдущих выделений (и это событие сохранит детали для следующего раза и т. Д.).

0 голосов
/ 31 октября 2008

Если вы не ожидаете, что диапазон переместится или изменится в размере, я бы сохранил адрес и позже использовал Range (myAddress), чтобы вернуть объект диапазона для выделения.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...