提问人:Jphillip82 提问时间:11/3/2023 最后编辑:TinManJphillip82 更新时间:11/7/2023 访问量:68
擦除多个目标单元格时出现 13 类不匹配错误
Type 13 mismatch error when erasing more than one target cell
问:
我是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
答:
根据代码的逻辑,事件可以简化如下。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
评论
上一个:FIx 工作表循环
评论
If Target.Count > 1 Then Exit Sub
需要在你的潜艇的顶部。 对于多单元格范围将是一个数组,并且您不能将数组与(例如)“风场”进行比较Target.Value
Target.CountLarge
Target.Count