Возникла необходимость вычислять рукожопов, которые входят под своей учеткой и вносят изменения в файл. Я не админ, файл мой (таблицы, формулы и тп), пользователей около 20чел. Было бы удобно иметь сведения, которые отображаются на любом листе в этом файле после любого сохранения. Интересна именно учетная запись, можно дату и время. Про учет внесения изменений (журнал на отдельном листе) читал, одно из необходимых условий в журнале не увидел, а именно изменение цвета шрифта. Значения в файле 4 цветов шрифта
Возникла необходимость вычислять рукожопов, которые входят под своей учеткой и вносят изменения в файл. Я не админ, файл мой (таблицы, формулы и тп), пользователей около 20чел. Было бы удобно иметь сведения, которые отображаются на любом листе в этом файле после любого сохранения. Интересна именно учетная запись, можно дату и время. Про учет внесения изменений (журнал на отдельном листе) читал, одно из необходимых условий в журнале не увидел, а именно изменение цвета шрифта. Значения в файле 4 цветов шрифтаNeWru
Сообщение отредактировал NeWru - Среда, 29.10.2025, 19:16
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With Sheets("u") aa = .Cells(1, Columns.Count).End(xlToLeft).Column + 1 .Cells(1, aa) = Application.UserName .Cells(2, aa) = Now Sheets(1).Range("a1:a1000").Copy With .Cells(3, aa) .PasteSpecial Paste:=xlPasteAllUsingSourceTheme .PasteSpecial Paste:=xlPasteValues End With End With Application.CutCopyMode = False End Sub
[/vba]но это не точно)
сохраняйте файл, см. лист u
NeWru, возможно Вам подойдет [vba]
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) With Sheets("u") aa = .Cells(1, Columns.Count).End(xlToLeft).Column + 1 .Cells(1, aa) = Application.UserName .Cells(2, aa) = Now Sheets(1).Range("a1:a1000").Copy With .Cells(3, aa) .PasteSpecial Paste:=xlPasteAllUsingSourceTheme .PasteSpecial Paste:=xlPasteValues End With End With Application.CutCopyMode = False End Sub
ИМХО, лучше использовать не имя пользователя Офиса Application.UserName, т.к. его при установке часто ставят от балды и вполне может повторяться в рамках одной сетки, а имя компьютера в сети CreateObject("Wscript.Network").UserName, т.к. оно уникально. Давно у меня валяется в копилке файлик выводящий в окно Debug оба этих имени. [vba]
Код
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName Debug.Print Application.UserName End Sub
[/vba]
ИМХО, лучше использовать не имя пользователя Офиса Application.UserName, т.к. его при установке часто ставят от балды и вполне может повторяться в рамках одной сетки, а имя компьютера в сети CreateObject("Wscript.Network").UserName, т.к. оно уникально. Давно у меня валяется в копилке файлик выводящий в окно Debug оба этих имени. [vba]
Код
Private Sub Net_UserName() Debug.Print CreateObject("Wscript.Network").UserName Debug.Print Application.UserName End Sub
Покопался у себя в копилочке. Нашёл, что в 2009 г. The_Prist дал идею, а я в 2011 немного полирнул макрос. Пробуйте. Вносите/редактируете данные на листах, а на обычно скрытом листе LOG всё фиксируется.
Покопался у себя в копилочке. Нашёл, что в 2009 г. The_Prist дал идею, а я в 2011 немного полирнул макрос. Пробуйте. Вносите/редактируете данные на листах, а на обычно скрытом листе LOG всё фиксируется.Alex_ST
К стати, там же в "закромах" нашёл ещё один очень интересный вариант логгирования действий юзеров в Excel. По идее должен работать даже при отключенных у юзера макросах. Основан на том, что в режиме общего доступа Excel сам ведёт логгирование сохраняемых изменений на скрытом листе "Журнал" (именно поэтому имя "Журнал" зарезервировано системой и не может быть присвоено листу). Скрытый лист логгирования "Журнал" автоматически создаётся при включении режима общего доступа к файлу (и, естественно, его пересохранении). В режиме общего доступа доступ к проекту VBA напрещён и сделать лист Visible невозможно. Но макросом вполне можно его скопировать в новую книгу, например, и сделать видимым. При отключении режима общего доступа (и, соответственно, пересохранении файла) скрытый лист "Журнал" автоматически уничтожается. Логгирование сохраняемых изменений на листе "Журнал" в файлах общего доступа, к стати, является одной из основных причин их постепенного "ожирения" до огромных размеров. А самым действенным "фитнесом" для распухших файлов общего доступа является как раз временное отключение и последующее включение режима общего доступа. При этом файл два раза пересохраняется и разросшийся со временем лист "Журнал" сначала автоматически удаляется, а потом создаётся вновь уже пустым. Но хватит теории. Вот в аттаче практика - файл-образец. На всякий случай уточню: 1. Используется возможность Excel вести журнал изменений в файлах общего доступа. С целью не дать пользователю отключить общий доступ макрос устанавливает пароль на отключение (пароль задаётся в декларациях модуля Const sShPass$ = "qwerty" в модуле LOG_Module). 2. В журнале фиксируются только изменения данных. Изменение форматирования не фиксируется. 3. Запись данных в журнал производится при сохранении файла. 4. На листе АДМИН расположены все необходимые кнопки управления. Кнопки на листе книги нужны только для демонстрации способа. В реальном рабочем файле они не нужны. Код макросов может быть вынесен в модуль личной книги макросов Personal.xlsm и запускаться оттуда (именно для этого в коде использовано обращение к ActiveWorkbook, а не к ThisWorkbook). P.S. Всё это где-то здесь на форуме или на Планете уже обсуждалось году, наверное, в 2011, но сейчас не могу найти, чтобы дать ссылку на топик
К стати, там же в "закромах" нашёл ещё один очень интересный вариант логгирования действий юзеров в Excel. По идее должен работать даже при отключенных у юзера макросах. Основан на том, что в режиме общего доступа Excel сам ведёт логгирование сохраняемых изменений на скрытом листе "Журнал" (именно поэтому имя "Журнал" зарезервировано системой и не может быть присвоено листу). Скрытый лист логгирования "Журнал" автоматически создаётся при включении режима общего доступа к файлу (и, естественно, его пересохранении). В режиме общего доступа доступ к проекту VBA напрещён и сделать лист Visible невозможно. Но макросом вполне можно его скопировать в новую книгу, например, и сделать видимым. При отключении режима общего доступа (и, соответственно, пересохранении файла) скрытый лист "Журнал" автоматически уничтожается. Логгирование сохраняемых изменений на листе "Журнал" в файлах общего доступа, к стати, является одной из основных причин их постепенного "ожирения" до огромных размеров. А самым действенным "фитнесом" для распухших файлов общего доступа является как раз временное отключение и последующее включение режима общего доступа. При этом файл два раза пересохраняется и разросшийся со временем лист "Журнал" сначала автоматически удаляется, а потом создаётся вновь уже пустым. Но хватит теории. Вот в аттаче практика - файл-образец. На всякий случай уточню: 1. Используется возможность Excel вести журнал изменений в файлах общего доступа. С целью не дать пользователю отключить общий доступ макрос устанавливает пароль на отключение (пароль задаётся в декларациях модуля Const sShPass$ = "qwerty" в модуле LOG_Module). 2. В журнале фиксируются только изменения данных. Изменение форматирования не фиксируется. 3. Запись данных в журнал производится при сохранении файла. 4. На листе АДМИН расположены все необходимые кнопки управления. Кнопки на листе книги нужны только для демонстрации способа. В реальном рабочем файле они не нужны. Код макросов может быть вынесен в модуль личной книги макросов Personal.xlsm и запускаться оттуда (именно для этого в коде использовано обращение к ActiveWorkbook, а не к ThisWorkbook). P.S. Всё это где-то здесь на форуме или на Планете уже обсуждалось году, наверное, в 2011, но сейчас не могу найти, чтобы дать ссылку на топикAlex_ST