Я работаю над проектом vba-excel, который позволяет нескольким пользователям программно загружать данные в определенный ( РЕДАКТИРОВАТЬ: защищенный паролем ) файл, расположенный в SharePoint нашей компании. Проблема заключается в том, что когда несколько пользователей начинают загрузку в одно и то же время (что не очень вероятно, но возможно), процедура загрузки выполняется только для одного пользователя, а остальным выдается следующее сообщение:
Поскольку обновляемый файл должен быть открыт с разрешениями на чтение / запись, макрос не сможет выполнить загрузку.
Я безуспешно пыталсянайти код, который мог бы обойти это сообщение, чтобы макрос мог обрабатывать его программно.
Один из подходов, которые я попробовал, состоял в том, чтобы проверить, используется ли файл в настоящее время, перед его открытием:
[ myFile - строка, содержащаярасположение основного обновляемого файла (SharePoint URL)]
Приведенный ниже код в основном открывает / закрывает «myFile» в фоновом режиме и проверяет, не возникла ли какая-либо ошибка при попытке его открыть. Затем он возвращает True / False, если файл используется или нет:
On Error Resume Next
Open myFile For Binary Access Read Lock Read As #1
Close #1
fileInUse = IIf(Err.Number > 0, True, False)
On Error GoTo 0
Он работает как надо, но не при использовании URL-адресов. Результат при использовании традиционного пути DOS: число ошибок 70, когда файл используется, и 0, если нет. Результат при использовании пути URL-адреса всегда равен 75.
Предположительно, приведенный ниже код может выполнять проверку URL-адресов SharePoint, но по какой-то причине он не работает для меня:
If Workbooks.CanCheckOut(myFile) = True Then
'Open file
Else
'Run procedure to wait a few seconds and then try again
End If
Всегда возвращает True независимо от того, используется ли файл в данный момент или нет.
Ожидаемый результат:
Если myFile используется в данный момент:
Если это не так:
myfileбудет доступен только программно, поэтому единственный раз, когда он будет недоступен, это когда другой пользователь в данный момент выполняет процедуру загрузки где-то еще, и это займет около 5 секунд.
Любые предложения или комментарииочень ценятся.