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