使用vba 禁止重复录入数据,写的好像没效果,代码该怎么修改

把textbox的信息传递到sheet1对应的列里面,数据是可以传递过去,但是有一个比较麻烦的问题就是点多几下,也传递进去了,里面的条件信息该怎么修改才能禁止多次录入或者... 把textbox的信息传递到sheet1对应的列里面,数据是可以传递过去,但是有一个比较麻烦的问题就是点多几下,也传递进去了,里面的条件信息该怎么修改才能禁止多次录入或者重复录入????Private Sub quedingluru_Click() Dim i As Long, dic As Object, k Set dic = CreateObject("Scripting.Dictionary") If dic.exists("TextBox1.Text & TextBox3.Text") Then MsgBox "信息已存在" Else k = k + 1 dic.Add TextBox1.Text & TextBox3.Text, k With Sheets("sheet1") i = .[a1].CurrentRegion.Rows.Count + 1 .Cells(i, 1) = TextBox1.Text .Cells(i, 2) = TextBox2.Text .Cells(i, 3) = TextBox4.Text .Cells(i, 4) = TextBox3.Text End WithMsgBox "录入成功" End IfEnd Sub 展开
 我来答
syx54
2017-09-08 · TA获得超过7379个赞
知道大有可为答主
回答量:6567
采纳率:83%
帮助的人:2800万
展开全部
你没有理解并掌握变量的作用域以及变量的声明周期这两个概念;

你在过程quedingluru_Click()里,声明的变量dic、k,每当该过程结束,该变量就从内存里消失了,下次再次进入,该变量的值重新开始,上次的内容是不记忆的。

解决办法,你需要把它们声明为模块级变量。

Private dic As Object
Private YesNo As Boolean '开关状态
Private k As Long

注意:把 上面三行代码,放在整个代码窗口的最最上面的位置!!!!

完整代码如下:

Private dic As Object
Private YesNo As Boolean '开关状态
Private k As Long

Private Sub quedingluru_Click()
'使用YesNo的开关作用,是为了保证只运行一次CreateObject
If Not YesNo Then
YesNo = True
Set dic = CreateObject("Scripting.Dictionary")
End If
If dic.exists("TextBox1.Text & TextBox3.Text") Then
MsgBox "信息已存在"
Else
k = k + 1
dic.Add TextBox1.Text & TextBox3.Text, k
With Sheets("sheet1")
i = .[a1].CurrentRegion.Rows.Count + 1
.Cells(i, 1) = TextBox1.Text
.Cells(i, 2) = TextBox2.Text
.Cells(i, 3) = TextBox4.Text
.Cells(i, 4) = TextBox3.Text
End With
MsgBox "录入成功"
End If
End Sub
追问

谢谢大神指导,dic.Add TextBox1.Text & TextBox3.Text, k,如果有重复的,会直接报错,这个位置该怎么处理,求指教

追答
上面有一句判断的地方,应该不加双引号的?
if dic.exists(TextBox1.Text & TextBox3.Text) Then
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式