我想在电子表格的某一行上添加一个按钮,当我单击该按钮时,该按钮会将内容从一个单元格复制到另一个单元格。我已经找到了执行此操作的代码,但是,我希望能够将按钮复制到新行并使其在该行上工作,并使用该行上的单元格,而无需进入并更改代码。
下面的代码是我拥有的代码,但它仅适用于其所编写的一行:
Sub CopyValue()
ActiveSheet.Range("O7").Value = ActiveSheet.Range("K7")
ActiveSheet.Range("R7").Value = ActiveSheet.Range("N7")
End Sub
并将K7
单元格内容复制到O7
单元格内容等。
如果我将按钮复制到下一行,它对该行不起作用,除非我进入并更改代码,这意味着添加新的按钮或宏名称和代码来执行此操作。
我想反复复制并添加一行,并让它在该行上起作用。单元格公式就是这样工作的,但是如何通过单击同一行上的按钮来触发单元格公式呢?
我需要能够在数百行或更多行上执行此操作,只需通过复制和粘贴,或复制行,或将按钮复制并粘贴到新行。
我有 Excel 2007。
答案1
您可以使用以下 VBA 代码来更轻松地实现您的目标,而不是为单个 ActiveX 或表单控件按钮生成代码。
以下 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 以允许二按钮列,每个按钮列都可以在不同的源列和目标列之间复制值。