excel - 来自扫描仪输入的增量计数
问题描述
我正在尝试通过扫描电池条形码来创建一个计算电池充电周期/次数的功能。这就是我认为应该这样做的方式:
- 每个扫描仪输入应集中在单个“输入数据”单元格或始终处于活动状态的文本框中
- 将数据与单独表格中的一系列电池序列号进行比较。
- 如果与输入正确匹配,则相应的产品计数器应加一(如果不匹配,则显示警报“无匹配序列)”
- 输入单元格/文本框应聚焦并清除以接收来自扫描仪输入的新数据。
我正在使用以下脚本,但是Call IncrementCycleCount(Target.Value)
给出了堆栈空间错误。
Const SCANNER_INPUT_CELL As String = "A2"
Const PRODUCT_WORKSHEET As String = "Batteries"
Const PRODUCT_COUNT_COLUMN As Integer = 2
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range(SCANNER_INPUT_CELL) Then
Call IncrementCycleCount(Target.Value)
Target.Value = ""
Target.Select
End If
End Sub
Sub IncrementCycleCount(productID As String)
Dim productList As Variant
productList = Sheets(PRODUCT_WORKSHEET).UsedRange.Columns(1)
Dim i As Long
For i = 1 To UBound(productList)
If productList(i, 1) = productID Then
Sheets(PRODUCT_WORKSHEET).Cells(i, 2) = Sheets(PRODUCT_WORKSHEET).Cells(i, 2) + 1
Exit Sub
End If
Next i
End Sub
解决方案
您在Worksheet_Change
-Event 中调用增量例程。该例程更改工作表中的数据并再次触发Worksheet_Change
-Event,该事件调用Increment例程等等(直到堆栈上没有更多空间)
将语句Application.EnableEvents = False
放在事件例程的顶部以防止触发新事件,并Application.EnableEvents = True
在例程结束时重新启用它们:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Goto Change_End ' Ensure that events are enables in any case
Application.EnableEvents = False
If Target = Range(SCANNER_INPUT_CELL) Then
Call IncrementCycleCount(Target.Value)
Target.Value = ""
Target.Select
End If
Change_End:
Application.EnableEvents = True
End Sub
推荐阅读
- matlab - 如何在MATLAB中找到字符实体
- java - Spark Streaming 在应用程序 UI 上不显示任何记录
- xcode - 是否有使用 IDEA 的 VLOOKUP 功能?
- json - 如何完全按照 Wireshark 将其显示为 JSON 的方式保存数据包列表?
- highcharts - Highchart 热图分组类别插件样式问题
- python - Python数据框 - 比较两个数据框之间的行
- css - 如何评估 CSS 网格中大网格区域之外的一行的最大内容和最小内容?
- vba - Access VB 不导入所有 Excel 列
- django - django 管理站点自定义 change_list.html
- c - 处理 < > 内的 argv 值:意外标记“换行符”附近的语法错误