我正在进行导入(来自Excel)对话框,该对话框使用自动化功能允许用户选择要导入的单元格范围。当选择范围时,我正在使用事件接收器来捕获事件,并使用hilight第一行和第一列。我需要一种方法来取消上一个选择的第一行和第一列。我不认为在选择更改时获取所选范围是安全的,并且记住它,例如(为了简洁和清晰而使用伪代码):
OnSelectionChange()
{
if (m_PrevSelection)
UnHilite(m_PrevSelection);
HiliteCurrentSelection();
GetSelectedRange(m_PrevSelection);
}
我猜测只是坚持这个范围(从_Application :: Selection获得)而不释放它会导致各种各样的问题(但也许我错了)。我还没有找到复制范围的方法(IRange Copy只是将单元格内容从一个范围复制到另一个范围)。
我想我可以拿出范围的单元格地址并存储它们,然后重新创建一个范围,从我需要进行的时间点开始,但这似乎让我常常出现,我想知道是否有其他人有更优雅的解决方案。
答案 0 :(得分:1)
如果您使用的是Excel VBA,则可以
Set Rng = Application.Selection
其中Rng是Excel Range对象。我想你可以从你所在的地方复制这个物体。
或者您可以按照建议将单元格地址存储在字符串变量中,当然这不需要任何对象。
不幸的是,Excel没有保留选择的历史记录。
答案 1 :(得分:0)
如果您不希望范围移动或更改大小,我会存储地址,然后使用Range(myAddress)返回范围对象以突出显示。
地址引用将始终引用工作表的固定区域,而范围将更新以反映单元格插入/删除。这些中的任何一个都可能适合您的意图,但请注意,如果范围引用被删除,则范围引用可能会变为未定义。
答案 2 :(得分:0)
每当您检测到新范围(您已经在做,突出显示第一行和第一列)时,将该范围的详细信息保存到某处的变量(假设它是单个矩形范围,存储第一行和最后一行,以及第一列和最后一栏)。
每当您在此之后检测到新范围时,您现在已经存储了之前范围的详细信息,以用于清除之前的高光(此事件将存储下次的详细信息,依此类推)。