VBA Worksheet_change 宏未检测到结构化引用中的更改 table
VBA Worksheet_change macro not detecting change in structured reference table
我在使用结构化引用时无法触发 Worksheet_Change
宏。我发誓我以前让它工作过,所以我认为这是一个语法问题。
当我使用“$A$1”类型引用目标单元格时,它工作正常。但是,当我对已更改的单元格使用结构化引用时,它不起作用。其他结构化引用都可以正常工作。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Target.Address = "MonsterStats[Monster Name]" Then
Range("B25").Font.Bold = False
Range("B25").Font.Italic = False
Range("B25") = Range("MonsterStats[Ability1]") & Range("MonsterStats[Ability1 Text]")
Range("B25").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Bold = True
Range("B25").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Italic = True
End If
If Target.Address = "$P" Then
Range("B26").Font.Bold = False
Range("B26").Font.Italic = False
Range("B26") = Range("MonsterStats[Ability1]") & Range("MonsterStats[Ability1 Text]")
Range("B26").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Bold = True
Range("B26").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Italic = True
End If
End Sub
你可以试试Intersect
方法:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Me.Range("MonsterStats[Monster Name]"), Target) Is Nothing Then
' do stuff
End If
End Sub
尝试 If Target.Address(False, False) = "MonsterStats[Monster Name]" Then
或将 "MonsterStats[Monster Name]" 的值设置为绝对地址,例如 $A$1(而不是 A1)。
我在使用结构化引用时无法触发 Worksheet_Change
宏。我发誓我以前让它工作过,所以我认为这是一个语法问题。
当我使用“$A$1”类型引用目标单元格时,它工作正常。但是,当我对已更改的单元格使用结构化引用时,它不起作用。其他结构化引用都可以正常工作。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then Exit Sub
If Target.Address = "MonsterStats[Monster Name]" Then
Range("B25").Font.Bold = False
Range("B25").Font.Italic = False
Range("B25") = Range("MonsterStats[Ability1]") & Range("MonsterStats[Ability1 Text]")
Range("B25").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Bold = True
Range("B25").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Italic = True
End If
If Target.Address = "$P" Then
Range("B26").Font.Bold = False
Range("B26").Font.Italic = False
Range("B26") = Range("MonsterStats[Ability1]") & Range("MonsterStats[Ability1 Text]")
Range("B26").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Bold = True
Range("B26").Characters(1, Len(Range("MonsterStats[Ability1]"))).Font.Italic = True
End If
End Sub
你可以试试Intersect
方法:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Me.Range("MonsterStats[Monster Name]"), Target) Is Nothing Then
' do stuff
End If
End Sub
尝试 If Target.Address(False, False) = "MonsterStats[Monster Name]" Then
或将 "MonsterStats[Monster Name]" 的值设置为绝对地址,例如 $A$1(而不是 A1)。