使用命名范围触发 Worksheet_Change 事件导致 1004 错误

问题描述

我有一个 excel 工作簿,我正在运行一些代码以从多个工作表中的一个单元格中删除多余的空格。当我在单元格“E4”中输入某些内容时,它会删除“”的每个实例并将其替换为“”。这按预期工作。

我试图通过使用命名范围来使其适用于不止一张纸。在工作表中,我创建了一个命名范围“ConfigurationInput”,范围为工作表。

以下代码位于其中一张工作表中,它按预期运行:

Private Sub Worksheet_Change(ByVal Target As Range)
    
    If Not Intersect(Target,Range("E4")) Is nothing Then
        Call RemoveSpaces(Range("E4"))
    End If

End Sub

这会调用位于模块中的以下 Sub:

Sub RemoveSpaces(RngRemove)

    Dim rng As Range
    Set rng = RngRemove
    
    rng = WorksheetFunction.Substitute(rng," ","")

End Sub

我正在尝试用命名范围“ConfigurationInput”替换“E4”,但收到以下错误,导致 Excel 崩溃:

error 1004: Method 'Range' of object '_Worksheet' failed

有人有什么建议吗?我尝试简化为单个单元格并使用 .Address 但这也不起作用:

If Target.Address = Range("ConfigurationInput").Address Then

解决方法

我终于明白了:

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
    If Not Intersect(Target,Range("ConfigurationInput")) Is Nothing Then
        Call FixConfig(Range("ConfigurationInput"))
    End If
Application.EnableEvents = True
End Sub

我不得不用 Application.EnableEvents = False Application.EnableEvents = True 包装代码