Вы можете использовать следующий код VBA, чтобы достичь своей цели гораздо проще, чем генерировать код для отдельных кнопок ActiveX или Form Control.
Следующий VBA позволяет пользователю дважды щелкнуть ячейку в указанном столбце ("столбец кнопки"), и код скопирует значения в той же строке, которую пользователь дважды щелкнул, из указанного в столбцах источника и назначения. Этот код работает со всеми строками на рабочем листе, не требуя изменения кода.
Не поддавайтесь повторным ссылкам кода на ячейки в строке 1 (например, O1
и K1
). В каждом из этих случаев .Column
используется, потому что нас интересует только рассматриваемый столбец . Строка, которой будут манипулировать, всегда та же самая строка, которую пользователь дважды щелкает
В редакторе Excel VBA (нажмите Alt+F11, чтобы открыть) перейдите к модулю рабочей таблицы и вставьте следующий код:
Private Sub
Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
On Error GoTo Quit
'Copy values between columns on same row that user double-clicks
'Quit if Target range includes more than one cell
If Target.Count > 1 Then Exit Sub
With ActiveSheet
'Here, specify the worksheet column the user can double-click to activate this
'routine. For the "B" column, in the Range method specify cell "B1" (all cells
'in column will be used, not just that on row 1).
If Target.Column = .Range("B1").Column Then
.Cells(Target.Row, .Range("O1").Column) = .Cells(Target.Row, .Range("K1").Column)
.Cells(Target.Row, .Range("R1").Column) = .Cells(Target.Row, .Range("N1").Column)
Cancel = True 'Cancel the double-click
End If
'Here you can specify a second "button column" with its own set of copy actions.
If Target.Column = .Range("C1").Column Then
.Cells(Target.Row, .Range("E1").Column) = .Cells(Target.Row, .Range("F1").Column)
.Cells(Target.Row, .Range("G1").Column) = .Cells(Target.Row, .Range("H1").Column)
Cancel = True 'Cancel the double-click
End If
End With
Quit:
End Sub
Как написано, код будет запущен, когда пользователь дважды щелкнет любую ячейку в столбце B
Чтобы изменить это, измените эту строку кода так, чтобы она указала на столбец, который вы хотите использовать в качестве "столбца кнопки":
If Target.Column <> .Range("B1").Column Then Exit Sub
Остальная часть кода должна быть понятна, но задавайте любые вопросы, которые у вас есть.
Изменить: я изменил VBA, чтобы разрешить два столбца кнопки, каждый из которых может копировать значения между различными столбцами источника и назначения.