2008-10-31 50 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

每當您檢測到一個新的範圍(您已經在做此操作,要突出顯示第一行和第一列),請將該範圍的詳細信息保存到某處的變量中(假設它是一個單一的矩形範圍,存儲第一行和最後一行,和第一列和最後一列)。

每當你發現後,一個新的範圍,你現在已經保存的上一範圍的細節用來清除以前的亮點(與本次活動將存儲以備下一次的細節,等等)。

相關問題