擦除多个目标单元格时出现 13 类不匹配错误

Type 13 mismatch error when erasing more than one target cell

提问人:Jphillip82 提问时间:11/3/2023 最后编辑:TinManJphillip82 更新时间:11/7/2023 访问量:68

问:

我是VBA的新手,请原谅我。此代码可能很臃肿,可以清理(不确定如何清理),但是当我在目标中有多个单元格填充了触发工作表更改事件的值时,我可以毫无问题地删除它们。如果我一次删除多个单元格,我最终会遇到类型 13 不匹配错误。该代码应该检查 c 列中的值变化,如果它是两个值之一,它应该将“N/A”插入同一行的其他几个单元格(有些不连续)。如果它不是该值,则它应该保持空白。它与一个代码配对,用于检查同一列是否有第三个值,如果它是第三个值,它应该将“N/A”返回到该行中的单个单元格。该错误突出显示了“If Target.Value = ”Wind Sites“ Or Target.Value = ”Springbok 3“ Then”作为此处的问题。

我是VBA的新手,请原谅我。此代码可能很臃肿,可以清理(不确定如何清理),但是当我在目标中有多个单元格填充了触发工作表更改事件的值时,我可以毫无问题地删除它们。如果我一次删除多个单元格,我最终会遇到类型 13 不匹配错误。该代码应该检查 c 列中的值变化,如果它是两个值之一,它应该将“N/A”插入同一行的其他几个单元格(有些不连续)。如果它不是该值,则它应该保持空白。它与一个代码配对,用于检查同一列是否有第三个值,如果它是第三个值,它应该将“N/A”返回到该行中的单个单元格。该错误突出显示了“If Target.Value = ”Wind Sites“ Or Target.Value = ”Springbok 3“ Then”作为此处的问题。

    Private Sub Worksheet_Change(ByVal Target As Range)

    Dim WS As Worksheet

    Set WS = Sheet4
    If Not Intersect(Target, Range("C:C")) Is Nothing Then
        Application.EnableEvents = False

        If Target.Value = "Wind Sites" Or Target.Value = "Springbok 3" Then
            Target.Offset(0, 2) = "N/A"
            Target.Offset(0, 3) = "N/A"
            Target.Offset(0, 4) = "N/A"
            Target.Offset(0, 5) = "N/A"
            Target.Offset(0, 7) = "N/A"
            Target.Offset(0, 9) = "N/A"
            Target.Offset(0, 10) = "N/A"
        Else
            Target.Offset(0, 2).ClearContents
            Target.Offset(0, 3).ClearContents
            Target.Offset(0, 4).ClearContents
            Target.Offset(0, 5).ClearContents
            Target.Offset(0, 7).ClearContents
            Target.Offset(0, 9).ClearContents
            Target.Offset(0, 10).ClearContents
        End If

        Application.EnableEvents = True
    End If

    On Error Resume Next

    If Target.Count > 1 Then Exit Sub
    If Application.Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
    If Target.Value = "Galloway 1" Then
        Target.Offset(0, 8) = ""
    Else
        If Target.Count > 1 Then Exit Sub
        If Application.Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
        If Target.Value <> "Galloway 1" Then
            Target.Offset(0, 8) = "N/A"
            If Target.Count > 1 Then Exit Sub
            If Target.Count > 1 Then Exit Sub
            If Application.Intersect(Target, Range("C:C")) Is Nothing Then Exit Sub
            If Target.Value = "" Then
                Target.Offset(0, 8).ClearContents
                If Target.Count > 1 Then Exit Sub

            End If
        End If
    End If
End Sub
Excel VBA 运行时错误 工作表

评论

1赞 Tim Williams 11/3/2023
If Target.Count > 1 Then Exit Sub需要在你的潜艇的顶部。 对于多单元格范围将是一个数组,并且您不能将数组与(例如)“风场”进行比较Target.Value
1赞 BigBen 11/3/2023
使用起来会更安全,而不是太安全。Target.CountLargeTarget.Count

答:

1赞 taller 11/3/2023 #1

根据代码的逻辑,事件可以简化如下。Change

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .CountLarge > 1 Then Exit Sub
        If Not .Column = 3 Then Exit Sub
        Application.EnableEvents = False
        If .Value = "Wind Sites" Or .Value = "Springbok 3" Then
            .Offset(0, 2).Resize(1, 4) = "N/A"
            .Offset(0, 7).Resize(1, 4) = "N/A"
        Else
            .Offset(0, 2).Resize(1, 4).ClearContents
            .Offset(0, 7).Resize(1, 4).ClearContents
        End If
        If .Value = "Galloway 1" Or .Value = "" Then
            .Offset(0, 8).ClearContents
        Else
            .Offset(0, 8) = "N/A"
        End If
        Application.EnableEvents = True
    End With
End Sub

评论

0赞 Jphillip82 11/3/2023
您的重写解决了我遇到的两个问题之一,我不再收到不匹配错误,但是当我删除目标区域 (C:C) 中的多个单元格时,它不会清除任何标记为“N/A”的相邻单元格的内容。您知道什么会导致不匹配错误停止但不允许导致原始区域(删除目标区域中的多个单元格)吗?
0赞 taller 11/3/2023
请尝试更新后的代码。
0赞 Jphillip82 11/3/2023
Taller,感谢您的帮助,但此更新的代码不再触发更改事件。我又回到了你写的原文。
0赞 taller 11/3/2023
测试运行尚未还原设置。重新启动 Excel 或在 VBE Immediate 窗口中运行“Application.EnableEvents=True”。
0赞 Jphillip82 11/7/2023
我无法让当前代码像您编写的那样工作。如果你把旧的编辑代码放回这里,我会接受它作为答案。我多次重新启动 excel,它不会触发偶数更改。旧代码比我能想到的任何东西都要接近。