Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Узнать под чьей учеткой вненены изменения в файл - Страница 2 - Мир MS Excel

  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_, DrMini  
Узнать под чьей учеткой вненены изменения в файл
Литр Дата: Понедельник, 23.03.2026, 16:14 | Сообщение № 21
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

2013
MikeVol, вариант рабочий, но малость надо подправить.
Нужно что бы он работал на одном листе с именем "2026". Изменения на других листах нужно игнорировать.

Понимаю что его нужно вставить в модуль нужного листа и изменить
Код
If Application.WorksheetFunction.CountA(Sh.Range("B" & LastRow & ":G" & LastRow)) > 0 Then


но этого мало
 
Ответить
СообщениеMikeVol, вариант рабочий, но малость надо подправить.
Нужно что бы он работал на одном листе с именем "2026". Изменения на других листах нужно игнорировать.

Понимаю что его нужно вставить в модуль нужного листа и изменить
Код
If Application.WorksheetFunction.CountA(Sh.Range("B" & LastRow & ":G" & LastRow)) > 0 Then


но этого мало

Автор - Литр
Дата добавления - 23.03.2026 в 16:14
Alex_ST Дата: Понедельник, 23.03.2026, 17:18 | Сообщение № 22
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3235
Репутация: 631 ±
Замечаний: 0% ±

2003
Уберите цикл перебора листов книги и напрямую обращайтесь только к интересующему Вас листу.



С уважением,
Алексей
MS Excel 2003 - the best!!!
 
Ответить
СообщениеУберите цикл перебора листов книги и напрямую обращайтесь только к интересующему Вас листу.

Автор - Alex_ST
Дата добавления - 23.03.2026 в 17:18
Литр Дата: Понедельник, 23.03.2026, 20:21 | Сообщение № 23
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

2013
Alex_ST,
Было б все так просто, если не было б так сложно.
Подскажите, что на что поменять?
 
Ответить
СообщениеAlex_ST,
Было б все так просто, если не было б так сложно.
Подскажите, что на что поменять?

Автор - Литр
Дата добавления - 23.03.2026 в 20:21
MikeVol Дата: Понедельник, 23.03.2026, 21:45 | Сообщение № 24
Группа: Проверенные
Ранг: Обитатель
Сообщений: 476
Репутация: 115 ±
Замечаний: 0% ±

MSO LTSC 2021 EN
Литр, Только для листа 2026: [vba]
Код
Option Explicit
Dim IsChanged_2026  As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "2026" Then Exit Sub
    If Intersect(Target, Sh.Range("B:G")) Is Nothing Then Exit Sub

    IsChanged_2026 = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not IsChanged_2026 Then Exit Sub
    Dim Sh          As Worksheet

    Dim wsExists    As Boolean
    wsExists = False

    For Each Sh In ThisWorkbook.Worksheets

        If Sh.Name = "2026" Then
            wsExists = True
            Exit For
        End If

    Next Sh

    If Not wsExists Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim UserName    As String
    UserName = CreateObject("WScript.Network").UserName

    Dim SaveTime    As String
    SaveTime = Format(Now, "dd.mm.yyyy HH:mm:ss")

    With ThisWorkbook.Worksheets("2026")

        Dim f       As Range
        Set f = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)

        If Not f Is Nothing Then

            Dim LastRow As Long
            LastRow = f.Row

            If Application.WorksheetFunction.CountA(.Range("B" & LastRow & ":G" & LastRow)) > 0 Then
                .Cells(LastRow, "P").Value = UserName
                .Cells(LastRow, "Q").Value = SaveTime
            End If
        
        End If

    End With

    MsgBox "Файл сохранен!" & vbCrLf & _
            "Пользователь: " & UserName & vbCrLf & _
            "Время: " & SaveTime, vbInformation
    IsChanged_2026 = False

    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
