Проблемы со скриптом VBA — найдите пользователя, у которого открыт файл Excel с помощью сетевого ресурса

#excel #vba

#преуспеть #vba #excel

Вопрос:

Я использую следующую функцию VBA от Райана Уэллса, чтобы определить, у какого пользователя открыт Excel.

 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) amp; "~$" amp; Mid(FilePath, iPos   1)
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strTempFile) Then
    Set objWMIService = GetObject("winmgmts:")
    Set objFileSecuritySettings = objWMIService.Get("Win32_LogicalFileSecuritySetting='" amp; strTempFile amp; "'")
    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
  

Коды отлично работают, когда я указываю путь к файлу, и он начинается, например, с подключенного сетевого диска j:Workbook.xlsx . Но когда путь к файлу передается в качестве сетевого адреса, например \server1Workbook.xlsx , я получаю ошибку времени выполнения ‘-2147217406 (80041002)’.

Это был мой тестовый подраздел, и 2-й оператор выдает мне ошибку времени выполнения

 Sub test()
    Debug.Print Excel_File_in_use_by("J:Workbook.xlsx")
    Debug.Print Excel_File_in_use_by("\server1Workbook.xlsx")
End Sub
  

Можно ли использовать этот код или изменить его, чтобы иметь возможность передавать путь к файлу в сетевом адресе, поскольку иногда это требуется, поскольку не все диски будут сопоставлены.