VB从excel获取数据 - 验证

时间:2014-04-07 13:51:14

标签: vb.net excel validation get

我有一个主要工作的代码,除了我有验证错误... 我的代码有一个搜索框,我将姓氏放入其中,这个想法是,如果输入的姓氏在excel表中,则会返回一堆信息。这符合要求,我在搜索框中输入的数据验证也是如此。

什么不起作用是我在搜索框中输入不匹配的东西时的验证(即不在excel表中)。请参阅以下代码中的“匹配验证”以查看我所指的内容。

我只是不知道它为什么不起作用。当我运行代码并输入错误的数据时,我甚至没有收到错误,它只是没有返回错误消息,就像应该和表单类型冻结一样(有点像它在非停止循环中)。 / p>

任何建议都会很棒,谢谢!这里有一些代码:

    'define objects
    Dim oExcel As Object
    Dim oBook As Object
    Dim oSheet As Object


    'Open a existing workbook and sheet in excel
    oExcel = CreateObject("Excel.Application")
    oBook = oExcel.Workbooks.Open(Filename:="c:\users\timothy\desktop\coding\output.xlsx")
    oSheet = oBook.Worksheets(1)

    Dim getSurname As String = ""
    Dim getFirstname As String = ""
    Dim getAge As String = ""
    Dim getGender As String = ""
    Dim getNum As Integer = 1
    Dim getValidate As Integer = 0    

While oBook.Worksheets(1).Range("A" & getNum).value <> searchInput.Text.ToUpper
        getNum = getNum + 1
    End While

'Length Validation (THIS WORKS)
If Len(searchInput.Text) = 0 Then
    getValidate = getValidate + 1
End If

 'Match validation (THIS DOES NOT WORK)
 If oBook.Worksheets(1).Range("A" & getNum).value <> searchInput.Text.ToUpper Then
     getValidate = getValidate + 1
 End If

If getValidate = 0 Then
    getSurname = oSheet.Range("A" & getNum).Value.ToString
    getFirstname = oSheet.Range("B" & getNum).Value.ToString
    getAge = oSheet.Range("C" & getNum).Value.ToString
    getGender = oSheet.Range("D" & getNum).Value.ToString
    outputData.Text = "SURNAME: " & getSurname & vbCrLf & "FIRSTNAME: " & getFirstname & vbCrLf & "AGE: " & getAge & vbCrLf & "GENDER: " & getGender & vbCrLf
Else
    MsgBox("ERROR!! Please enter valid Quote Number.")
End If

2 个答案:

答案 0 :(得分:0)

我认为如果你打算使用非常大的电子表格,那么你将遇到麻烦。你能不能使用Find?

请参阅:http://www.vbforums.com/showthread.php?634644-Excel-Find-Method-in-Excel-VBA-(Any-version-of-Excel)

参见Down bottom(使用find as vlookup)

答案 1 :(得分:0)

这部分代码

While oBook.Worksheets(1).Range("A" & getNum).value <> searchInput.Text.ToUpper
        getNum = getNum + 1
    End While

将继续遍历工作表,直到找到匹配项。让我们假设您到达数据的最后一行但还没有匹配。下一个&#34; A&#34; &安培; getNum将为空,这将不匹配,因此它将继续While,直到它达到您的行限制和错误。它永远不会找到匹配,因此它永远不会出现在您的支票上。

但是,我想如果你在那里检查那些空白单元格......

 While oBook.Worksheets(1).Range("A" & getNum).value <> searchInput.Text.ToUpper
        if oBook.Worksheets(1).Range("A" & getNum).value  = "" then
            exit while
        else
            getNum = getNum + 1
        end if
    End While

,然后我认为它会做你想做的事。