我有一张中央汇总表,它是使用 VBA 自动生成的,其中包含来自其他各种工作表的数据。当其他工作表上的数据发生更改时,VBA 会自动(使用Workbook_SheetChange
)清除汇总表并重新生成。
在大多数情况下,这似乎运行良好,但每当我通过数据验证下拉菜单更改数据时,我都会遇到一个奇怪的问题。
在更改下拉列表中的值后运行时Workbook_SheetChange
,vba 似乎无法完全清除我尝试更改的工作表中的数据。
.Cells.ClearContents
无法清除单元格,并.Hyperlinks.Delete
导致 vba 停止执行(但链接似乎被正确删除)。
我注意到的另一件事是,.Hyperlinks.Count
只有通过下拉列表进行更改时才会正确返回,任何其他更改都会始终返回 0(即使它没有上面列出的其他问题)。
不完全确定这是有意为之还是错误,但这确实看起来很奇怪。至少 VBA 似乎没有抛出任何错误。
有没有什么方法可以真正使下拉菜单发挥作用?
下面有一些示例代码可以演示这个问题:
Option Explicit
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = "Sheet1" Then
Dim TestSheet As Worksheet
Set TestSheet = Worksheets("Sheet2")
With TestSheet
' .Cells.Clear 'We don't want to fully clear the sheet.
.Cells.ClearContents
'.Cells.ClearFormats 'Sadly this also clears conditional formatting
.Cells.ClearComments
.Cells.ClearNotes
.Cells.ClearOutline
Debug.Print "TEST1 - " & .Hyperlinks.Count
.Hyperlinks.Delete
Debug.Print "TEST2" 'This doesn't run if sheet change is caused by dropdown
End With
End If
End Sub