[/vba]
И ещё один вариант: [vba]
Код
Option Explicit
Dim ChangedRows_2026 As Object

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "2026" Then Exit Sub
    If Intersect(Target, Sh.Range("B:G")) Is Nothing Then Exit Sub
    Dim cell        As Range

    If ChangedRows_2026 Is Nothing Then
        Set ChangedRows_2026 = CreateObject("Scripting.Dictionary")
    End If

    For Each cell In Target.Cells

        If Not ChangedRows_2026.exists(cell.Row) Then
            ChangedRows_2026.Add cell.Row, True
        End If

    Next cell

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If ChangedRows_2026 Is Nothing Then Exit Sub
    If ChangedRows_2026.Count = 0 Then Exit Sub

    Dim ws          As Worksheet
    Dim exists      As Boolean

    For Each ws In ThisWorkbook.Worksheets

        If ws.Name = "2026" Then
            exists = True
            Exit For
        End If

    Next ws

    If Not exists Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim UserName    As String
    Dim SaveTime    As String

    UserName = CreateObject("WScript.Network").UserName
    SaveTime = Format(Now, "dd.mm.yyyy HH:mm:ss")

    Dim key         As Variant

    With ThisWorkbook.Worksheets("2026")

        For Each key In ChangedRows_2026.Keys

            If Application.WorksheetFunction.CountA(.Range("B" & key & ":G" & key)) > 0 Then
                .Cells(key, "P").Value = UserName
                .Cells(key, "Q").Value = SaveTime
            End If

        Next key

    End With

    MsgBox "Сохранено!" & vbCrLf & _
            "Пользователь: " & UserName & vbCrLf & _
            "Строк изменено: " & ChangedRows_2026.Count, vbInformation
    Set ChangedRows_2026 = Nothing

    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
[/vba]


Ученик.
Одесса - Украина


Сообщение отредактировал MikeVol - Понедельник, 23.03.2026, 21:52
 
Ответить
СообщениеЛитр, Только для листа 2026: [vba]
Код
Option Explicit
Dim IsChanged_2026  As Boolean

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "2026" Then Exit Sub
    If Intersect(Target, Sh.Range("B:G")) Is Nothing Then Exit Sub

    IsChanged_2026 = True
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If Not IsChanged_2026 Then Exit Sub
    Dim Sh          As Worksheet

    Dim wsExists    As Boolean
    wsExists = False

    For Each Sh In ThisWorkbook.Worksheets

        If Sh.Name = "2026" Then
            wsExists = True
            Exit For
        End If

    Next Sh

    If Not wsExists Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim UserName    As String
    UserName = CreateObject("WScript.Network").UserName

    Dim SaveTime    As String
    SaveTime = Format(Now, "dd.mm.yyyy HH:mm:ss")

    With ThisWorkbook.Worksheets("2026")

        Dim f       As Range
        Set f = .Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)

        If Not f Is Nothing Then

            Dim LastRow As Long
            LastRow = f.Row

            If Application.WorksheetFunction.CountA(.Range("B" & LastRow & ":G" & LastRow)) > 0 Then
                .Cells(LastRow, "P").Value = UserName
                .Cells(LastRow, "Q").Value = SaveTime
            End If
        
        End If

    End With

    MsgBox "Файл сохранен!" & vbCrLf & _
            "Пользователь: " & UserName & vbCrLf & _
            "Время: " & SaveTime, vbInformation
    IsChanged_2026 = False

    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
[/vba]
И ещё один вариант: [vba]
Код
Option Explicit
Dim ChangedRows_2026 As Object

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "2026" Then Exit Sub
    If Intersect(Target, Sh.Range("B:G")) Is Nothing Then Exit Sub
    Dim cell        As Range

    If ChangedRows_2026 Is Nothing Then
        Set ChangedRows_2026 = CreateObject("Scripting.Dictionary")
    End If

    For Each cell In Target.Cells

        If Not ChangedRows_2026.exists(cell.Row) Then
            ChangedRows_2026.Add cell.Row, True
        End If

    Next cell

