与为单个ActiveX或表单控件按钮生成代码相比,您可以使用以下VBA代码更轻松地完成目标。
以下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以允许两个按钮列,每个列都能够在不同的源列和目标列之间复制值。