2008-10-31 37 views
0

我正在处理使用自动化的导入(来自Excel)对话框,以允许用户选择要导入的单元格区域。当选择范围时,我使用事件接收器来捕获事件并确认第一行和第一列。我需要有一种方法来取消上一个选择的第一行和第一列。我不认为它是安全的先手选择的范围在挑选的时候变化,并记住它,如(伪代码为简明起见):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 2008-10-31 17:42:11

0

如果你不希望的范围内移动或改变大小我将存储的地址,后来使用范围(myAddress)返回范围对象突出。

地址引用将始终引用表单的固定区域,而范围将被更新以反映单元插入/删除。这些都可能适合您的意图,但请注意,如果它所包含的单元格被删除,范围参考可能会变得不确定。

0

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

每当你发现后,一个新的范围,你现在已经保存的上一范围的细节用来清除以前的亮点(与本次活动将存储以备下一次的细节,等等)。

相关问题