ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row返回错误的行

我正在使用一个小的macros来添加和删除受保护的工作表中的行。 为此,每一行都有一个“删除”button。 添加新行时,最后一行将被复制(包括“删除”button),然后清除其内容。

为了删除行,我交出了一些参数,包括“删除”button的(因此是项目的)行。 为此我使用:

RowToDelete = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row 

此代码适用于现有的行,但自上次打开工作簿(除最后一行以外)以来,添加的所有行都会失败。 对于所有其他的它将删除添加的下一行,而不是“真正的”。

我想这是一个caching问题,因为“Application.Caller”包含正确的string,但返回不再包含该名称的复制形状的行。

有没有办法清除相关的caching或强制Shapes()不使用caching?

非常感谢你的帮助。

我发现一个解决方法,我不太高兴,但现在必须做的伎俩。 我正在使用随机shapenames来避免错误的返回值。 看起来,如果形状名称在查找工作之前不存在。

 shp.Name = "Shape" & Format(i, "0000") & (Rnd * 999) 

必须是一些caching问题,因为button保存并重新打开工作簿后工作正常。

我有同样的问题。 这些button是由其他button,如你的创build。 但是,它只是在创buildbutton的代码中开始执行的,我开始为它添加一个名称。 所以另外一个不那么令人满意的处理方式就是没有“shp.name =”这一行。 当我把它拿出来的时候就停止了。 我的猜测是,按命名button的自然方式自然避免了这一点。 就像当你有一个工作表一样,删除它,并添加另一个工作表,它仍然会记住旧的工作表,并为新工作表命名一个更高的数字。 删除caching的代码会很好。 我相信有人知道如果这个问题被问到了不同的问题。 search给出:Application.Restart()我还没有尝试过。