由於說「how to handle resize of range upon insert column/row in Excel via VSTO?」一個簡單的方法:在Excel VSTO中插入行事件?
有沒有在Excel VSTO的方式來處理‘插入行’或‘插入列’事件?
由於說「how to handle resize of range upon insert column/row in Excel via VSTO?」一個簡單的方法:在Excel VSTO中插入行事件?
有沒有在Excel VSTO的方式來處理‘插入行’或‘插入列’事件?
則在Excel中沒有這樣的事件。當行被插入或通過Worksheet.Change或Application.SheetChange事件刪除您可以拿起。
有關此的詳細論述見迪克Kusleika文章Deleted Rows。
但是,如果您希望實現的目標是確保您的範圍對象在插入行時調整大小,那麼如您所述,there is is nothing that you need to do,因爲Range對象會自動擴展。
希望這有助於!
如何在範圍的末尾添加一列,再次在Worksheet.Change上添加?這不會是Range.Resize ... – HeinrichStack 2013-05-06 14:39:14
範圍自動調整大小,所以你通常不應做任何事情到你的對象,並沒有一個RowInserted事件。如果要在插入行時收到通知,則必須改爲使用Worksheet.Change
。
我發現要檢查是否行已在此事件處理程序被更改的最快方法是比較Target.Address == Target.EntireRow.Address
。當插入,刪除或使用剪切/插入操作時,這些將返回true。對於列,您可以使用Target.EntireColumn
。請注意,如果插入失敗,這也將返回true(例如,如果有一個數據透視表,並且Excel會中止插入)
對我來說,這正是我想要的,可以在失敗的操作上運行。
private void ActiveWorksheet_Change(Excel.Range Target)
{
if(Target.Address == Target.EntireRow.Address)
{
//do stuff on insert/delete/cut+insert
}
}
如果你需要得到的只有插入,刪除或剪切行/插入,或者如果你需要做一些不同的操作失敗時,你可以做我第一次嘗試:
將Worksheet.UsedRange.Rows.Count
存儲在Dictionary<string, int>
中,Worksheet.Name
作爲關鍵。然後,將新的Worksheet.UsedRange.Rows.Count
與保存的計數進行比較並採取相應措施。請注意,如果沒有找到方法來捕獲這些類型的事件並更新/刪除字典條目,但是我還沒有找到更好的ID表單方式,那麼這將在表單重命名之後以有趣的方式中斷,或者新表單獲得舊錶單的名稱所以你必須考慮到這一點。
似乎沒有這樣的事件,但Range對象自動適應插入的行,列和單元格。 – zzandy 2010-03-10 15:20:37