添加按钮以复制Excel行


2

我想在电子表格的行中添加一个按钮,当我单击按钮时,该按钮会将内容从一个单元格复制到另一个单元格。我已经找到了执行此操作的代码,但是,我希望能够将按钮复制到新行并使其在该行上工作,并且该行上有单元格,而无需进入并更改代码。

下面的代码是我所拥有的代码,但它仅针对一行编写:

Sub CopyValue()

    ActiveSheet.Range("O7").Value = ActiveSheet.Range("K7")
    ActiveSheet.Range("R7").Value = ActiveSheet.Range("N7")

End Sub

并将K7细胞内容复制到O7细胞内容等。

如果我复制下一行的按钮,它对该行不起作用,除非我进入并更改代码,这意味着添加一个新的按钮或宏名称和代码来执行此操作。

我想一次又一次地复制并添加一行,让它在那一行上运行。单元格公式以这种方式工作,但如何通过单击同一行上的按钮来触发单元格公式?

我需要能够在数百或更多行上执行此操作,只需复制和粘贴,或复制行,或将按钮复制并粘贴到新行。

我有Excel 2007。


1
您的应用程序是否要求您有按钮?是否可以让用户单击要影响的行上的单元格?实现代码非常简单。
Twisty Impersonator

是的我可以使用一个单元格,这将是好的,但我不知道要添加到单元格的代码还没有这样做,因为我认为它将与下面的代码不同。
Mark Nev 2014年

到目前为止我有一个单元格作为按钮:Private Sub Worksheet_SelectionChange(ByVal Target As Range)如果ActiveCell.Address =“$ A $ 1”那么'在这里'代码就好像它是你的Button_Click事件。MsgBox“即时按钮!” End If End Sub
Mark Nev

我需要弄清楚如何单击第7行等按钮并将值从col K7复制到col O7,将col N7复制到col R7。这就对了。需要能够复制按钮并将其粘贴到任何行上的那个位置,并让它也可以单独用于该行。所以我基本上可以将该单元格添加到电子表格的每一行,它适用于每一行。期待您的回复感谢您的时间和愿意提供帮助。
Mark Nev 2014年

Answers:


0

与为单个ActiveX或表单控件按钮生成代码相比,您可以使用以下VBA代码更轻松地完成目标。

以下VBA允许用户双击指定列中的单元格(“按钮列”),代码将复制用户在您指定的源列到目标列中双击的同一行上的值。此代码适用于工作表中的所有行,而无需您以任何方式修改代码。

不要被代码重复引用第1行上的单元格(例如O1K1)抛弃。在每种情况下,.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以允许两个按钮列,每个列都能够在不同的源列和目标列之间复制值。


如果我在我设置的列之前的任何地方添加了acolumn,我是否需要进入并更改代码才能再次运行?
Mark Nev

另外,如果我想在另一行中添加这样的另一个按钮来执行相同的操作但是使用不同的单元格,那么必须更改以使2代码在没有名称冲突等情况下运行?我已经尝试复制它并将其粘贴到下面,并更改列等,但之后都没有工作,它说有一个例程名称问题,所以我假设他们需要不同的子例程名称。我改名的那部分是为了避免冲突吗?
Mark Nev

如果我添加一列......我是否需要进入并更改代码?是。更改工作表的结构时,VBA代码不会更新。B只要代码的编写方式,代码就会查看列。
Twisty Impersonator

如果我想在另一行中添加这样的另一个按钮来做同样的事情,但是使用不同的单元格我编辑了我的答案,提供了一个方法,有两个按钮列,每个按钮列的复制操作都有不同的行为。您可以根据需要复制新代码块以获得尽可能多的按钮列/副本列组合。如果这个答案有所帮助,请务必保留。
Twisty Impersonator

先生,非常棒,非常感谢。你是明星。非常感谢您的时间......
Mark Nev

-2

我建议使用双击Z列中单元格的单元格按钮方法来触发工作Worksheet_BeforeDoubleClick表事件宏。

右键单击工作表的名称选项卡,然后选择View Code。当VBE打开时,将以下内容粘贴到标题为Book1 - Sheet1(代码)的表格中。请注意,这不是包含您之前用作示例的代码的模块表。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("Z:Z")) Is Nothing Then
        If LCase(Target.Value) = "xfer vals" Then
            Cancel = True
            Me.Range("O" & Target.Row) = Me.Range("K" & Target.Row).Value
            Me.Range("R" & Target.Row) = Me.Range("N" & Target.Row).Value
        End If
    End If
End Sub

将其粘贴到工作表的代码表中,将Z:Z范围调整为要用作伪按钮的列。我还添加了一个条件,单元格必须包含某种形式的xfer vals作为文本值,所以如果你愿意,可以改变它。完成修改后,点击Alt+ Q返回工作表。

在Z列中,键入xfer vals(或您更改为的任何内容)到包含您希望传输的值的单元格中。如果您愿意,可以为单元格添加背景填充和/或边框。双击它将传输值。

您应该能够将该行公式/值(s)/伪按钮复制到任何新行,并使按钮按照新行工作。

请注意,我.Values将目标更改为源。如果您只想在代码行的一侧使用它,则源是使用它的适当位置。


1
谢谢Jeeped,我看到了你所做的部分工作,但是,我对工作表中的单元格中的操作有点困惑,以使其工作。我不知道如何“在Z列中,键入xfer vals(或者你改变它的任何内容)到包含你希望传输的值的单元格中。如果你愿意,可以给单元格一个背景填充和/或边框。双击它将传递价值。“ 你能澄清我需要做什么吗?我需要与每个细胞合作吗?再次感谢您的时间和愿意提供帮助。
Mark Nev
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.