【问题标题】:Identify and Paste the named range that was most recently updated识别并粘贴最近更新的命名范围
【发布时间】:2018-07-11 13:51:23
【问题描述】:

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

【问题讨论】:

  • 所有命名范围都在同一张纸上吗?对这些范围的更新是直接手动对范围进行的,还是它们是命名范围中公式的产物?
  • 与我们分享您的“工作表更改”子,我们将帮助您使其正常工作..
  • 命名范围之间是否有重叠??
  • 所有更新都是手动的,所有命名范围都是不同的。命名范围不共享任何单元格。
  • 它们在同一张纸上吗?

标签: vba excel


【解决方案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

根据您是否需要检查工作簿范围名称或工作表范围名称,您需要在Each 循环中使用Application.NamesMe.Names

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

【讨论】:

    【解决方案2】:

    这假定“其他”工作表被命名为“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
    

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 2014-04-08
        • 2013-07-13
        • 1970-01-01
        • 2012-09-02
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多