【问题标题】:To detect and trigger event - Excel检测和触发事件 - Excel
【发布时间】:2016-02-02 22:05:03
【问题描述】:

我有一个条形码扫描仪。因此,当使用枪扫描条形码时,通常会将值输入到放置在屏幕上的文本字段中。

所以我做了一个excel宏。并且当扫描条形码时,文本会出现在以new line 字符结尾的单元格上(文本+“\r\n”由扫描仪本身提供)。因此触发了一个事件并完成其余的工作。

问题是该事件仅由换行符触发。如果条码扫描器在每次条码输出后都没有提供\r\n 怎么办?我该如何处理这种情况? 如何检测并触发事件?

【问题讨论】:

  • SendKeys 可以帮助模拟返回键,触发您的事件。不知道你会如何检测输入。
  • 在我(有限)使用条形码枪时,枪上有一个设置来确定是否在代码之后输入了 CR/LF。条码本身往往没有换行符
  • @SeanCheshire 但这又取决于硬件。告诉/解释客户会很痛苦

标签: vba excel


【解决方案1】:

如果您创建一个用户表单来接受输入,您可以使用keydownkeypress 事件来检测按下的键。您必须知道条形码的结束条件是什么,这样您才能知道何时将值发送到要处理的单元格。

Keydown 将为您提供切换状态,并捕获 pageup/pagedown/其他特殊键

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, _
    ByVal Shift As Integer)

Keypress 仅适用于产生可键入字符的键

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)

如果没有用户表单,您将不得不依靠输入/换行来触发工作表中的Change 事件

【讨论】:

    【解决方案2】:

    在工作表模块中添加如下 Worksheet_Change 事件:

    Private Sub Worksheet_Change(ByVal Target As Range)
    
        ' Add code here to check for
        ' new line and add if not present
    
    End Sub
    

    或者,如果您在用户表单文本框中有数据,请使用以下内容:

    Private Sub TextBox1_Change()
    
        ' Add code here to check for
        ' new line and add if not present
    
    End Sub
    

    【讨论】:

    • 这在不按回车时不起作用。如果单元格仍处于编辑模式,则不会触发 Worksheet_Change 事件,因为仍然可以按下 ESC 来中止更改
    • 对 s/s 的任何更新都会触发 change 事件。我不熟悉条形码机器和任何边缘情况,但如果数据在用户表单的文本框中,您可以使用文本框的更改事件
    猜你喜欢
    • 2016-06-27
    • 2013-04-24
    • 2012-09-28
    • 2014-06-27
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多