- 27 Mai 2020 às 08:31
#55278
Objetivamente:
Como é possível saber, com VBA, qual o nome do usuário que tem um ficheiro em excel aberto, ficheiro esse que está algures num servidor e não no disco local?
Contexto
Tenho procurado por uma função, em VBA, que me informe se um arquivo em excel esta aberto por um usuário e, em caso afirmativo, qual é o nome do usuário.
Consegui encontrar uma rotina que faz isso, porém apenas se o arquivo aberto estiver no disco local, o que não é o meu caso, segue a função citada:
É possível fazer isso no VBA?
Como implementar isso?
Como é possível saber, com VBA, qual o nome do usuário que tem um ficheiro em excel aberto, ficheiro esse que está algures num servidor e não no disco local?
Contexto
Tenho procurado por uma função, em VBA, que me informe se um arquivo em excel esta aberto por um usuário e, em caso afirmativo, qual é o nome do usuário.
Consegui encontrar uma rotina que faz isso, porém apenas se o arquivo aberto estiver no disco local, o que não é o meu caso, segue a função citada:
Código: Selecionar todos
Eu precisava de uma função para verificar se um arquivo específico, neste caso um arquivo excel365, colocado em um servidor específico, está aberto por um usuário e, em caso afirmativo, qual é o nome do usuário.Function Excel_File_in_use_by(FilePath As String) As String
Dim strTempFile As String
Dim iPos As Integer, iRetVal As Integer
Dim objFSO As Object, objWMIService As Object, objFileSecuritySettings As Object, objSD As Object
iPos = InStrRev(FilePath, "\")
strTempFile = left(FilePath, iPos - 1) & "\~$" & Mid(FilePath, iPos + 1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strTempFile) Then
Set objWMIService = GetObject("winmgmts:")
Set objFileSecuritySettings = objWMIService.Get("Win32_LogicalFileSecuritySetting='" & strTempFile & "'")
iRetVal = objFileSecuritySettings.GetSecurityDescriptor(objSD)
If iRetVal = 0 Then
Excel_File_in_use_by = objSD.Owner.Name
Else
Excel_File_in_use_by = "unknown"
End If
Set objWMIService = Nothing
Set objFileSecuritySettings = Nothing
Set objSD = Nothing
Else
Excel_File_in_use_by = vbNullString
End If
Set objFSO = Nothing
End Function
É possível fazer isso no VBA?
Como implementar isso?