Excel VBA:使InStr查找整个字符串,而不是其中的一部分



我正在尝试创建一个登录/注册系统。

这是注册用户表单。

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内容看起来像:

1董事密码(ID+职位+密码)

这就是身份验证:

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…

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

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

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

最新更新