我正在尝试使用Excel中的按钮将特定范围的单元格从活动工作簿复制到另一个工作簿。当我为其指定的宏指定每个按钮的固定范围时,复制工作正常,但我对如何在每个按钮上使用相同的宏以及按钮的行号以指示要复制的数据行感到困惑。 / p>
每行包含6个左右的单元格,第7行包含按钮。当用户按下此按钮时,需要复制与包含按下按钮的行在同一行上的6个单元格。
对于VBScript而言,我是一个完整的新手,但谷歌搜索已经让我走了这么远:
Sheets("SurfaceThreats").Range("A4:F4")Copy_
Sheets("ORBAT").Cells(Rows.Count,1).End(x1Up).Offset(1,0)
当然,除了为每个按钮分配不同的固定范围宏外,还有一个更优雅的解决方案。
答案 0 :(得分:3)
见此截图
这是Select Row(s)
按钮的代码
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
答案 1 :(得分:0)
您无法创建通用按钮处理程序,但可以动态创建按钮和宏来处理它们。但这是相当多的工作,你必须开始动态创建宏。 (这有时我会想到反病毒软件的问题)。
您可以使用Worksheet_OnBeforeDoubleClick
事件创建“假”按钮
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”列中的任何单元格,您将收到一个消息框,说明您单击了哪个单元格。
这不是最好的想法,有些用户可能不明白它是一个按钮。