Rastreando o nome de usuário e o registro de dados quando o usuário abre a planilha

0

Eu escrevi o código abaixo na planilha de código do VBA.

Private Sub Workbook_Open () MsgBox ("Bem-vindo ao Rastreador" e & Application.UserName) End Sub

O resultado é "Bem-vindo ao Tracker, Sakaray, Kiran"

Quero acompanhar os detalhes abaixo em uma das planilhas, quando o usuário abre a planilha.

Nome de usuário Data & amp; Mudanças de horário

Por favor, me ajude. Obrigado

Kiran Sakaray
fonte

Respostas:

1

Eu encontrei isso respondido em outro lugar, mas não posso encontrar essa referência agora, então eu vou te dar a solução que estou usando atualmente. Para o meu projeto, quero que uma planilha de UserAccess seja preenchida sempre que um usuário abrir a planilha, mas você pode modificá-la facilmente para atualizar uma planilha sempre que um usuário acessar a planilha, conforme explicado abaixo.

Se você deseja o nome de usuário do usuário do Excel, Application.UserName funciona bem. Se você quiser o nome de usuário do Windows, você precisa colocar uma função em um módulo para obter o nome de usuário do Windows:

Declare PtrSafe Function Get_User_Name Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Então, em ThisWorkbook, eu coloquei a seguinte função

Private Sub Workbook_Open()
    Dim wsTemp As Worksheet
    Dim bFound As Boolean
    Dim NxRow As Integer

    'First check to see if the UserAccess sheet exists
    For Each wsTemp In Worksheets
        If wsTemp.Name Like "UserAccess" Then bFound = True: Exit For
    Next

    'If it doesn't exist, add it
    If bFound = False Then Sheets.Add.Name = "UserAccess"

    With Sheets("UserAccess")
        'I like to keep this sheet protected from users editing it, so I unprotect it here first
        .Unprotect "t/c,Anm.QXz;D#9KL@Z$"

        'Find the last empty row on this sheet
        NxRow = .Cells(65536, 1).End(xlUp).Row + 1

        'Fill the cells with data
        .Cells(NxRow, 1).Value = Module1.GetUserName 'this is from the function in Module1
        .Cells(NxRow, 2).Value = DateTime.Now

        'Re-protect the sheet
        .Protect "t/c,Anm.QXz;D#9KL@Z$", UserInterfaceOnly:=True
    End With
End Sub

Se você preferir que a macro fosse executada quando a planilha fosse acessada (como você mencionou na sua pergunta), você poderia modificar a função acima e colocá-la na área de código da planilha no VBA:

Private Sub Worksheet_Activate()    
    Dim NxRow As Integer

    With ActiveSheet
        'Find the last empty row on this sheet
        NxRow = .Cells(65536, 1).End(xlUp).Row + 1

        'Fill the rows with data
        .Cells(NxRow, 1).Value = Application.UserName
        .Cells(NxRow, 2).Value = DateTime.Now
    End With
End Sub   
mjblay
fonte
é muito útil, eu tentei está funcionando.
Kiran Sakaray