2010-03-10 71 views

回答

2

則在Excel中沒有這樣的事件。當行被插入或通過Worksheet.ChangeApplication.SheetChange事件刪除您可以拿起。

有關此的詳細論述見迪克Kusleika文章Deleted Rows

但是,如果您希望實現的目標是確保您的範圍對象在插入行時調整大小,那麼如您所述,there is is nothing that you need to do,因爲Range對象會自動擴展。

希望這有助於!

+0

如何在範圍的末尾添加一列,再次在Worksheet.Change上添加?這不會是Range.Resize ... – HeinrichStack 2013-05-06 14:39:14

0

範圍自動調整大小,所以你通常不應做任何事情到你的對象,並沒有一個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表單方式,那麼這將在表單重命名之後以有趣的方式中斷,或者新表單獲得舊錶單的名稱所以你必須考慮到這一點。