Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/21: Рейтинг темы: голосов - 21, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 8
Записей в блоге: 1
1
Excel

Определение имени пользователя, у которого в данный момент открыт файл Excel

27.09.2021, 14:07. Показов 4219. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день.
Есть макрос для внесения изменения в файл. Данный файл расположен на сетевом диске, к которому имеют доступ большое количество пользователей.
Перед внесением изменений в данный файл, необходимо проверить, занят ли он другим пользователем и вывести имя пользователя.

Я добавила функцию для проверки открытия файла.
Visual Basic
1
2
3
4
5
6
7
8
Function FileIsBusy(File$) As Boolean   
    a = ""
    Dim FN%: FN = FreeFile
    On Error Resume Next
    Open File For Random Access Write Lock Write As #FN
    Close #FN
    FileIsBusy = (Err <> 0)       
End Function
Затем в основном макросе прописываю условие для вывода сообщения:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
If FileIsBusy("Q:\Свод_ПБУ_2022.xlsx") = True Then
    'a = CreateObject("wscript.network").UserName
    'a = Environ("UserName")
    'a = WMI_UserFullName
    'a = Workbooks("Свод_ПБУ_2022.xlsx").UserStatus
    'Set objSysInfo = CreateObject("ADSystemInfo")
    'a = objSysInfo.UserName
 
    MsgBox ("Файл занят пользователем ") & a
    Exit Sub
End If
Но имя пользователя при любом из испробованных способов - моё. Если файл открыт у коллеги с её компьютера и учетной записи, я этого не вижу.
Как исправить данную ошибку? Испробовала все варианты. Определение пользователя переносила и в функцию, результат не меняется.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.09.2021, 14:07
Ответы с готовыми решениями:

Как узнать имя пользователя, который запустил данный командный файл от имени другого пользователя?
Вопрос задаю в ветке PowerShell, т.к. скорее его средствами, нежели средствами одного только...

Удалить графический файл, изображение которого в данный момент фон рабочего стола
В win7 фон рабочего стола настроен так чтобы изображения брались из определённой папки или...

Как узнать открыт ли данный Excel документ в OLE
Здравствуйте. С помощью свойства OlePropertyGet можно подключиться к книге...

Возращение имени исполняемого в данный момент файла
Необходимо узнать имя исполняемой сейчас программы, работающее и для предпросмотра. Пробовал...

Выделение пункта меню, подпункт которого данный момент активен
На сайте есть меню &lt;ul class=&quot;menu&quot;&gt; &lt;li...

4
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
27.09.2021, 15:21 2
Лучший ответ Сообщение было отмечено Yana89 как решение

Решение

Можно в нужный файл встроить макросы, создающие файл с именем открывающего и удаляющие его имя перед закрытием, и потом проверять этот файл лог.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Workbook_Open()
    Open "Q:\Свод_ПБУ_2022.log" For Output Lock Write As #1
    Print #1, Environ("UserName")
    Close #1
End Sub
 
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Open "Q:\Свод_ПБУ_2022.log" For Output Lock Write As #1
    Print #1, ""
    Close #1
End Sub
1
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 8
Записей в блоге: 1
28.09.2021, 10:22  [ТС] 3
Добрый день.
Спасибо большое! Сработало.

Добавлено через 1 час 48 минут
Подскажите, пожалуйста. Только увидела, если файл будет открыт для чтения другим пользователем, в файле лог появляется фамилия именно этого пользователя. Это нельзя исправить? При закрытии пользователем для чтения лог очищается. Файл занят, но получается код не работает.
0
5612 / 1596 / 414
Регистрация: 23.12.2010
Сообщений: 2,392
Записей в блоге: 1
28.09.2021, 11:24 4
Лучший ответ Сообщение было отмечено Yana89 как решение

Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Workbook_Open()
    If Not ThisWorkbook.ReadOnly Then
        Open ThisWorkbook.Path & "\Свод_ПБУ_2022.log" For Output Lock Write As #1
        Print #1, Environ("UserName")
        Close #1
    End If
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not ThisWorkbook.ReadOnly Then
        Open ThisWorkbook.Path & "\Свод_ПБУ_2022.log" For Output Lock Write As #1
        Print #1, ""
        Close #1
    End If
End Sub
1
0 / 0 / 0
Регистрация: 15.12.2017
Сообщений: 8
Записей в блоге: 1
28.09.2021, 14:33  [ТС] 5
Спасибо огромное за помощь!
0
28.09.2021, 14:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2021, 14:33
Помогаю со студенческими работами здесь

Нужно выделить пункт меню, на странице которого пользователь находится в данный момент
Добрый день, CSS и HTML более менее выучила, а в JS пока нет желания лезть, вот ищу готовые...

Определение к какому файлу в данный момент времени обращается та или иная программа
Как на ++ определить - к какому файлу в данный момент времени обращается та или иная программа?

При открытии браузер пишет что файл открыт в Excel, к сожалению сам Excel не открывается.
Добрый день Форумчане! Появились сложности при открытии файла (через ссылку в браузере) в MS...

Определить, от какого пользователя открыт файл
День добрый! Есть задача определить кто открыл файл дальше взять его логин и отправить ввиде...

Узнать имя пользователя у кого открыт файл
Доброго времени суток! Есть ли возможность по средствам vb.net узнать у какого пользователя открыт...

Определение имени пользователя
Как можно узнать доменное имя пользователя, который обращается к сайту (IIS+ASP)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru