Excel 基于 VBA 实现序列号录入(查重、记录时间)

最近更新于 2024-10-25 17:35

Table of Contents

前言

公司生产的零件产品会打上二维码,然后使用扫码枪扫描录入系统,便于追溯。这里我用 Excel 实现了一个简易的“数据库”。

环境

Microsoft Office 2021

方案

打开 Excel,新建一个表格,按Alt+F11打开VBA编辑器,在左侧找到使用的工作表,比如我这里是Sheet1,就双击打开
file

file

然后复制粘粘下面内容后,直接关闭编辑骑窗口

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim ws As Worksheet
    Dim LastRow As Long
    Dim i As Long
    Dim InputStr As String

    ' 确保仅在A1单元格变化时执行
    If Target.Address = "$A$1" Then
        Set ws = ThisWorkbook.Sheets("Sheet1") '根据需要修改工作表名称
        InputStr = Target.Value

        ' 如果输入为空,则不处理
        If InputStr = "" Then Exit Sub

        ' 检查是否有重复
        LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        For i = 2 To LastRow
            If ws.Cells(i, 1).Value = InputStr Then
                MsgBox "输入内容重复,请重新输入。", vbExclamation
                ws.Cells(1, 1).Select
                Exit Sub
            End If
        Next i

        ' 无重复,插入数据并下移其他内容
        ws.Rows(2).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ws.Cells(2, 1).Value = InputStr
        ws.Cells(2, 2).Value = Format(Now, "yyyy-mm-dd")
        ws.Cells(2, 3).Value = Format(Now, "hh:nn:ss")

        ' 清空A1,保持光标在A1
        Application.EnableEvents = False
        ws.Cells(1, 1).Value = ""
        Application.EnableEvents = True
        ws.Cells(1, 1).Select
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Me.Range("A1")) Is Nothing Then
        ' 允许在A1单元格中选择和输入
        Application.EnableEvents = True
    Else
        ' 如果当前单元格不是A1,则切换到A1
        Application.EnableEvents = False
        Me.Range("A1").Select
        Application.EnableEvents = True
    End If
End Sub

在 Sheet1 工作表中首先会锁定活动单元格为A1,只在A1单元格输入内容,我分别输入
“ABC”、“abc”,每次输入后回车,会得到下面内容
file

每次回车输入的内容会插入到A2,并且在后面两列分别插入输入的日期和时间。
当输入重复内容时

file

Excel 基于 VBA 实现序列号录入(查重、记录时间)
Scroll to top