我有一个主要工作的代码,除了我有验证错误... 我的代码有一个搜索框,我将姓氏放入其中,这个想法是,如果输入的姓氏在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
答案 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
,然后我认为它会做你想做的事。