首页 > 解决方案 > 第二次更改(ByVal 目标作为范围)不起作用

问题描述

我有一个小谜题。我使用单元格“K6”和“L6”作为输入(用于扫描条形码)。当我选择单元格“K6”并扫描条形码时,单元格“O6”正在从值“0”变为值“1”(通过公式“=IF(K6>0,1,0)”)。

我使用单元格“O6”(何时是“0”)作为“Sub(ByVal 目标作为范围)”的触发器,这个 Sub 调用 marco“Nasklad”,它将“K6”值复制并粘贴到 sheet2(IN_OUT)列“ A" 第一个空白。在它调用宏“Clear”之后选择sheet1(Sklad)并清除单元格“K6”。

整个过程工作正常,我扫描条形码,代码被复制到另一张纸上,我可以扫描另一个代码等等。

Sub worksheet_change(ByVal target As Range)
Set target = Range("O6")
If target.Value > 0 Then
 Call Nasklad
End If
End Sub

Sub Nasklad()
    Sheets("Sklad").Select
    Range("K6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("IN_OUT").Select
    ActiveSheet.Range("A1").End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Call clear
End Sub

Sub clear()
    Sheets("Sklad").Select
    Range("K6").Select
    Selection.ClearContents
End Sub

现在要注意了,当我尝试将单元格“K6”的重复系列命令与单元格“L6”一起使用时,什么也没发生。

看起来“Sub worksheet_change2(ByVal target As Range)”不起作用。当我将“P6”中的“L6”值输入为“1”时(通过公式“=IF(L6>0,1,0)”,这次触发器不运行 Sub,我不知道为什么。

Sub worksheet_change2(ByVal target As Range)
Set target = Range("P6")
If target.Value = 0 Then
 Call Vysklad
End If
End Sub

Sub Vysklad()
    Sheets("Sklad").Select
    Range("L6").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("IN_OUT").Select
    ActiveSheet.Range("B1").End(xlDown).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Call clear2
End Sub

Sub clear2()
    Sheets("Sklad").Select
    Range("L6").Select
    Selection.ClearContents
End Sub

我错过了什么?

感谢您的帮助

标签: excelvbabyval

解决方案


谢谢@BigBen 和@urdearboy,这对我有帮助,我已将 Sub worksheet_change(ByVal target As Range) 更改为

Sub worksheet_change(ByVal target As Range)
Set target = Range("O6")
Set target2 = Range("P6")
If target.Value > 0 Then
 Call Nasklad
End If
If target2.Value > 0 Then
 Call Vysklad
End If
End Sub

推荐阅读