2008-10-31 1 views
0

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

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

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

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

ответ

1

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

Set Rng = Application.Selection 

где Rng является объектом Excel Range. Я предполагаю, что вы можете копировать этот объект с того места, где вы находитесь.

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

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

+0

Большое спасибо. Я подхожу к нему так. – Steve

0

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

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

0

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

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