Всем Привет! По сути весь вопрос в названии. Имеем файл в общем доступе - Вася, Петя, Катя, Маша... Как можно узнать, кто именно правит файл в данный момент? В этом же файле.
Всем Привет! По сути весь вопрос в названии. Имеем файл в общем доступе - Вася, Петя, Катя, Маша... Как можно узнать, кто именно правит файл в данный момент? В этом же файле.Michael_S
Sub dd() Dim wb As Workbook, uSt(), i& Set wb = Application.Workbooks("shared.xlsx") uSt = wb.UserStatus If UBound(uSt) < 2 Then Exit Sub For i = 1 To UBound(uSt) If uSt(i, 1) <> Application.UserName Then Debug.Print "пользователь " & uSt(i, 1) & " открыл книгу " & Format(uSt(i, 2), "dd.MM.yyyy hh:mm") End If Next End Sub
[/vba]
Здравствуйте наверно как-то так [vba]
Код
Sub dd() Dim wb As Workbook, uSt(), i& Set wb = Application.Workbooks("shared.xlsx") uSt = wb.UserStatus If UBound(uSt) < 2 Then Exit Sub For i = 1 To UBound(uSt) If uSt(i, 1) <> Application.UserName Then Debug.Print "пользователь " & uSt(i, 1) & " открыл книгу " & Format(uSt(i, 2), "dd.MM.yyyy hh:mm") End If Next End Sub
Michael_S, здравствуйте. Макрос рассчитан на то, чтобы выводить пользователей, кроме текущего, т.е. всех, кроме Вас. Попробуйте закомментировать строчки с проверкой на количество пользователей и на имя пользователя: [vba]
Код
Sub dd() ' Узнать имя пользователя Dim wb As Workbook, uSt(), i& Set wb = ThisWorkbook uSt = wb.UserStatus ' If UBound(uSt) < 2 Then Exit Sub For i = 1 To UBound(uSt) ' If uSt(i, 1) <> Application.UserName Then Cells(i, 1) = "пользователь " & uSt(i, 1) & " открыл книгу " & Format(uSt(i, 2), "dd.MM.yyyy hh:mm") ' End If Next End Sub
[/vba]
Michael_S, здравствуйте. Макрос рассчитан на то, чтобы выводить пользователей, кроме текущего, т.е. всех, кроме Вас. Попробуйте закомментировать строчки с проверкой на количество пользователей и на имя пользователя: [vba]
Код
Sub dd() ' Узнать имя пользователя Dim wb As Workbook, uSt(), i& Set wb = ThisWorkbook uSt = wb.UserStatus ' If UBound(uSt) < 2 Then Exit Sub For i = 1 To UBound(uSt) ' If uSt(i, 1) <> Application.UserName Then Cells(i, 1) = "пользователь " & uSt(i, 1) & " открыл книгу " & Format(uSt(i, 2), "dd.MM.yyyy hh:mm") ' End If Next End Sub
Михаил, к сожалению это не решит проблему идентификации пользователей книги, размещённой в общем доступе. Ведь получаете Вы не уникальные в Вашей LAN имена компьютеров, а имена пользователей Офиса, задаваемые при его установке. А они вовсе никак не связаны с именами компьютеров и могут быть любыми. У нас IT-шники вообще не парятся с этим и всем дают имена User. А потом кто хочет и может сам это имя сменить на какое угодно.
Михаил, к сожалению это не решит проблему идентификации пользователей книги, размещённой в общем доступе. Ведь получаете Вы не уникальные в Вашей LAN имена компьютеров, а имена пользователей Офиса, задаваемые при его установке. А они вовсе никак не связаны с именами компьютеров и могут быть любыми. У нас IT-шники вообще не парятся с этим и всем дают имена User. А потом кто хочет и может сам это имя сменить на какое угодно.Alex_ST
Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса - нет. А получить сетевое имя ничуть не сложнее:[vba]
Код
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName End Sub
[/vba]
Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса - нет. А получить сетевое имя ничуть не сложнее:[vba]
Код
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName End Sub
Спасибо, в следующий раз буду иметь ввиду. Кстати, а что там на выходе примерно получается? В решаемой задаче я другим путем пошел - пароль при открытии файла и соответственное определение пользователя. Не важно, с чьего компа.
Спасибо, в следующий раз буду иметь ввиду. Кстати, а что там на выходе примерно получается? В решаемой задаче я другим путем пошел - пароль при открытии файла и соответственное определение пользователя. Не важно, с чьего компа.Michael_S
На выходе - это где? В моём примере сетевое имя юзверга просто выводится для наглядности в окно Immediate
Ой, блин! Я же совсем оплошал. На компе ты сможешь только своё сетевое имя узнать, а не имена тех, кто в сети юзает файл. Прошу прощения. Действительно, только через .UserStatus можно узнать то, что тебе нужно.
На выходе - это где? В моём примере сетевое имя юзверга просто выводится для наглядности в окно Immediate
Ой, блин! Я же совсем оплошал. На компе ты сможешь только своё сетевое имя узнать, а не имена тех, кто в сети юзает файл. Прошу прощения. Действительно, только через .UserStatus можно узнать то, что тебе нужно.Alex_ST
Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса - нет. А получить сетевое имя ничуть не сложнее: Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName End Sub
А как применить этот код? Суть в том что, на сетевом диске документ. К нему есть общий доступ у пользователей находящихся в домене. Колонка F5:F100 оставлена для комментариев. Как в соседних с ней колонках E5:E100 фиксировать время дату написавшего комментарий? А в D5:D100 его сетевое имя.
Ну так по сетевому-то имени можно однозначно комп в домене вычислить, а по имени пользователя Офиса - нет. А получить сетевое имя ничуть не сложнее: Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName End Sub
А как применить этот код? Суть в том что, на сетевом диске документ. К нему есть общий доступ у пользователей находящихся в домене. Колонка F5:F100 оставлена для комментариев. Как в соседних с ней колонках E5:E100 фиксировать время дату написавшего комментарий? А в D5:D100 его сетевое имя.Александр7034
Сообщение отредактировал Александр7034 - Пятница, 17.02.2023, 09:23
вы не поняли. логин будет того, под чей учеткой вошли на комп на котором находится таблица, т.е. один и тот же.
Имелось ввиду вытащит код сетевое имя, что то вроде IvanovPC_sklad. Заранее можно будет вписать таблицу с реальными именами, которые всем будут понятны, нежели сетевой логин. Ну а потом функцией ВПР проставятся реальные имена вместо логинов.
вы не поняли. логин будет того, под чей учеткой вошли на комп на котором находится таблица, т.е. один и тот же.
Имелось ввиду вытащит код сетевое имя, что то вроде IvanovPC_sklad. Заранее можно будет вписать таблицу с реальными именами, которые всем будут понятны, нежели сетевой логин. Ну а потом функцией ВПР проставятся реальные имена вместо логинов.wehy
Проверьте пожалуйста. Наваял код не понимая половины, просто подсматривая как в других местах сделали что то схожее. Вроде работает, но может пропустил подводные камни какие, или в цикле что то останется. Если написать в колонке F2:F9 то в соседних ячейках слева появится сетевое имя отписавшего и время комментария. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) username2 = CreateObject("WScript.Network").UserName If Not Intersect(Target, Range("F2:F9")) Is Nothing Then Target.Offset(, -1) = Now Target.Offset(, -2) = username2 End If End Sub
[/vba]
ps/ Оказалось есть проблемы, если выделить несколько колонок и жать delete для удаления написанного то имя и дата смещаются еще левее или же может выскочить ошибка.
Проверьте пожалуйста. Наваял код не понимая половины, просто подсматривая как в других местах сделали что то схожее. Вроде работает, но может пропустил подводные камни какие, или в цикле что то останется. Если написать в колонке F2:F9 то в соседних ячейках слева появится сетевое имя отписавшего и время комментария. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) username2 = CreateObject("WScript.Network").UserName If Not Intersect(Target, Range("F2:F9")) Is Nothing Then Target.Offset(, -1) = Now Target.Offset(, -2) = username2 End If End Sub
[/vba]
ps/ Оказалось есть проблемы, если выделить несколько колонок и жать delete для удаления написанного то имя и дата смещаются еще левее или же может выскочить ошибка.Александр7034
Сообщение отредактировал Александр7034 - Понедельник, 20.02.2023, 11:20