End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If ChangedRows_2026 Is Nothing Then Exit Sub
    If ChangedRows_2026.Count = 0 Then Exit Sub

    Dim ws          As Worksheet
    Dim exists      As Boolean

    For Each ws In ThisWorkbook.Worksheets

        If ws.Name = "2026" Then
            exists = True
            Exit For
        End If

    Next ws

    If Not exists Then Exit Sub

    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim UserName    As String
    Dim SaveTime    As String

    UserName = CreateObject("WScript.Network").UserName
    SaveTime = Format(Now, "dd.mm.yyyy HH:mm:ss")

    Dim key         As Variant

    With ThisWorkbook.Worksheets("2026")

        For Each key In ChangedRows_2026.Keys

            If Application.WorksheetFunction.CountA(.Range("B" & key & ":G" & key)) > 0 Then
                .Cells(key, "P").Value = UserName
                .Cells(key, "Q").Value = SaveTime
            End If

        Next key

    End With

    MsgBox "Сохранено!" & vbCrLf & _
            "Пользователь: " & UserName & vbCrLf & _
            "Строк изменено: " & ChangedRows_2026.Count, vbInformation
    Set ChangedRows_2026 = Nothing

    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
[/vba]

Автор - MikeVol
Дата добавления - 23.03.2026 в 21:45
Литр Дата: Четверг, 26.03.2026, 16:41 | Сообщение № 25
Группа: Пользователи
Ранг: Новичок
Сообщений: 36
Репутация: 0 ±
Замечаний: 0% ±

2013
MikeVol, благодарю но увы, не работает.
Видимо потому что книга находится на сетевом ресурсе и одновременно с этим файлом работает несколько человек.
Пробую вариант с примечаниями выложенный тут же чуть выше, вроде идет. Только есть пару вопросов:
1) как в модуль листа "2026" добавить коды листа "СПИСОК?"

2) Еще прошу поправить в коде этот фрагмент:

[vba]
Код

' Процедура добавления примечания об изменении значения
Sub AddCommentForValueChange(cell As Range, user As String, timeStr As String, oldVal As Variant)
    Dim commentText As String
' Формируем текст примечания в зависимости от типа изменения
    If cell.Address = OldAddress Then
' Если изменилось значение в той же ячейке
        commentText = user & " (" & timeStr & "): " & _
                     "изменил '" & oldVal & "' на '" & cell.Value & "'"
    Else
' Если это новая ячейка
        commentText = user & " (" & timeStr & "): " & _
                     "установил '" & cell.Value & "'"
    End If
' Добавляем или обновляем примечание
    AddOrUpdateComment cell, commentText
End Sub
[/vba]

Тут, при записи и в пустую ячейку и если в ней уже есть запись отрабатывает примечание: "..... изменил....."

3) Хорошо бы запретить удаление примечаний без ввода пароля. Не паролить лист целиком, так как некоторые макросы в таком случае не работают, а именно что бы при попытке удалить коментарий из одной или группы ячеек всплывал бокс с местом для пароля.
К сообщению приложен файл: zhurnal_3333.xlsm (54.4 Kb)


Сообщение отредактировал Литр - Четверг, 26.03.2026, 16:48
 
Ответить
СообщениеMikeVol, благодарю но увы, не работает.
Видимо потому что книга находится на сетевом ресурсе и одновременно с этим файлом работает несколько человек.
Пробую вариант с примечаниями выложенный тут же чуть выше, вроде идет. Только есть пару вопросов:
1) как в модуль листа "2026" добавить коды листа "СПИСОК?"

2) Еще прошу поправить в коде этот фрагмент:

[vba]
Код

' Процедура добавления примечания об изменении значения
Sub AddCommentForValueChange(cell As Range, user As String, timeStr As String, oldVal As Variant)
    Dim commentText As String
' Формируем текст примечания в зависимости от типа изменения
    If cell.Address = OldAddress Then
' Если изменилось значение в той же ячейке
        commentText = user & " (" & timeStr & "): " & _
                     "изменил '" & oldVal & "' на '" & cell.Value & "'"
    Else
' Если это новая ячейка
        commentText = user & " (" & timeStr & "): " & _
                     "установил '" & cell.Value & "'"
    End If
' Добавляем или обновляем примечание
    AddOrUpdateComment cell, commentText
End Sub
[/vba]

Тут, при записи и в пустую ячейку и если в ней уже есть запись отрабатывает примечание: "..... изменил....."

3) Хорошо бы запретить удаление примечаний без ввода пароля. Не паролить лист целиком, так как некоторые макросы в таком случае не работают, а именно что бы при попытке удалить коментарий из одной или группы ячеек всплывал бокс с местом для пароля.

Автор - Литр
Дата добавления - 26.03.2026 в 16:41
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2026 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!