由于说“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