Excel 专用子工作表\u选择更改(ByVal目标作为范围)不工作VBA

Excel 专用子工作表\u选择更改(ByVal目标作为范围)不工作VBA,excel,vba,Excel,Vba,我在Sheet5(支持)中编写了一个代码,如下所述。 但我不知道我哪里做错了。 **我试图做的是,如果Sheet5.Range(“K3,K4,L4,M3”)改变Sheet1和**Sheet4Range(“K7”)。Value=Sheet5.Range(“L5”)。Value 当我更改范围(“K3、K4、L4、M3”)中的值时,,则表5.Range(“L5”)值自动更改为另一个值。 例如,现在Sheet5.Range(“L5”).Value是“A”,在Sheet5.Range(“K3,K4,L4,

我在Sheet5(支持)中编写了一个代码,如下所述。 但我不知道我哪里做错了。 **我试图做的是,如果Sheet5.Range(“K3,K4,L4,M3”)改变Sheet1和**Sheet4Range(“K7”)。Value=Sheet5.Range(“L5”)。Value 当我更改范围(“K3、K4、L4、M3”)中的值时,,则表5.Range(“L5”)值自动更改为另一个值。 例如,现在Sheet5.Range(“L5”).Value“A”,在Sheet5.Range(“K3,K4,L4,M3”)中的任何单元格中进行修改后,Sheet5.Range(“L5”).Value变为“B”。现在Sheet1Sheet4范围(“K7”)。值等于A,而不是**B。 我需要在范围(“K3、K4、L4、M3”)中修改后的B

我的VBA代码如下:-

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo ExitSub
    
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    Sheet1.Unprotect Password:="123" 'CASH SALE
    Sheet4.Unprotect Password:="123" 'CREDIT SALE
    Sheet5.Unprotect Password:="123" 'SUPPORT

    If Application.Intersect(Target, Range("K3,K4,L4,M3")) Is Nothing Then GoTo ExitSub

    Sheet1.Range("K7").Value = Sheet5.Range("L5").Value
    Sheet4.Range("K7").Value = Sheet5.Range("L5").Value

    Sheet1.Protect Password:="123", AllowFiltering:=True
    Sheet4.Protect Password:="123", AllowFiltering:=True
    Sheet5.Protect Password:="123", AllowFiltering:=True

ExitSub:
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub

在SelectionChange事件中进行错误管理总是很好的,并且在不重新启用事件/显示等的情况下小心退出SUB

例如(未经测试):


这个答案可以在另一个资源中找到,并且对我有用

Private Sub Worksheet_Calculate()
    On Error GoTo ExitSub
    Application.EnableEvents = False
    Sheet1.Unprotect Password:="''784c23704f733130'" 'CASH SALE
    Sheet4.Unprotect Password:="''784c23704f733130'" 'CREDIT SALE
    Sheet5.Unprotect Password:="''784c23704f733130'" 'SUPPORT
    Dim Xrg As Range
    Set Xrg = Range("L5")
    If Not Intersect(Xrg, Range("L5")) Is Nothing Then
    Sheet1.Range("K7").Value = Sheet5.Range("L5").Value
    Sheet4.Range("K7").Value = Sheet5.Range("L5").Value
    Sheet1.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    Sheet4.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    Sheet5.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    End If
ExitSub:
    Application.EnableEvents = True
End Sub

如果Application.Intersect(目标、范围(“K3、K4、L4、M3”))为空,则退出Sub
-如果为真,则停止执行并
应用程序。计算
从未设置为自动。在将计算更改为手动之前,请将这一行移到最开始处。您的代码甚至不会作用于范围内的单元格,该范围应该是经过修改的。。。我担心你从网上找到的东西改编的方式有问题。谢谢你,特拉加莫先生,你的代码正在工作,但我忘了告诉你,当我更改范围(“K3,K4,L4,M3”)中的值时,表5.范围(“L5”).值自动更改为另一个值。例如,现在Sheet5.Range(“L5”)。值为“A”,在Sheet5.Range(“K3、K4、L4、M3”)中的任何单元格中进行修改后,Sheet5.Range(“L5”)。值变为“B”。现在是Sheet1和Sheet4范围(“K7”)。值等于A而不是B。我需要在范围(“K3,K4,L4,M3”)中修改后的值B。如果代码有效并回答了您的问题(关于错误控制),请标记为正确。你可以随时提交一个包含你想对代码进行的添加/更改的进一步问题,并且很可能你会得到比现在更多的回答来尝试更改问题参数。当我单击复选标记时,它会弹出一个未知错误。我不知道为什么。主席先生,我亦会参考你的答覆,修改我的问题。我需要在范围(“K3,K4,L4,M3”)中修改后的值B。请帮忙。
Private Sub Worksheet_Calculate()
    On Error GoTo ExitSub
    Application.EnableEvents = False
    Sheet1.Unprotect Password:="''784c23704f733130'" 'CASH SALE
    Sheet4.Unprotect Password:="''784c23704f733130'" 'CREDIT SALE
    Sheet5.Unprotect Password:="''784c23704f733130'" 'SUPPORT
    Dim Xrg As Range
    Set Xrg = Range("L5")
    If Not Intersect(Xrg, Range("L5")) Is Nothing Then
    Sheet1.Range("K7").Value = Sheet5.Range("L5").Value
    Sheet4.Range("K7").Value = Sheet5.Range("L5").Value
    Sheet1.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    Sheet4.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    Sheet5.Protect Password:="''784c23704f733130'", AllowFiltering:=True
    End If
ExitSub:
    Application.EnableEvents = True
End Sub