【问题标题】:2nd change(ByVal target As Range) doesnt work第二次更改(ByVal 目标作为范围)不起作用
【发布时间】:2020-04-17 19:43:40
【问题描述】:

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

我使用单元格“O6”(什么时候是“0”)作为“Sub(ByVal target As Range)”的触发器 此子调用 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

我错过了什么吗?

感谢您的帮助

【问题讨论】:

  • 您无法更改Worksheet_Change 部分...因此您只能拥有一个Worksheet_Change 处理程序。你必须结合。
  • 修改您的第一个 Worksheet_Change 事件以考虑两个单元格

标签: excel vba byval


【解决方案1】:

谢谢@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

【讨论】:

    猜你喜欢
    • 2014-12-26
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    • 2014-01-31
    • 2015-06-21
    • 2011-10-04
    • 1970-01-01
    • 2020-04-16
    相关资源
    最近更新 更多