Excel 将行复制到宏按钮的行

Excel 将行复制到宏按钮的行,excel,vba,Excel,Vba,我曾尝试将此作为一个中间步骤,但效果良好: Sub Test_v1() Sheets("Code").Range("A2").EntireRow.Copy Range("A5") End Sub 上述代码始终复制到第5行。我希望它复制到宏按钮当前所在的行。我尝试过这个,但它不起作用: Sub Test_v2() Sheets("Code").Range("A2").EntireRow.Copy ActiveSheet.Buttons(Application.Caller).TopLeftCel

我曾尝试将此作为一个中间步骤,但效果良好:

Sub Test_v1()
Sheets("Code").Range("A2").EntireRow.Copy Range("A5")
End Sub
上述代码始终复制到第5行。我希望它复制到宏按钮当前所在的行。我尝试过这个,但它不起作用:

Sub Test_v2()
Sheets("Code").Range("A2").EntireRow.Copy ActiveSheet.Buttons(Application.Caller).TopLeftCell
End Sub
假设TopLeftCell返回一个范围。那为什么这不起作用呢?我如何才能使其工作?

请尝试(如果您的按钮是表单类型):

请尝试(如果您的按钮是表单类型):


你什么意思,它不起作用?有错误吗?请记住,按钮的
TopLeftCell
必须是A列,否则范围大小将不相同,并将返回错误。如果按钮位于任何其他列中,则使用类似以下内容:
Range(“A”&ActiveSheet.Buttons(Application.Caller.TopLeftCell.Row)
。请注意,
ActiveSheet
或隐式工作表引用的使用本身也不是最佳的。是的,它抛出了一个错误。我不明白A栏的意思。为什么ActiveSheet或隐式引用不好?A列的重要性很简单。假设我们有一行10个块,如
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 我们试着把这些块抬起,放在一个空的行中,有10个块的位置,比如
□ □ □ □ □ □ □ □ □ □。。。是的,行得通。现在,如果我们试着把这十个块放在一个只有七个块的地方,会发生什么□ □ □ □ □ □ □…哎呀,那不合适!一行中的单元格也是如此。您复制了一整行单元格,如果您试图将这些单元格放在另一行大小不同的单元格中,则会返回一个错误。@JodV,感谢您对假人的解释!你什么意思,它不起作用?有错误吗?请记住,按钮的
TopLeftCell
必须是A列,否则范围大小将不相同,并将返回错误。如果按钮位于任何其他列中,则使用类似以下内容:
Range(“A”&ActiveSheet.Buttons(Application.Caller.TopLeftCell.Row)
。请注意,
ActiveSheet
或隐式工作表引用的使用本身也不是最佳的。是的,它抛出了一个错误。我不明白A栏的意思。为什么ActiveSheet或隐式引用不好?A列的重要性很简单。假设我们有一行10个块,如
■ ■ ■ ■ ■ ■ ■ ■ ■ ■ 我们试着把这些块抬起,放在一个空的行中,有10个块的位置,比如
□ □ □ □ □ □ □ □ □ □。。。是的,行得通。现在,如果我们试着把这十个块放在一个只有七个块的地方,会发生什么□ □ □ □ □ □ □…哎呀,那不合适!一行中的单元格也是如此。您复制了一整行单元格,如果您试图将这些单元格放在另一行大小不同的单元格中,则会返回一个错误。@JodV,感谢您对假人的解释!我认为OP不想复制那一行。他想粘贴到单击按钮的
TopLeftCell
行中。请注意,要粘贴值的
范围
可以位于
Copy
语句后面(如给定示例中所示)。@FaneDuru:它起作用了,这正是我想要的!非常感谢你!你能解释一下我做错了什么,你做对了什么吗?@Usal:很高兴我能帮助你!在这种情况下,我们在此处勾选“代码左侧”复选框,以使其成为可接受的答案。如果其他人会寻找类似的东西,他会知道答案代码是有效的……我认为OP不想复制那一行。他想粘贴到单击按钮的
TopLeftCell
行中。请注意,要粘贴值的
范围
可以位于
Copy
语句后面(如给定示例中所示)。@FaneDuru:它起作用了,这正是我想要的!非常感谢你!你能解释一下我做错了什么,你做对了什么吗?@Usal:很高兴我能帮助你!在这种情况下,我们在此处勾选“代码左侧”复选框,以使其成为可接受的答案。如果其他人会寻找类似的东西,他会知道答案代码是有效的。。。
 Sheets("Code").Range("A2").EntireRow.Copy _
   Cells(ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row, "A")