Почему мой список заполняется дважды для каждой записи, а не один раз? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать систему входа в систему с 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

Я чувствую, что это нечто простое, глядя мне в лицо, но я не могупонять это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...