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.

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

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

Eu quero acompanhar os detalhes abaixo em uma das planilhas, quando o usuário abrir a planilha.

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

Por favor me ajude. Obrigado

    
por Kiran Sakaray 18.11.2014 / 21:40

1 resposta

1

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

Se você quiser o nome de usuário do usuário, o Application.UserName funciona bem. Se você quer o nome de usuário do windows, você tem que 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, no ThisWorkbook, eu coloco 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   
    
por 19.11.2014 / 00:22