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
Другие вопросы по тегам