从Excel中检查多个值的行

时间:2014-01-31 05:27:43

标签: excel vba excel-vba

我正在通过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

一切正常,他们可以点击“保存”

感谢您的帮助(抱歉这个愚蠢的问题!)

1 个答案:

答案 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

enter image description here

你会经常需要这个功能....有时候你想要返回Idx而不只是True/False来返回记录的编号 - 如果你必须决定是否插入/追加或更新记录。