Excel自动化。选择更改时需要获取先前的选择

时间:2008-10-31 00:53:59

标签: excel automation

我正在进行导入(来自Excel)对话框,该对话框使用自动化功能允许用户选择要导入的单元格范围。当选择范围时,我正在使用事件接收器来捕获事件,并使用hilight第一行和第一列。我需要一种方法来取消上一个选择的第一行和第一列。我不认为在选择更改时获取所选范围是安全的,并且记住它,例如(为了简洁和清晰而使用伪代码):

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

我猜测只是坚持这个范围(从_Application :: Selection获得)而不释放它会导致各种各样的问题(但也许我错了)。我还没有找到复制范围的方法(IRange Copy只是将单元格内容从一个范围复制到另一个范围)。

我想我可以拿出范围的单元格地址并存储它们,然后重新创建一个范围,从我需要进行的时间点开始,但这似乎让我常常出现,我想知道是否有其他人有更优雅的解决方案。

3 个答案:

答案 0 :(得分:1)

如果您使用的是Excel VBA,则可以

Set Rng = Application.Selection

其中Rng是Excel Range对象。我想你可以从你所在的地方复制这个物体。

或者您可以按照建议将单元格地址存储在字符串变量中,当然这不需要任何对象。

不幸的是,Excel没有保留选择的历史记录。

答案 1 :(得分:0)

如果您不希望范围移动或更改大小,我会存储地址,然后使用Range(myAddress)返回范围对象以突出显示。

地址引用将始终引用工作表的固定区域,而范围将更新以反映单元格插入/删除。这些中的任何一个都可能适合您的意图,但请注意,如果范围引用被删除,则范围引用可能会变为未定义。

答案 2 :(得分:0)

每当您检测到新范围(您已经在做,突出显示第一行和第一列)时,将该范围的详细信息保存到某处的变量(假设它是单个矩形范围,存储第一行和最后一行,以及第一列和最后一栏)。

每当您在此之后检测到新范围时,您现在已经存储了之前范围的详细信息,以用于清除之前的高光(此事件将存储下次的详细信息,依此类推)。