Excel VBA:使InStr找到整个字符串,而不是它的一部分

时间:2016-05-07 07:03:36

标签: excel vba excel-vba

我正在尝试建立登录/注册系统。

这是注册用户窗体。

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"事物基本上只是在字段中输入的关键字,因此只有管理员才能创建新帐户。

accounts.txt内容如下:

1DirectorPassword(ID + jobposition +密码)

这是身份验证:

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

基本上在登录时我在accounts.txt中搜索我在注册时使用的字符串组合(ID + jobposition +密码)。所以一般来说这种方法有效,但是:

如果我输入完全匹配的所有内容=效果很好

如果我输入密码的一半,就像= 1DirectorPass的格式一样,它仍然可以工作,那么基本上我怎么能告诉只搜索整个字符串而不是它的一部分呢?

我认为问题出在InStr ......

1 个答案:

答案 0 :(得分:1)

您可以在文件内容中测试换行标记,如下所示:

result = InStr(vbCrLf & FileContent, vbCrLf & find & vbCrLf)

这只会匹配完整的行。在文件内容之前添加了额外的换行符,因此也可以匹配第一行。在文件内容的末尾,您已经有vbCrLf个字符,因为Print应该添加该字符。