Excel VBA: нажмите кнопку, которая дублирует, а затем вставляет строку
Я пишу код для кнопки в Excel с намерением взять номер строки нажатой кнопки, продублировать соответствующую строку, учитывая номер строки, а затем вставить и сдвинуть дублированную строку под исходной строкой кнопки нажатия. Смотрите фотографии, например: Нажмите здесь для изображения, прежде чем кнопка будет нажата. Нажмите здесь для изображения после нажатия кнопки.
Я пробовал несколько версий кода, основанных на решениях похожих проблем, которые я нахожу в Интернете, таких как здесь и здесь(среди других мест), но я не могу найти решение для моей повторяющейся ошибки, которая не может получить свойство Buttons класса Worksheet. Из того, что я собрал в Интернете об этой ошибке, часто это происходит, когда какой-либо аргумент, передаваемый в функцию листа, имеет неправильный тип или просто не имеет смысла. Ниже я опубликовал две итерации моих кодов;
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, так что весь мой подход мог быть ошибочным сам по себе, и я был бы очень признателен за любую помощь, я застрял на этом некоторое время.
1 ответ
Если ваш код находится в модуле, этот пример кода будет работать (замените CommandButton1 именем вашей кнопки):
Private Sub example()
MsgBox ActiveSheet.CommandButton1.TopLeftCell.Row
End Sub
... или если ваш код находится на листе:
Private Sub CommandButton1_Click()
MsgBox Me.CommandButton1.TopLeftCell.Row
End Sub