识别并粘贴最近更新的命名范围

时间:2018-07-11 13:51:23

标签: excel vba excel-vba

我正在尝试使用VBA来标识最近更新的命名范围的名称。我一直在尝试使用“工作表更改”,但没有找到任何地方。换句话说,如果我在同一工作表上都具有三个命名范围“ A”,“ B”和“ C”,则命名范围“ B”将被更改。我希望名称“ B”而不是范围内的数据粘贴到其他工作表上的单元格中。谢谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以测试名称是否与更改后的目标相交

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim N As Name
    For Each N In Application.Names 'loop throug all names in the workbook scope
        If Not Intersect(Target, N.RefersToRange) Is Nothing Then
            Debug.Print N.Name 'print changed name
            Exit For 'stop loop if a name intersects
        End If
    Next N
End Sub

取决于是否需要检查工作簿范围名称或工作表范围名称,您需要在Application.Names循环中使用Me.NamesEach

如果名称重叠,请删除Exit For以输出所有更改的名称。

答案 1 :(得分:0)

在工作表代码中:这是一个示例。

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Application.Intersect(Target, Me.Range("RangeA")) Is Nothing Then
    ThisWorkbook.worksheets("SomeSheet").Range("a cell").Value = "A"
elseif Not Application.Intersect(Target, Me.Range("RangeB")) Is Nothing Then
    ThisWorkbook.worksheets("SomeSheet").Range("a cell").Value = "B"
'etc ....
End If

End Sub

答案 2 :(得分:0)

这假定“其他”工作表被命名为“ track”,并且三个命名范围被命名为“ A”,“ B”和“ D” (由于某些原因,“ C”无效)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Exit Sub

    msg = ""

    If Not Intersect(Target, Range("A")) Is Nothing Then msg = "A"
    If Not Intersect(Target, Range("B")) Is Nothing Then msg = "B"
    If Not Intersect(Target, Range("D")) Is Nothing Then msg = "D"
    If msg = "" Then Exit Sub

    Application.EnableEvents = False
        Sheets("track").Range("A1").Value = msg
    Application.EnableEvents = True
End Sub