用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

相关文章

Vue中动态权限到按钮的完整实现方案详解

《Vue中动态权限到按钮的完整实现方案详解》这篇文章主要为大家详细介绍了Vue如何在现有方案的基础上加入对路由的增、删、改、查权限控制,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、数据库设计扩展1.1 修改路由表(routes)1.2 修改角色与路由权限表(role_routes)二、后端接口设计

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

C++实现回文串判断的两种高效方法

《C++实现回文串判断的两种高效方法》文章介绍了两种判断回文串的方法:解法一通过创建新字符串来处理,解法二在原字符串上直接筛选判断,两种方法都使用了双指针法,文中通过代码示例讲解的非常详细,需要的朋友... 目录一、问题描述示例二、解法一:将字母数字连接到新的 string思路代码实现代码解释复杂度分析三、

grom设置全局日志实现执行并打印sql语句

《grom设置全局日志实现执行并打印sql语句》本文主要介绍了grom设置全局日志实现执行并打印sql语句,包括设置日志级别、实现自定义Logger接口以及如何使用GORM的默认logger,通过这些... 目录gorm中的自定义日志gorm中日志的其他操作日志级别Debug自定义 Loggergorm中的

Spring Boot整合消息队列RabbitMQ的实现示例

《SpringBoot整合消息队列RabbitMQ的实现示例》本文主要介绍了SpringBoot整合消息队列RabbitMQ的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的... 目录RabbitMQ 简介与安装1. RabbitMQ 简介2. RabbitMQ 安装Spring

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结

springMVC返回Http响应的实现

《springMVC返回Http响应的实现》本文主要介绍了在SpringBoot中使用@Controller、@ResponseBody和@RestController注解进行HTTP响应返回的方法,... 目录一、返回页面二、@Controller和@ResponseBody与RestController

nginx中重定向的实现

《nginx中重定向的实现》本文主要介绍了Nginx中location匹配和rewrite重定向的规则与应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 目录一、location1、 location匹配2、 location匹配的分类2.1 精确匹配2

Nginx之upstream被动式重试机制的实现

《Nginx之upstream被动式重试机制的实现》本文主要介绍了Nginx之upstream被动式重试机制的实现,可以通过proxy_next_upstream来自定义配置,具有一定的参考价值,感兴... 目录默认错误选择定义错误指令配置proxy_next_upstreamproxy_next_upst