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

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

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

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

Я добавила функцию для проверки открытия файла.
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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.09.2021, 14:07
Ответы с готовыми решениями:

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

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

Как узнать открыт ли данный Excel документ в OLE
Здравствуйте. С помощью свойства OlePropertyGet можно подключиться к книге BooknN=BooksnN.OlePropertyGet(&quot;Item&quot;,numBook); Но...

4
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
27.09.2021, 15:21
Лучший ответ Сообщение было отмечено 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  [ТС]
Добрый день.
Спасибо большое! Сработало.

Добавлено через 1 час 48 минут
Подскажите, пожалуйста. Только увидела, если файл будет открыт для чтения другим пользователем, в файле лог появляется фамилия именно этого пользователя. Это нельзя исправить? При закрытии пользователем для чтения лог очищается. Файл занят, но получается код не работает.
0
 Аватар для KoGG
5636 / 1618 / 418
Регистрация: 23.12.2010
Сообщений: 2,426
Записей в блоге: 1
28.09.2021, 11:24
Лучший ответ Сообщение было отмечено 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  [ТС]
Спасибо огромное за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2021, 14:33
Помогаю со студенческими работами здесь

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

Выделение пункта меню, подпункт которого данный момент активен
На сайте есть меню &lt;ul class=&quot;menu&quot;&gt; &lt;li @CurrentItem(&quot;Index&quot;)&gt;@Html.ActionLink(Resources.Global.Home_Menu_Home, &quot;Index&quot;,...

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru