Страницы: 1
RSS
Автоматическая отправка письма в Outlook
 
Снова здравствуйте)
Есть файл, в котором есть поля "Пользователь", "Дата" и ячейки, которые этот пользователь меняет. Нужно чтобы эксель создавал файл с таблицей, в которой будут столбцы "Пользователь", "Дата", "Лист", "Ячейка" (лист и ячейка, которые изменил пользователь) Можно ли сделать журнал, в который будет сохраняться вся эта информация по изменениям? Нашла такой код, но он не хочет работать :(
И еще вопрос, как я поняла, если в файле нет скрытых, заблокированных листов и ячеек, то макросы будут работать в общем доступе?
Код
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "LOG" Then Exit Sub
    Dim sLastValue As String
    Dim lLastRow As Long, wbLOG As Workbook
    Dim sPath As String
    Const sLOGName As String = "\LOG.xlsx"
    sPath = "C:\Users\Макс\Desktop"
    Application.ScreenUpdating = False
  
    '==============   только для записи в отдельный файл Excel ======================
    If Dir(sPath & sLOGName, vbDirectory) = "" Then
       Set wbLOG = Workbooks.Add
       wbLOG.SaveAs sPath & sLOGName, xlNormal
    End If
    Set wbLOG = Workbooks.Open(sPath & sLOGName)
    '============================================================================
    With wbLOG.Sheets(1)
        lLastRow = .Cells.SpecialCells(xlLastCell).Row + 1
        If lLastRow = .Rows.Count Then Exit Sub
        Application.ScreenUpdating = False: Application.EnableEvents = False
        .Cells(lLastRow, 1) = CreateObject("wscript.network").UserName
        .Cells(lLastRow, 2) = Format(Now, "dd.mm.yyyy HH:MM:SS")
        .Cells(lLastRow, 3) = Sh.Name
        .Cells(lLastRow, 4) = Target.Address(0, 0)
        .Cells(lLastRow, 5).NumberFormat = "@"
        .Cells(lLastRow, 5) = sValue
        If Target.Count > 1 Then
            Dim rCell As Range, rRng As Range
            On Error Resume Next
            Set rRng = Intersect(Target, Sh.UsedRange): On Error GoTo 0
            If Not rRng Is Nothing Then
                For Each rCell In rRng
                    If Not IsError(Target) Then sLastValue = sLastValue & "," & rCell Else sLastValue = sLastValue & "," & "Err"
                Next rCell
                sLastValue = Mid(sLastValue, 2)
            Else
                sLastValue = ""
            End If
        Else
            If Not IsError(Target) Then sLastValue = Target.Value Else sLastValue = "Err"
        End If
        .Cells(lLastRow, 6).NumberFormat = "@"
        .Cells(lLastRow, 6) = sLastValue
    End With
    wbLOG.Close 1
    Application.ScreenUpdating = True: Application.EnableEvents = True
End Sub
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name = "LOG" Then Exit Sub
    If Target.Count > 1 Then
        Dim rCell As Range, rRng As Range
        On Error Resume Next
        Set rRng = Intersect(Target, Sh.UsedRange): On Error GoTo 0
        If rRng Is Nothing Then Exit Sub
        For Each rCell In rRng
            If Not IsError(rCell) Then sValue = sValue & "," & rCell Else sValue = sValue & "," & "Err"
        Next rCell
        sValue = Mid(sValue, 2)
    Else
        If Not IsError(Target) Then sValue = Target.Value Else sValue = "Err"
    End If
End Sub

 
Цитата
KDkd написал:
он не хочет работать
и в чем это выражается? код взят с моего сайта - и там он прекрасно работает.
А что у Вас с ним не так? Может статью не до конца прочитали и код вставили не в модуль книги вовсе?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Цитата
KDkd написал:
он не хочет работать
и в чем это выражается? код взят с моего сайта - и там он прекрасно работает.
А что у Вас с ним не так? Может статью не до конца прочитали и код вставили не в модуль книги вовсе?
у меня файл не открывается, думала что-то должно быть откорректировано, но я не понимаю что
Ошибка появляется
 
Цитата
написал:
Цитата
KDkd написал:
он не хочет работать
и в чем это выражается? код взят с моего сайта - и там он прекрасно работает.
А что у Вас с ним не так? Может статью не до конца прочитали и код вставили не в модуль книги вовсе?
Я поменяла только путь к файлу и порядок вот тут
Код
   Application.ScreenUpdating = False: Application.EnableEvents = False
        .Cells(lLastRow, 1) = CreateObject("wscript.network").UserName
        .Cells(lLastRow, 2) = Format(Now, "dd.mm.yyyy HH:MM:SS")
        .Cells(lLastRow, 3) = Sh.Name
        .Cells(lLastRow, 4) = Target.Address(0, 0)
        .Cells(lLastRow, 5).NumberFormat = "@"
        .Cells(lLastRow, 5) = sValue
        If Target.Count > 1 Then
 
Цитата
KDkd написал:
файл не открывается
И правильно делает. В статье было указано, что для создания отдельного файла Excel для ведения лога надо указать расширение ".xls", а не ".xlsx" :) А т.к. Вы указали ".xlsx", то и в строке
Код
wbLOG.SaveAs sPath & sLOGName, xlNormal

надо менять тип файла с xlNormal на xlOpenXMLWorkbook
Код
wbLOG.SaveAs sPath & sLOGName, xlOpenXMLWorkbook

Вот здесь полное описание по данному коду: Ведение журнала сделанных в книге изменений

Единственное, чего не понял: при чем здесь вообще автоматическая отправка через Outlook? Каким он тут боком-то?
Изменено: Дмитрий(The_Prist) Щербаков - 30.11.2022 12:35:53
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Цитата

Единственное, чего не понял: при чем здесь вообще автоматическая отправка через Outlook? Каким он тут боком-то?
Это я далее планирую научиться делать с этим файлом
 
Цитата
KDkd написал:
Это я далее планирую научиться делать
Странная какая логика...
Название темы одно, проблема в теме описана совсем другая. А объяснение - я когда-то буду это тоже делать.
По сути при такой логике есть шанс, что когда появится все же задача отправки писем, тема может быть названа "распределение пуассона в Excel", т.к. после отправки захотите делать распределение пуассона?  :D
Совет: загляните в правила форума, чтобы потом не удивляться, почему модераторы Ваши темы закрывают или удаляют.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Цитата
KDkd написал:
он не хочет работать
и в чем это выражается? код взят с моего сайта - и там он прекрасно работает.
А что у Вас с ним не так? Может статью не до конца прочитали и код вставили не в модуль книги вовсе?
добрый день! Скажите, пожалуйста,  а в вашем коде можно сделать так, чтобы в журнал записывались  изменения не всей книги, а только диапазона ячеек?  
 
Цитата
An_2020 написал:
чтобы в журнал записывались  изменения не всей книги, а только диапазона ячеек?
Здесь все есть - смотрите ближе к концу статьи: Ведение журнала сделанных в книге изменений
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Цитата
An_2020 написал:
чтобы в журнал записывались  изменения не всей книги, а только диапазона ячеек?
Здесь все есть - смотрите ближе к концу статьи:  Ведение журнала сделанных в книге изменений
спасибо большое,  у меня к вам ещё один вопрос. Как в вашем коде сделать так, чтобы вместо имени пользователя писалась его фамилия.
Например что-то типа "user.name =Иванов И.И."
чтобы был своеобразный справочник.
 
Цитата
написал:
у меня к вам ещё один вопрос
Если будут еще вопросы - не обращайтесь :) потому что есть здесь правила форума, которые однозначно требуют создавать новую тему, если вопрос не имеет отношения к текущей. а он не имеет.
И да, писать ФИО нельзя, если в качестве пользователя в системе указан что-то другое. В коде из статьи пользователь берется тот, который указан в качестве текущего пользователя ОС.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
написал:
Если будут еще вопросы - не обращайтесь
))))
Страницы: 1
Наверх