为什么为每个条目填充两次我的列表,而不是一次?

时间:2019-04-09 19:58:51

标签: excel vba

我正在尝试使用VBA创建登录系统。我从以下位置查看了PasswordBook文件:https://www.ozgrid.com/download/,它可以很好地满足我的需求。我添加了自己的用户名和密码,甚至还可以记录用户登录的时间。

我的问题是我想对其进行一些修改以创建历史记录以查看谁已登录。我在工作簿中制作了第二张工作表,其中有一张表格来跟踪此情况。登录时,它两次写入Sheet2中的列表,而不是一次。

我希望系统写入表中的下一个可用行,以清晰记录谁在登录。我尝试过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

在一个模块中,我可以将数据从Sheet1写入Sheet2:

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

我觉得这很简单,但我无法弄清楚。

0 个答案:

没有答案