行select和复制button

我正在尝试在Excel中使用一个button将活动工作簿中的一定范围的单元格复制到另一个工作簿。 当我为指定的macros指定每个button的固定范围时,复制工作是完美的,但是我难以理解如何在每个button上使用相同的macros,以及button的行号来指示要复制的数据行。

每行包含6个左右单元格,第7个单元格包含button。 当用户按下此button时,需要复制与包含按下button的行相同的行上的6个单元格。

当谈到VBScript时我是一个完全新手,但是很多谷歌search引起了我的兴趣:

Sheets("SurfaceThreats").Range("A4:F4")Copy_ Sheets("ORBAT").Cells(Rows.Count,1).End(x1Up).Offset(1,0) 

当然,有一个比每个button分配一个不同的,固定范围的macros更优雅的解决scheme。

看这个截图

在这里输入图像说明

这是Select Row(s)button的代码

 Option Explicit Private Sub CommandButton1_Click() Dim Ret As Range, rng As Range Dim lRow As Long On Error Resume Next Set Ret = Application.InputBox("Please select the row", Type:=8) On Error GoTo 0 If Not Ret Is Nothing Then For Each rng In Ret.Rows '~~> Get the last row in sheets "ORBAT" where you want to copy With Sheets("ORBAT") lRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 End With '~~> Copy the rows Sheets("SurfaceThreats").Range("A" & rng.Row & ":F" & rng.Row).Copy _ Sheets("ORBAT").Cells(lRow, 1) Next End If End Sub 

您不能创build通用button处理程序,但可以dynamic创buildbutton和macros来处理它们。 但是这是相当多的工作,你将不得不dynamic地创buildmacros。 (这可能会导致反病毒软件有时我觉得问题)。

您可以使用Worksheet_OnBeforeDoubleClick事件来创build“假”button

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Cells.Count > 1 Then Exit Sub If Not Intersect(Target, Target.Worksheet.Columns(1)) Is Nothing Then MsgBox "You Clicked " & Target.Address ' call your generic handler here passing the Target.Address or Target.Row Cancel = True End If End Sub 

使用此代码,如果您双击“A”列中的任何单元格,您将会看到一个消息框,指出您单击了哪个单元格。

它不是最好的想法,有些用户可能不知道它是一个button。