Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 检测和触发事件的步骤-Excel_Vba_Excel - Fatal编程技术网

Vba 检测和触发事件的步骤-Excel

Vba 检测和触发事件的步骤-Excel,vba,excel,Vba,Excel,我有条形码扫描器。因此,当使用枪扫描条形码时,该值通常输入到屏幕上的文本字段中 所以我制作了一个excel宏。扫描条形码时,文本显示在单元格上,以新行字符结尾(文本+“\r\n”由扫描仪本身提供)。因此,会触发一个事件并执行其余操作 问题是,事件仅使用新行字符触发。如果条形码扫描仪在每次条形码输出后都没有提供\r\n,该怎么办。我如何处理这种情况? 如何检测并触发事件?在工作表模块中添加工作表更改事件,如下所示: Private Sub Worksheet_Change(ByVal Target

我有条形码扫描器。因此,当使用枪扫描条形码时,该值通常输入到屏幕上的文本字段中

所以我制作了一个excel宏。扫描条形码时,文本显示在单元格上,以
新行
字符结尾(文本+“\r\n”由扫描仪本身提供)。因此,会触发一个事件并执行其余操作

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

在工作表模块中添加工作表更改事件,如下所示:

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

如果您创建一个用户表单来获取输入,则可以使用
keydown
keypress
事件来检测按下的键。您必须知道条形码的结束条件是什么,以便知道何时将值发送到要处理的单元格

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)

如果没有userforms,您将不得不依靠enter/newline来触发工作表中的
Change
事件

SendKeys
可以帮助模拟返回键按下,从而触发您的事件。但不确定如何检测输入。根据我(有限)使用条形码枪的工作,枪上有一个设置,用于确定是否在代码之后输入CR/LF。条形码本身往往没有新行characters@SeanCheshire但这同样取决于硬件。告知/解释客户可能会出错。如果未按enter键,则此操作将不起作用。如果单元格仍处于编辑模式,则不会触发工作表更改事件,因为仍可按ESC键中止更改。对s/s的任何更新都将触发更改事件。我不熟悉条形码机器和任何边缘案例,但是如果数据在用户表单的文本框中,您可以使用文本框的更改事件