有什么可以帮助我的人吗?我花了很多时间搜索并尝试使这两段代码正常工作,但是没用。
有什么办法可以组合这两个代码段吗?它们有两个不同的用途。
1。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
If Len(Target) = 10 Then
Range("I" & Target.Row & ":J" & Target.Row & ", K" & Target.Row & ", M" & Target.Row) = "N"
End If
End Sub
2。
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 12 And Target.Value = "Y" Then
Target.Offset(0, 1) = Date
End If
End Sub
我很茫然。...
答案 0 :(得分:1)
您可以尝试将其作为组合方法:
在宏上加载了worksheet_change事件时,进行更改时需要禁用警报,否则您可能会陷入无限循环。
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Or Target.Column <> 12 Then Exit Sub
If Len(Target) = 10 Then
Application.EnableEvents = False
Range(Cells(Target.Row, "I"), Cells(Target.Row, "K")) = "N"
Range("M" & Target.Row) = "N"
Application.EnableEvents = True
End If
If Target.Column = 12 And Target.Value = "Y" Then
Application.EnableEvents = False
Target.Offset(0, 1) = Date
Application.EnableEvents = True
End If
End Sub
答案 1 :(得分:1)
您可以使用下面的代码。
当您更新列I:K
和N
中的值时,请禁用事件以停止更改事件触发。
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ERR_HANDLE
Application.EnableEvents = False
With Target
If .Column = 12 Then
If .Value = "Y" Then
.Offset(, 1) = Date
End If
ElseIf .Column = 1 Then
If Len(.Value) = 10 Then
Cells(.Row, 9).Resize(, 3) = "N" 'Column I:K
Cells(.Row, 13) = "N" 'Column M
End If
End If
End With
EXIT_PROC:
Application.EnableEvents = True
On Error GoTo 0
Exit Sub
ERR_HANDLE:
Select Case Err.Number
Case 13 'Type mismatch.
Resume EXIT_PROC
Case Else 'Any unhandled errors.
MsgBox "Error " & Err.Number & vbCr & _
Err.Description, vbOKOnly, "Error in " & ThisWorkbook.Name
Resume EXIT_PROC
End Select
End Sub
接受后编辑:
根据@MathieuGuindon的建议,我在代码中添加了一个错误处理程序。处理完错误后,代码将跳回到EXIT_PROC
标签,因此该过程只有一个退出点。