我正在通过VBA excel创建数据输入表单。我对此很新,并且无法获得任何有意义的搜索结果,因为我不确定我想要做什么的名称。
无论如何,我正在制作的表单是用户输入从运行审核中收集的数据,单击“保存”按钮时,文本框和组合框中的数据将写入excel工作簿中的新行。 在我的表单中,有四个字段标识每个数据条目(年,季度,日,沃德),然后是其余数据。我试图获取一些代码,以首先检查工作簿中是否已存在具有相同值的行,以防止重复输入。
e.g。电子表格包含以下数据 -
年 - 季度----天---很难
2013 ---------- 1 ---------星期一 - ICU
2013 ---------- 2 ---------星期一 - ICU
2013 ---------- 3 ---------星期一 - ICU
2013 ---------- 4 ---------星期一 - ICU
2014 ---------- 1 ---------星期一 - ICU
用户输入具有以下值的新条目
年 - 2014年
季度 - 1
日 - 周一
沃德 - ICU
我需要一些可以给出结果的代码(Msgbox说重复条目等)
但如果他们输入的是
年 - 2014年
季度 - 2
日 - 周一
沃德 - ICU
一切正常,他们可以点击“保存”
感谢您的帮助(抱歉这个愚蠢的问题!)
答案 0 :(得分:0)
这是一个代码片段(Function IsDuplicate()
),它遍历一个范围,直到第一个空白行(准确地说是第一列为空的第一行),并将4个关键字段与您提供的4个参数进行比较
您可以从“保存”按钮调用此按钮,并根据结果继续编写和关闭表单,或拒绝写入并显示MsgBox。
Sub Test()
Dim DTab As Range
Set DTab = ActiveSheet.[B3] ' define start of data table
If IsDuplicate(DTab, 1, 1, 1, 1) Then ' your form input here instead of 1,1,1,1
MsgBox ("duplicate")
' stay in form
Else
MsgBox ("unique")
' write record and close form
End If
End Sub
Private Function IsDuplicate(DRange As Range, P1 As Variant, P2 As Variant, P3 As Variant, P4 As Variant) As Boolean
Dim Idx As Long
IsDuplicate = False
Idx = 2 ' 1st row is header
Do While DRange(Idx, 1) <> "" ' break at 1st blank row
If DRange(Idx, 1) = P1 And _
DRange(Idx, 2) = P2 And _
DRange(Idx, 3) = P3 And _
DRange(Idx, 4) = P4 Then
IsDuplicate = True
Exit Do
End If
Idx = Idx + 1
Loop
End Function
你会经常需要这个功能....有时候你想要返回Idx
而不只是True/False
来返回记录的编号 - 如果你必须决定是否插入/追加或更新记录。