Quando tentamos abrir uma planilha na rede que já está sendo utilizada por outro usuário, o excel abre como SOMENTE LEITURA e informa quem é o usuário que está com a planilha aberta.
Como identificar essa pessoa através de uma macro, assim como o excel identifica?
No caso, quando utilizo o Environ("UserName") o excel mostra o Usuário da máquina, que no meu caso é a minha matrícula aqui na empresa:
Username = "f0001234"
Porém, a mensagem de SOMENTE LEITURA excel mostra o nome completo "está bloqueado para edição po LUIZ AUGUSTO DE ARAUJO....."
Portanto, o nome que o excel usa na mensagem de SOMENTE LEITURA não é o "userName"
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Como Identificar o usuário que está com a planilha aberta na rede?[RESOLVIDO]
Como Identificar o usuário que está com a planilha aberta na rede?[RESOLVIDO]
Editado pela última vez por luizleite em Seg Jan 13, 2020 8:57 am, em um total de 1 vez.
Re: Como Identificar o usuário que está com a planilha aberta na rede?
luizleite,
Achei esse código no fórum do ozgrid. Não testei, mas parece que faz o trabalho:
Fonte: https://www.ozgrid.com/forum/index.php? ... file-open/
Achei esse código no fórum do ozgrid. Não testei, mas parece que faz o trabalho:
Código: Selecionar todos
Private Sub Workbook_Open()
If ActiveWorkbook.ReadOnly Then
Dim Folder As String
Dim FName As String
Folder = "c:\files\"
RowCount = 1
FName = Dir(Folder & "filename.xlsm")
MsgBox "The file is locked by " & GetFileOwner(Folder, FName) & "."
Else
ActiveWorkbook.Save
End If
End Sub
Function GetFileOwner(fileDir As String, fileName As String) As String
'On Error Resume Next
Dim secUtil As Object
Dim secDesc As Object
Set secUtil = CreateObject("ADsSecurityUtility")
Set secDesc = secUtil.GetSecurityDescriptor(fileDir & fileName, 1, 1)
GetFileOwner = secDesc.owner
End Function
Re: Como Identificar o usuário que está com a planilha aberta na rede?
Olá,
Obrigado pela resposta.
Esse código não funcionou para mim, pois ele pega o usuário logado, que no caso, é a minha matrícula aqui na empresa, e o nome que eu quero, é o que está registrado na licensa do office, que aqui na empresa é o nome completo do colaborador.
Mas consegui resolver o problema de uma forma simples, vou informar abaixo e mudar o statos desse tópico para resolvido:
Obs: Ainda não tenho as manhas de inserir o código na minha resposta e deixar legal visualmente....
O nome do usuário registrado no Office é conseguido através do Application.UserName
Portanto, no arquivo que preciso abrir e verificar qual usuário está utilizando, deixei uma macro gravada no evento Workbooks.Open que registra o Application.Username em Uma célula.
Então, quando eu abro esse arquivo com a minha macro, se o mesmo for somente leitura ("If ActiveWorkbook.ReadOnly Then"), eu aviso com uma msgbox o nome que ficou gravado na célula.
Resumindo... O Application.Username pega o nome de quem está registrado no office, ao qual o excel atribui nas mensagens de SOMENTE LEITURA.
Obrigado pela resposta.
Esse código não funcionou para mim, pois ele pega o usuário logado, que no caso, é a minha matrícula aqui na empresa, e o nome que eu quero, é o que está registrado na licensa do office, que aqui na empresa é o nome completo do colaborador.
Mas consegui resolver o problema de uma forma simples, vou informar abaixo e mudar o statos desse tópico para resolvido:
Obs: Ainda não tenho as manhas de inserir o código na minha resposta e deixar legal visualmente....
O nome do usuário registrado no Office é conseguido através do Application.UserName
Portanto, no arquivo que preciso abrir e verificar qual usuário está utilizando, deixei uma macro gravada no evento Workbooks.Open que registra o Application.Username em Uma célula.
Então, quando eu abro esse arquivo com a minha macro, se o mesmo for somente leitura ("If ActiveWorkbook.ReadOnly Then"), eu aviso com uma msgbox o nome que ficou gravado na célula.
Resumindo... O Application.Username pega o nome de quem está registrado no office, ao qual o excel atribui nas mensagens de SOMENTE LEITURA.