#VBA专用子工作表\u更改
任何善良的灵魂都能帮助我吗?我花了相当多的时间搜索并试图让这两段代码正常工作,但都做不到 有没有办法把这两个片段结合起来?它们有两个不同的用途 一, 二,#VBA专用子工作表\u更改,vba,Vba,任何善良的灵魂都能帮助我吗?我花了相当多的时间搜索并试图让这两段代码正常工作,但都做不到 有没有办法把这两个片段结合起来?它们有两个不同的用途 一, 二, 我不知所措……您可以尝试将此作为一种组合方法: 在宏上加载工作表更改事件时,进行更改时需要禁用警报,否则您可能会发现自己处于无限循环中 Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("A:A")) Is Nothing Or
我不知所措……您可以尝试将此作为一种组合方法: 在宏上加载工作表更改事件时,进行更改时需要禁用警报,否则您可能会发现自己处于无限循环中
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
Private子工作表\u更改(ByVal目标作为范围)
如果Intersect(目标,范围(“A:A”))为Nothing或Target.12列,则退出Sub
如果Len(目标)=10,则
Application.EnableEvents=False
范围(单元格(Target.Row,“I”)、单元格(Target.Row,“K”)=“N”
范围(“M”和目标行)=“N”
Application.EnableEvents=True
如果结束
如果Target.Column=12且Target.Value=“Y”,则
Application.EnableEvents=False
目标偏移量(0,1)=日期
Application.EnableEvents=True
如果结束
端接头
您可以使用下面的代码。禁用事件以在更新列
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\u PROC
标签,因此该过程只有一个退出点。是否愿意与大家分享哪些不起作用?您的问题是什么?请至少描述您想用代码归档的内容。我真的不明白为什么很难从中生成一个例程。我的第一个代码可以工作,但第二个代码不起作用,我尝试了许多方法来组合,但都没有效果。我是VBA新手,如果我的问题不清楚,我很抱歉。我知道在同一个过程中不能有两个工作表更改,所以我尝试将其合并为一个,但是第二个代码没有拾取任何内容。向上投票,但无限循环将由应用程序引起。启用事件
被切换,并且当单元格被修改时,工作表更改
重新进入。禁用警报无法解决此问题;-)唉,我的脑子迟钝了。这就是我的意思,谢谢你们,非常感谢!杰出的唯一缺少的是一些错误处理,因此如果.Value
包含一个错误值,例如if.Value=“Y”,则抛出一个类型不匹配错误,执行会突然退出,从而使应用程序.EnableEvents
处于关闭状态。
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
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