用Excel VBA代码实现去重录入某字段内容

2023-10-27 23:30

本文主要是介绍用Excel VBA代码实现去重录入某字段内容,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

功能描述


图1 信息录入表单示意图


图2 用于录入信息的自定义窗体示意图

如图所示,在样表中用自定义窗体录入信息,要求:

1、日期自动设为当前日期,不用手动录入;

2、车牌号不能重复录入(之前重复的不作考虑),否则停止运行,并弹出消息;


要点分析

1、实现功能1要点

  禁用日期文本框,当前日期用Format(Date, "yyyy/m/d")获取

2、实现功能2要点

(1)查找车牌号:用for-each遍历,若找到,则转至(2);否则转至(4)

(2)中断循环,给出提示:用MsgBox;

(3)再选中该车牌号文本:用text.SelStart和text.SelLength;转到(6)

-------------------

(4)在新的一行录入信息:新行标用Range("A65536").End(xlUp).Row+1

(5)录入文本框内容清理;

(6)退出录入过程;


其他组件

1、主窗体fmMain

在打开Excel或选中Sheet2时显示该主页面:


2、查询窗体fmQuery

查询车牌号,结果列在Sheet3中:


完整代码

1、录入窗体fmImput代码:

Option Explicit
Private Sub cmdSave_Click()'非空验证If txtDate.Value = "" Or txtUserName.Value = "" Or txtUserCarNo.Value = "" _Or txtUserTel.Value = "" Or txtUserCarType.Value = "" ThenMsgBox "信息录入不完整,请补充完整后再保存!", vbCritical, "录入错误"txtUserName.SetFocusExit SubEnd If'车牌号去重验证Dim carID As String:        carID = txtUserCarNo.TextDim REPEATED As Boolean:    REPEATED = FalseDim cell As RangeFor Each cell In Sheet1.Columns("B:B").CellsIf cell.Value = carID ThenREPEATED = TrueExit ForEnd IfNext'未通过验证If REPEATED ThenMsgBox "您当前录入车牌号[" + carID + "]已被其他用户录入,请重新输入!", vbCritical, "车牌号重复"REPEATED = FalsetxtUserCarNo.SetFocustxtUserCarNo.SelStart = 0txtUserCarNo.SelLength = Len(carID)Exit SubEnd If'通过验证Application.ScreenUpdating = FalseSheet1.ActivateDim newRow As IntegernewRow = Sheet1.Range("A65536").End(xlUp).Row + 1Cells(newRow, 1).Value = txtDate.TextCells(newRow, 2).Value = txtUserCarNo.ValueCells(newRow, 3).Value = txtUserName.ValueCells(newRow, 4).Value = txtUserTel.ValueCells(newRow, 5).Value = txtUserCarType.ValueMsgBox "用户信息保存成功,单击【确定】继续!", vbInformation, "操作成功"txtUserCarNo.Value = ""txtUserName.Value = ""txtUserTel.Value = ""txtUserCarType.Value = ""Application.ScreenUpdating = True
End SubPrivate Sub cmdBack_Click()fmInput.HideSheet2.Activate
End SubPrivate Sub UserForm_Initialize()txtDate.Text = Format(Date, "yyyy/m/d")txtDate.Enabled = FalsetxtUserCarNo.Value = ""txtUserName.Value = ""txtUserTel.Value = ""txtUserCarType.Value = ""
End Sub


2、主窗体fmMain代码:

Private Sub cmdAddUserInfo_Click()Sheet1.ActivatefmMain.HidefmInput.Show
End SubPrivate Sub cmdQuery_Click()Sheet3.ActivatefmMain.HidefmQuery.Show
End Sub


3、查询车牌窗体fmQuery代码:

Private Sub cmdQuery_Click()'非空验证If txtTargetCarID.Value = "" ThenMsgBox "要查询的车牌号错误或为空值", vbCritical, "输入错误"txtTargetCarID.SetFocusExit SubEnd IfApplication.ScreenUpdating = FalseSheet1.Activate'获取数据源区域和查询条件Dim carID As String:    carID = txtTargetCarID.TextDim lastRow As Integer: lastRow = Range("A65536").End(xlUp).RowSet sourceArea = Range(Cells(2, 1), Cells(lastRow, 5))'获取匹配记录总数Dim cell As RangeDim resultCount As IntegerFor Each cell In Sheet1.Range("B2:B" & lastRow)If cell.Value = carID ThenresultCount = resultCount + 1End IfNext'无记录则退出查询Dim info As StringIf resultCount = 0 Theninfo = "操作失败!" & vbCrLf & "没有找到车牌号为[ " & carID & " ]的用户信息,请核对车牌号后重试!"MsgBox info, vbCritical, "查询结果"txtTargetCarID.SetFocustxtTargetCarID.SelStart = 0txtTargetCarID.SelLength = Len(carID)Exit SubEnd If'有记录则循环输出查询结果Dim resultArea()ReDim resultArea(1 To resultCount, 1 To 5)Dim sourceRow As IntegerDim resultRow As IntegerFor sourceRow = 1 To sourceArea.Rows.CountIf sourceArea.Item(sourceRow, 2).Value = carID ThenresultRow = resultRow + 1For i = 1 To 5resultArea(resultRow, i) = sourceArea(sourceRow, i)Next ii = 0End IfNextSheet3.ActivateRange("A2:E65536").ClearContentsRange("A2:E5").Resize(resultCount) = resultAreainfo = "操作成功!" & vbCrLf & "共查询到" & resultCount & "条车牌号为[" & carID & "]的用户信息!"MsgBox info, vbInformation, "查询结果"txtTargetCarID.Text = ""txtTargetCarID.SetFocusApplication.ScreenUpdating = TrueEnd SubPrivate Sub cmdCancel_Click()fmQuery.HideSheet2.Activate
End Sub

运行结果:

(1)录入重复车牌号时:




(2)录入不重复车牌时:





(3)查询到已有车牌时:(多条记录)





(4)未查询到结果时:




要点小结

1、命名统一采用“控件简称+描述性名称”(如txtDate、cmdSave等)的方式,便于后期维护与更新;

2、选中文本框中文本的方法:

        txtUserCarNo.SetFocustxtUserCarNo.SelStart = 0txtUserCarNo.SelLength = Len(carID)

3、获取工作表中整列区域:

Sheet1.Columns("B:B").Cells
4、获取当前区域的最后一行行标:

Sheet1.Range("A65536").End(xlUp).Row

5、格式化当前时间:

Format(Date, "yyyy/m/d")

6、初始化窗体的控件事件不能使用自定义名称:

正确:

Private Sub UserForm_Initialize()...
End Sub

错误:

Private Sub fmInput_Initialize()...
End Sub

7、命令按钮快捷键设置:用Accelerator属性

指定按钮快捷键

8、使用动态数组节约内存资源:

        Dim resultArea()ReDim resultArea(1 To resultCount, 1 To 5)

这篇关于用Excel VBA代码实现去重录入某字段内容的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/289139

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

MySQL双主搭建+keepalived高可用的实现

《MySQL双主搭建+keepalived高可用的实现》本文主要介绍了MySQL双主搭建+keepalived高可用的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、测试环境准备二、主从搭建1.创建复制用户2.创建复制关系3.开启复制,确认复制是否成功4.同