#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
Можно ли использовать этот код или изменить его, чтобы иметь возможность передавать путь к файлу в сетевом адресе, поскольку иногда это требуется, поскольку не все диски будут сопоставлены.