我的电子表格根据第一个标签中的表格内容添加并格式化一系列标签。之后,我在Workbook_SheetChange事件中设置了一些代码,观察这些选项卡中的一些更改。 这是ThisWorkBook中的代码:
Private Sub Workbook_SheetChange(ByVal sh As Object, ByVal Target As Range)
Dim test As String
Dim itm As Range
Dim tbl As ListObject
Dim switcher As Integer
On Error GoTo RefErr:
If Target.Cells(1, 1) = "" Then switcher = 0
If Target.Cells(1, 1) = Range("Setup!B1") Then switcher = 1
If Target.Cells(1, 1) = Range("B4") And (sh.CodeName Like "Sheet*") And isMatch(sh.name) Then switcher = 2
If Target.Column = 9 And (sh.CodeName Like "Sheet*") And Target.Row <> 1 Then switcher = 3
Select Case switcher
Case 0
GoTo ExitSub
'Rename Tab
Case 1
Card.name = Left(Target, 31)
'Change Tab Color
Case 2
sh.Tab.ColorIndex = Target.DisplayFormat.Interior.ColorIndex
'Update Verdict
Case 3
Set tbl = sh.ListObjects("TC_" & sh.name)
If tbl.ListColumns(6).DataBodyRange.Count <> 0 Then
For i = 1 To tbl.ListColumns(6).DataBodyRange.Count
Set bla = tbl.ListColumns(6).DataBodyRange.Item(i)
If bla <> "" Then
If bla <> "Pass" Then
sh.Cells(4, 2).FormulaR1C1 = tbl.ListColumns(6).DataBodyRange.Item(i)
GoTo ExitSub
Else
sh.Cells(4, 2).FormulaR1C1 = "Pass"
End If
End If
Next i
End If
Case Else
GoTo ExitSub
End Select
ExitSub:
Application.EnableEvents = True
Exit Sub
RefErr:
MsgBox ("Error: " & vbCrLf & Err.Description & vbCrLf & Err.Number)
Resume ExitSub
Resume
End Sub
案例1引用了设置表,没有问题 案例2引用动态创建的选项卡并更改选项卡的颜色,这很好用 案例3读取在动态选项卡中创建的表对象的列,并根据在该列中找到的内容更改特定单元格中的值。 这是奇怪的事情。当创建,访问选项卡并在所述列中更改值时,案例3永远不会被触发,不显示任何错误,没有 但是一旦我打开VB编辑器,它就可以了!没有错误,没有消息,只是事件触发它应该 逐行调试时,根本不会出现任何问题。 我承认这令我感到困惑。我已经尝试在我的工作簿的每个可能和不太可能的部分设置Application.EnableEvents = true,并没有改变。
拜托,我想听听你对此的看法。我很确定在事件触发顺序或其他地方发生了某些冲突,但我无从得知。如果你们向我解释它是如何完成的,我很乐意在这个问题上添加表格。
非常感谢 P
PD:我在Excel 2007和2010上测试了我的代码,它具有完全相同的奇怪行为(其他一切工作正常)。