行选择和按钮复制

时间:2013-04-16 18:07:25

标签: excel excel-vba button vba

我正在尝试使用Excel中的按钮将特定范围的单元格从活动工作簿复制到另一个工作簿。当我为其指定的宏指定每个按钮的固定范围时,复制工作正常,但我对如何在每个按钮上使用相同的宏以及按钮的行号以指示要复制的数据行感到困惑。 / p>

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

对于VBScript而言,我是一个完整的新手,但谷歌搜索已经让我走了这么远:

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

当然,除了为每个按钮分配不同的固定范围宏外,还有一个更优雅的解决方案。

2 个答案:

答案 0 :(得分:3)

见此截图

enter image description here

这是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”列中的任何单元格,您将收到一个消息框,说明您单击了哪个单元格。

这不是最好的想法,有些用户可能不明白它是一个按钮。