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 = Error 2023. Проведя исследование, я думаю, что обе эти проблемы связаны с одной и той же повторяющейся проблемой, связанной с набором текста или с чем-то, о чем я не знаю; Я попытался внедрить и использовать информацию из решения той же ошибки, найденной здесь, и все равно не повезло. Моя интуиция подсказывает, что проблема может заключаться в коде, где я установил b: Set b = ActiveSheet.Buttons("CorrugatedR")

Я все еще новичок в VBA и Excel, поэтому весь мой подход может быть ошибочным сам по себе, и я был бы очень признателен за любую помощь, я некоторое время застрял на этом.


person M. Dreisbach    schedule 13.07.2017    source источник


Ответы (1)


Если ваш код находится в модуле, этот пример кода будет работать (замените CommandButton1 названием вашей кнопки):

Private Sub example()
    MsgBox ActiveSheet.CommandButton1.TopLeftCell.Row
End Sub

...Или, если ваш код находится на листе:

Private Sub CommandButton1_Click()
    MsgBox Me.CommandButton1.TopLeftCell.Row
End Sub
person David    schedule 13.07.2017
comment
Это сработало, я изначально использовал командную кнопку ActiveX Controls; когда вместо этого я внедрил кнопку Элементы управления формой, я смог Назначить макрос, и оттуда мой старый код заработал. Спасибо, что указали мне правильное направление, я очень ценю это! - person M. Dreisbach; 14.07.2017