Excel VBA:使InStr查找整个string,而不是它的一部分
我正在尝试做一个login/注册系统。
这是注册UserForm。
Private Sub regReg_Click() Dim TextFile As Integer Dim FilePath As String If regAParole.Text = "aparole" Then FilePath = ThisWorkbook.Path & "\accounts.txt" TextFile = FreeFile Open FilePath For Append As #1 Print #TextFile, regID; regAmats; regParole Close TextFile MsgBox ("Registracija veiksmiga.") Unload Registracija Else MsgBox ("Nepareiza administratora parole.") End If End Sub
“aparole”的东西基本上只是一个关键字进入一个领域,所以只有pipe理员可以创build新的帐户。
accounts.txt内容如下所示:
1DirectorPassword(ID + jobposition +密码)
这是authentication:
Private Sub logAuth_Click() Dim TextFile As Integer Dim FilePath As String Dim FileContent As String Dim find As String Dim result As Integer find = logID & logAmats & logParole FilePath = ThisWorkbook.Path & "\accounts.txt" TextFile = FreeFile Open FilePath For Input As TextFile FileContent = Input(LOF(TextFile), TextFile) result = InStr(FileContent, find) If result >= 1 Then MsgBox ("Autorizacija veiksmiga!") ' Success Unload Autorizacija End If
基本上,当我login的时候,在accounts.txt中search注册时使用的string组合(ID + jobposition + password)。 所以一般来说这种方法是有效的,但是:
如果我input完全匹配的所有东西=很好
如果我input密码的一半,如= 1DirectorPass的格式,它仍然工作,所以基本上我怎么能告诉只search整个string,而不是它的一部分?
我认为问题在于InStr …
您可以在文件内容中testing换行标记,如下所示:
result = InStr(vbCrLf & FileContent, vbCrLf & find & vbCrLf)
这将只匹配完整的行。 在文件内容之前添加一个额外的换行符,所以也可以匹配第一行。 在文件内容的末尾,你已经有了一个vbCrLf
字符,因为Print
应该添加这个字符。