excel - 在 Excel VBA 中复制 (Ctrl-C) 形状会继承旧的位置值
问题描述
我正在尝试将形状从一个单元格复制到另一个单元格(因为创建了新行,因此不需要单独的宏来执行此操作)。
当我使用 Ctrl-C 和 Ctrl-V 执行此操作时,然后尝试运行以下宏...
Dim b As Object, rn As Integer, cn As Integer
Set b = ActiveSheet.Shapes(Application.Caller)
With b.TopLeftCell
rn = .Row
cn = .Column
End With
*then other stuff to manipulate that cell
...新形状最终具有与旧形状相同的 .Row 和 .Column 值,即从中复制的形状,因此最终控制了那个单元格而不是它实际所在的那个单元格。关于如何的任何想法我可以得到新的形状来找到它实际所在的单元格的 .Row 和 .Column 吗?
解决方案
如果您复制的形状没有唯一的名称,那么您的代码就会出现问题。
Application.Caller
是单击形状的名称 - 当形状的OnAction
属性调用它时,它会传递给您的宏。
因此,如果有 >1 个具有相同名称的形状会导致问题,因为无法保证您在调用 ActiveSheet.Shapes(Application.Caller) 时得到正确的形状