Я пытаюсь создать систему входа в систему с VBA.Я посмотрел на файл PasswordBook отсюда: https://www.ozgrid.com/download/, и он работает очень хорошо для того, что мне нужно.Я добавил свои собственные имена пользователей и пароли и даже смог заставить его записывать время входа пользователя в систему.
Моя проблема в том, что я хочу немного изменить его, чтобы создать историю, чтобы увидеть, кто имеетвход в систему. Я сделал второй лист в книге с таблицей, чтобы отслеживать это.Когда я вхожу в систему, он записывает в список на листе 2 дважды, а не один раз.
Я хочу, чтобы система записала следующую доступную строку в таблице, чтобы вести аккуратную запись о том, кто входит в систему. Iпопытался пойти по маршруту IsEmpty()
, но я не смог сделать эту работу, поэтому я решил использовать WorksheetFunction.CountA
.Он работал в том смысле, что записывал в следующую пустую строку, но записывал в две строки вместо одной.
В Sheet1 у меня есть этот код для отслеживания лица и времени, когда они вошли в систему.
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 4 And Target.Row = 2 Then
If Target.Value = "" Then
Cells(2, 5).Value = ""
Else
Cells(2, 5).Value = Format(Now, "mm/dd/yyyy hh:mm:ss")
End If
End If
Call Logger
End Sub
И в модуле у меня есть это, чтобы записать эти данные с Листа 1 на Лист2:
Option Explicit
Sub Logger()
Dim LastRowUser As Long
Dim LastRowDate As Long
Dim NameInfo As String
Dim DateInfo As String
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")
NameInfo = ws1.Range("D2")
DateInfo = ws1.Range("E2")
LastRowUser = ws2.Range("B" & Rows.Count).End(xlUp).Row + 1
LastRowDate = ws2.Range("C" & Rows.Count).End(xlUp).Row + 1
If WorksheetFunction.CountA(Range("B2:B32")) = 0 Then
ws2.Range("B" & LastRowUser).Value = NameInfo
End If
If WorksheetFunction.CountA(Range("C2:C32")) = 0 Then
ws2.Range("C" & LastRowDate).Value = DateInfo
End If
End Sub
Я чувствую, что это нечто простое, глядя мне в лицо, но я не могупонять это.