excel RFID阅读器的标签-如何在特定列中的下一个空单元格中捕获Tag_ID,比如从A2开始到A3000

lbsnaicq  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(271)

用于捕获A列中的TAG_ID的excel电子表格


的数据
我试图捕获的Tag_ID仅列A的RFID阅读器上的卡的每一个轻敲.时间将自动输出在列B对应于每个TAG_ID捕获列A.
这里的问题:
在允许任何人点击读卡器上的卡片之前,我必须故意将光标放在A2上。如果光标放在电子表格的其他位置(例如光标在H3),则Tag_ID在H3捕获,而不是在A2捕获。
我非常感谢如果任何人可以帮助我调整我的代码,这样无论我把光标放在电子表格上,TAG_ID将被捕获在A2(在开始),然后为后续卡水龙头,Tag_ID将被捕获在列A中的下一个空行。
下面是当前用于捕获TAG_ID的代码:

  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.Column = 1 Then
  3. Cells(Target.Row, 2).Value = Now
  4. Beep
  5. End If
  6. End Sub
  7. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  8. End Sub

字符串
谢谢你
我在理解和编写JavaScript代码方面仍然是个新手。
我尝试了其他类似的代码来测试:

  1. Sub Store_Reference_Next_Empty_Row()
  2. Dim nextEmptyCell As Range
  3. Set nextEmptyCell= Range("A" & Row.Count).End(xlUp).Offset(1)
  4. nextEmptyCell.value=Now


使用此代码,当我运行宏时,数据(错误)出现在表的最后一行。



如果使用卡点击RFID阅读器,我设置必须故意将光标放在A2上......但即使捕获了TAG_ID,也没有及时输出时钟


tvmytwxo

tvmytwxo1#

如果工作表中有一个表格是使用插入>表格或Ctrl+T创建的,那么定位最后一个数据行的方法略有不同。您不需要使用Worksheet_SelectionChange事件。

  • 选项1:* 假设A列中的数据是连续的(意味着数据之间没有空白单元格).
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.CountLarge = 1 Then
  3. ' Taget is non-blank and on Column A
  4. If Target.Column = 1 And Len(Target.Value) > 0 Then
  5. Application.EnableEvents = False
  6. Cells(Target.Row, 2).Value = Now
  7. Beep
  8. Dim c As Range
  9. ' Locate the last row from top
  10. Set c = Target.Offset(1)
  11. If c.ListObject Is Nothing Then
  12. ' the table is full, add a row
  13. Target.ListObject.ListRows.Add
  14. End If
  15. c.Select
  16. Application.EnableEvents = True
  17. End If
  18. End If
  19. End Sub

字符串

  • 选项2:* 无论A列中的数据是否连续.
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2. If Target.CountLarge = 1 Then
  3. ' Taget is non-blank and on Column A
  4. If Target.Column = 1 And Len(Target.Value) > 0 Then
  5. Application.EnableEvents = False
  6. Cells(Target.Row, 2).Value = Now
  7. Beep
  8. Dim c As Range
  9. ' Locate the last row of table from bottom
  10. Set c = Me.Cells(Me.Rows.Count, 1).End(xlUp)
  11. If c.Value = "" Then
  12. ' locate "real" last data row
  13. Set c = c.End(xlUp)
  14. Else
  15. ' the table is full, add a row
  16. c.ListObject.ListRows.Add
  17. End If
  18. c.Offset(1).Select
  19. Application.EnableEvents = True
  20. End If
  21. End If
  22. End Sub

  • 更新2:*

问:在任何时间点(如果在开始时必须选择A2),如果在捕获列A中的数据期间意外选择了其他单元格,则会破坏捕获列A中数据的连续性。

  1. Option Explicit
  2. Private Sub Worksheet_Change(ByVal Target As Range)
  3. If Target.CountLarge = 1 Then
  4. Dim tValue, c As Range
  5. tValue = Target.Value
  6. ' Assumes the length of TAG_ID is 7, modify as needed
  7. If Len(tValue) = 7 And VBA.IsNumeric(tValue) Then
  8. Application.EnableEvents = False
  9. ' Scan result is in column A
  10. If Target.Column = 1 Then
  11. Cells(Target.Row, 2).Value = Now
  12. Set c = Target
  13. Else
  14. ' Scan result is NOT in column A
  15. ' Locate the last row of table from bottom
  16. Set c = Me.Cells(Me.Rows.Count, 1).End(xlUp)
  17. If c.Value = "" Then Set c = c.End(xlUp)
  18. Set c = c.Offset(1)
  19. ' Clear TAG_ID
  20. Target.Value = ""
  21. ' Relocate to column A
  22. c.Value = tValue
  23. c.Offset(0, 1) = Now
  24. End If
  25. ' Select cell for next scan
  26. c.Offset(1).Select
  27. ' Expand table
  28. If ActiveCell.ListObject Is Nothing Then
  29. c.ListObject.ListRows.Add
  30. End If
  31. Beep
  32. Application.EnableEvents = True
  33. End If
  34. End If
  35. End Sub


添加SelectionChange事件可确保活动单元格始终位于A列中的正确单元格上。这有助于防止新的TAG扫描破坏表中的现有数据。

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Dim c As Range
  3. If Target.CountLarge = 1 Then
  4. If Me.ListObjects.Count > 0 Then
  5. Set c = Application.Intersect(Me.ListObjects(1).Range, Target)
  6. If Not c Is Nothing Then
  7. Set c = Me.Cells(Me.Rows.Count, 1).End(xlUp)
  8. If c.Value = "" Then Set c = c.End(xlUp)
  9. Set c = c.Offset(1)
  10. Application.EnableEvents = False
  11. c.Select
  12. Application.EnableEvents = True
  13. End If
  14. End If
  15. End If
  16. End Sub

更新3

问:如果我有一个单元格范围(命名为“NoTouch”)不在表中,我不希望TAG_ID覆盖,但仍然跳转到捕获列A中的数据。

  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Dim c As Range, dataRange As Range
  3. If Target.CountLarge = 1 Then
  4. If Me.ListObjects.Count > 0 Then
  5. Set dataRange = Application.Union(Me.ListObjects(1).Range, Me.Range("NoTouch"))
  6. Set c = Application.Intersect(dataRange, Target)
  7. If Not c Is Nothing Then
  8. Set c = Me.Cells(Me.Rows.Count, 1).End(xlUp)
  9. If c.Value = "" Then Set c = c.End(xlUp)
  10. Set c = c.Offset(1)
  11. Application.EnableEvents = False
  12. c.Select
  13. Application.EnableEvents = True
  14. End If
  15. End If
  16. End If
  17. End Sub

展开查看全部

相关问题