VBA 在被下拉菜单 + Workbook_SheetChange 调用后无法完全清除工作表

VBA 在被下拉菜单 + Workbook_SheetChange 调用后无法完全清除工作表

我有一张中央汇总表,它是使用 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

相关内容