【问题标题】:Get the cell value (eg. A6) of the cell which triggered the macro获取触发宏的单元格的单元格值(例如 A6)
【发布时间】:2020-09-01 23:38:38
【问题描述】:

有没有办法获取触发宏的单元格的单元格值(例如 A6):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:A50")) Is Nothing Then
      Call first_module
    End If
End Sub

我想知道的是,哪一行触发了宏,然后将整行复制到另一个工作簿。所以如果A20有任何变化,就会复制第20行,以此类推。

提前致谢!

【问题讨论】:

  • 目标是被改变的单元格。

标签: excel vba


【解决方案1】:

Worksheet_Change 可以通过更改多个单元格来触发,因此您需要在代码中考虑到这一点:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range, c As Range, cDest As Range
    Set rng = Application.Intersect(Target, Me.Range("A2:A50")) 'Calculate intersect
    If Not rng Is Nothing Then                                  'any intersect cells?
        Set cDest = Workbooks("data.xlsx").Sheets("Data") _
             .Cells(Rows.Count, "A").End(xlUp).Offset(1, 0) 'next empty row...
        For Each c in rng.cells            'loop over all cells
            c.EntireRow.Copy cDest         'copy row to other workbook
            Set cDest = cDest.Offset(1, 0) 'next paste row
        Next c
    End If
End Sub

您需要向您的复制方法添加一个参数,该参数接受要复制的范围。

如果您刚开始使用 VBA,那么避免 Call 是一个很好的做法 - 现在它几乎已被弃用并且没有必要。

【讨论】:

  • 谢谢!这很有帮助,我会避免使用 Call。
  • 我找不到关于“copyRow c.EntireRow”的更多文档。你能帮忙提供一个链接或其他东西,我可以在其中了解更多它是如何工作的以及如何粘贴它。谢谢。
  • 抱歉,我假设您已经有一些代码 (first_module) 用于实际复制:我只是放了一个“虚拟”方法名称,因为您没有提供有关复制行应该在哪里的详细信息粘贴。在上面查看我的编辑
【解决方案2】:

复制目标单元格所在(或单元格所在)的整行:

Target.EntireRow.Copy

【讨论】:

    猜你喜欢
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2022-06-17
    相关资源
    最近更新 更多