Excel VBA: 点击复制然后插入行的按钮
Excel VBA: click button that duplicates and then inserts the row
我正在为 Excel 中的一个按钮编写代码,目的是获取单击按钮的行号,复制给定行号的相应行,然后将复制的行插入并移动到单击按钮的原始行。 例如看图片:
Click here for picture before button is pressed.
Click here for picture after button is pressed.
我已经根据我在网上找到的类似问题的解决方案尝试了几次代码修订,例如 here and here(以及其他地方),但是我找不到解决我重复出现的错误的方法 无法获取工作表 class 的按钮 属性。根据我在网上收集到的有关此错误的信息,当传递给工作表函数的任何参数类型不正确或根本没有意义时,它经常发生。下面我发布了我的代码的两个迭代;
Private Sub CorrugatedR_Click()
Dim b As Object, RowNumber As Integer
ActiveSheet.Activate
Set b = ActiveSheet.Buttons("CorrugatedR")
With b.TopLeftCell
RowNumber = .Row
Rows(RowNumber + 1).Insert Shift:=xlDown
Rows(RowNumber).Copy Rows(RowNumber + 1)
End With
End Sub
另一个版本,应该做同样的事情(我一直在做很多事情):
Private Sub CorrugatedR_Click()
Dim b As Object, RowNumber As Integer
ActiveSheet.Activate
ActiveSheet.Buttons("CorrugatedR").Select
ActiveSheet.Buttons("CorrugatedR").Copy
b.Paste
With b.TopLeftCell
RowNumber = .Row
End With
Rows(RowNumber + 1).Insert Shift:=xlDown
Rows(RowNumber).Copy Rows(RowNumber + 1)
End Sub
一个重要的提示是,最初我没有调用按钮的名称本身:ActiveSheet.Buttons("CorrugatedR")
,而是实现了 ActiveSheet.Buttons(Application.Caller)
,因为有几个人提出了这个建议,但这给了我另一个错误 Application.Caller = 错误 2023。经过研究,我认为这些问题都与同一个反复出现的问题有关,即与打字或我不知道的事情有关;我尝试实施并使用解决方案中的信息来解决发现的相同错误 ,但仍然没有成功。我的直觉是问题可能出在我设置 b
的代码中:Set b = ActiveSheet.Buttons("CorrugatedR")
我还是 VBA 和 Excel 的新手,所以我的整个方法本身可能会被误导,我真的很感激任何帮助,我一直坚持这个一会儿。
如果您的代码在 模块 中,此示例代码将起作用(将 CommandButton1 替换为您的按钮名称):
Private Sub example()
MsgBox ActiveSheet.CommandButton1.TopLeftCell.Row
End Sub
...或者如果您的代码位于 sheet:
Private Sub CommandButton1_Click()
MsgBox Me.CommandButton1.TopLeftCell.Row
End Sub
我正在为 Excel 中的一个按钮编写代码,目的是获取单击按钮的行号,复制给定行号的相应行,然后将复制的行插入并移动到单击按钮的原始行。 例如看图片: Click here for picture before button is pressed. Click here for picture after button is pressed.
我已经根据我在网上找到的类似问题的解决方案尝试了几次代码修订,例如 here and here(以及其他地方),但是我找不到解决我重复出现的错误的方法 无法获取工作表 class 的按钮 属性。根据我在网上收集到的有关此错误的信息,当传递给工作表函数的任何参数类型不正确或根本没有意义时,它经常发生。下面我发布了我的代码的两个迭代;
Private Sub CorrugatedR_Click()
Dim b As Object, RowNumber As Integer
ActiveSheet.Activate
Set b = ActiveSheet.Buttons("CorrugatedR")
With b.TopLeftCell
RowNumber = .Row
Rows(RowNumber + 1).Insert Shift:=xlDown
Rows(RowNumber).Copy Rows(RowNumber + 1)
End With
End Sub
另一个版本,应该做同样的事情(我一直在做很多事情):
Private Sub CorrugatedR_Click()
Dim b As Object, RowNumber As Integer
ActiveSheet.Activate
ActiveSheet.Buttons("CorrugatedR").Select
ActiveSheet.Buttons("CorrugatedR").Copy
b.Paste
With b.TopLeftCell
RowNumber = .Row
End With
Rows(RowNumber + 1).Insert Shift:=xlDown
Rows(RowNumber).Copy Rows(RowNumber + 1)
End Sub
一个重要的提示是,最初我没有调用按钮的名称本身:ActiveSheet.Buttons("CorrugatedR")
,而是实现了 ActiveSheet.Buttons(Application.Caller)
,因为有几个人提出了这个建议,但这给了我另一个错误 Application.Caller = 错误 2023。经过研究,我认为这些问题都与同一个反复出现的问题有关,即与打字或我不知道的事情有关;我尝试实施并使用解决方案中的信息来解决发现的相同错误 b
的代码中:Set b = ActiveSheet.Buttons("CorrugatedR")
我还是 VBA 和 Excel 的新手,所以我的整个方法本身可能会被误导,我真的很感激任何帮助,我一直坚持这个一会儿。
如果您的代码在 模块 中,此示例代码将起作用(将 CommandButton1 替换为您的按钮名称):
Private Sub example()
MsgBox ActiveSheet.CommandButton1.TopLeftCell.Row
End Sub
...或者如果您的代码位于 sheet:
Private Sub CommandButton1_Click()
MsgBox Me.CommandButton1.TopLeftCell.Row
End Sub