Страницы: 1
RSS
Получить в коде VBA Username того, кто сидит в ReadOnly.
 
Когда я открываю файл экселя на общем диске и кто-то в нем сидит,  мне пишет имя пользователя, того,  кто сидит.
Можно как то в переменную получить это имя пользователя в код VBA?

(WriteReservedBy пишет мое имя пользователя,  не смотря на то что файл открыт другим сотрудником и у меня документ открыт в режиме чтения.)
Работать надо не 12 часов, а головой.
 
Как вариант попробовать загнать через SET и посмотреть все параметры в этот момент, может есть там какая зацепка.
Ну или альтернативу небольшую, если в файле уже есть макросы, то сделать макрос, который будет при открытии этого документа загонять имя пользователя например в ячейку, список формировать, или в текстовый документ кто зашёл и в каком режиме.
Ну или вот #5
Ещё вот тут
Изменено: Alemox - 19.07.2018 13:25:45
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Спасибо большое за разъяснения и ссылки.
Да, смотрела через Set прежде чем писать на форум, но надеялась что я проглядела = что такое существует, но я не нашла.
Файлом пользуется много человек и таких файлов не один по разным регионам. В общем макросы в данном случае это не решение, т.к. чаще всего по умолчанию у других они отключены.

Можно ли пойти следующим путем: если файл открылся в режиме ReadOnly, то я его закрою макросом же и открою заново в конце обработки, но чтобы он выдавал сообщение.
У меня при обработке макросами сообщение не выдает (тихо открывает в readonly, если недоступен режим чтения и переходит к обработке следующего файла. Причем в коде строчки Application.DisplayAlerts=False нету.

Что бы это уведомление выскакивало надо что-то в Open прописать? IgnoreReadOnlyRecommended = False ?

Цитата
Workbooks.Open (FileName , UpdateLinks , ReadOnly , Format , Password , WriteResPassword , IgnoreReadOnlyRecommended , Origin , Delimiter , Editable , Notify , Converter , AddToMru , Local , CorruptLoad)
https://msdn.microsoft.com/en-us/vba/excel-vba/articles/workbooks-open-method-excel
Изменено: Leanna - 22.07.2018 15:51:14
Работать надо не 12 часов, а головой.
 
Цитата
Leanna написал:
У меня при обработке макросами сообщение не выдает
Но Вы можете после открытия проверить свойство Workbook.Readonly
Владимир
 
да, только это и умею.
Работать надо не 12 часов, а головой.
 
В принципе, если Вы в макросе открыли файл, который уже ранее открыт другим пользователем (или Вами), то можно попробовать определить имя "конкурента" следующим образом. Поищите в том же каталоге (скрытый) файл ~$имяВашегоФайла. В первом байте будет длина имени конкурента, далее - само имя.
Владимир
 
Добрый вечер, Владимир.
Цитата
sokol92 написал:
файл ~$имяВашегоФайла. В первом байте будет длина имени конкурента, далее - само имя.
Спасибо за информацию. Что-то я не проявил любопытства посмотреть, а что там :(
 
Цитата
sokol92 написал:
В первом байте будет длина имени конкурента, далее - само имя.
Завтра поэкспериментирую на работе. А как читать информацию из "первого байта"? какой командой?
Работать надо не 12 часов, а головой.
 
Командой тут, увы, не обойдешься. Так как вспомогательный файл открыт, его приходится предварительно копировать.

Попробуйте следующую упрощенную функцию. Предполагается, что все пользователи имеют одну и ту же кодовую страницу Windows по умолчанию.
Код
' Выдает имя пользователя, открывшего книгу wbPath (указывать c путем и расширением)
Function GetBlockName(Optional ByVal wbPath)
   Dim fso As Object, ts As Object, tmp, w
   Set fso = CreateObject("Scripting.FileSystemObject")
   On Error Resume Next
   With fso
     tmp = .GetTempName
     .GetFile(.GetParentFolderName(wbPath) & "\~$" & .GetFileName(wbPath)).Copy tmp, True
     If Err.Number = 0 Then
       Set ts = .OpentextFile(tmp)
       w = ts.ReadAll
       ts.Close
       Kill tmp
       GetBlockName = Trim(Mid(w, 2, 40))
     End If
   End With
   Set ts = Nothing
   Set fso = Nothing
End Function
Пример использования:


Код
Sub test() 
MsgBox GetBlockName("C:\Temp\CustomView.xlsm")
End Sub
Изменено: sokol92 - 22.07.2018 22:51:35
Владимир
 
sokol92, Владимир, вечер добрый. А разве на ReadOnly не дает открыть без копии? Set ts = .OpentextFile(wbPath,1) . Сразу скажу не проверял.
По вопросам из тем форума, личку не читаю.
 
Здравствуйте, Михаил! А я проверил... Параметры родного для Excel оператора open также не удалось подобрать. Интересно, что и старая добрая команда copy не "видит" этот вспомогательный файл. А в Far'е проблем нет.
Изменено: sokol92 - 22.07.2018 23:27:36
Владимир
 
Цитата
sokol92 написал:
Интересно, что и старая добрая команда copy не "видит" этот вспомогательный файл.
Владимир, не видит, по тому, что файл скрытый . Если снять атрибут, то копирует нормально, но открыть не дает все равно.
По вопросам из тем форума, личку не читаю.
Страницы: 1
Наверх