2

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

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

当谈到 VBScript 时,我是一个完全的新手,但很多谷歌搜索让我走到了这一步:

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

肯定有比为每个按钮分配不同的、固定范围的宏更优雅的解决方案。

4

2 回答 2

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
于 2013-04-16T18:24:57.173 回答
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”列中的任何单元格,您将收到一个消息框,说明您单击了哪个单元格。

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

于 2013-04-16T18:52:22.760 回答