Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Отправка уведомлений по почте при изменении ячеек 3 столбцов, где каждый столбец принадлежит 3 разным пользователям
 
Здравствуйте,

В форумах я столкнулся с подобными задачами и их решениями, только я никак не смог их применить для своей. Может у кого есть готовый макрос для решения? Есть файл и им пользуются по сетевому несколько пользователей. Столбец D для нескольких пользователей, где они заполняют заявки, E для procurement и F для accountant. Надо чтобы при изменении значений в ячейках , допустим столбца D (заявки), уведомления по почте получали procurement и accountant, а при подтверждении procurement, уведомления получали заявщик и accontant, а при подтверждении accountant уведомления получали заявщик и procurement.
В случае если заявщик, до сохранении, на одну дату отправил 2 или несколько заявок, то приходило только одно сообщении об уведомлении.
Изменено: Шахин - 16 Май 2019 08:45:07
 
Это то что мне надо, просто тут надо сделать так чтобы команда об отправке уведомления выходило без вставки файла и при команде сохранить. И ещё чтобы при подтверждении прокурментом и аккоунтантом, уведомления получали те пользователи для которых были сделаны подтверждения.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."
 
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
Изменено: Шахин - 16 Май 2019 09:30:48
 
Или хотя бы помогите сделать так, чтобы уведомления шли уже после сохранения. А пользователей уже можно и в ручную добавить.
 
Сделайте пожалуйста этот макрос чтобы он активировался при команде сохранить. В стандартном виде не удобно. :(  
 
Почему никто не помогает?
 
Что в этом макросе я делаю не правильно товарищи? Почему оно не работает? Я малость покорректировал.
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim cl As Range
With Worksheets("Sheet1")
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("D1:D100")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End With
End Sub
 
Цитата
Шахин написал: Set xRgSel = Intersect(Target, xRg)
Что такое Target в Вашем случае? Где этой переменной присваивается значение?
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, Признаться не знаю. Я просто покорректировал макрос от автора.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 2017/9/12
    Dim xRgSel As Range
    Dim xOutApp As Object
    Dim xMailItem As Object
    Dim xMailBody As String
    On Error Resume Next
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set xRg = Range("A2:E11")
    Set xRgSel = Intersect(Target, xRg)
    ActiveWorkbook.Save
    If Not xRgSel Is Nothing Then
        Set xOutApp = CreateObject("Outlook.Application")
        Set xMailItem = xOutApp.CreateItem(0)
        xMailBody = "Cell(s) " & xRgSel.Address(False, False) & _
            " in the worksheet '" & Me.Name & "' were modified on " & _
            Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
            " by " & Environ$("username") & "."
 
        With xMailItem
            .To = "Email Address"
            .Subject = "Worksheet modified in " & ThisWorkbook.FullName
            .Body = xMailBody
            .Attachments.Add (ThisWorkbook.FullName)
            .Display
        End With
        Set xRgSel = Nothing
        Set xOutApp = Nothing
        Set xMailItem = Nothing
    End If
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
 
Цитата
Шахин написал: чтобы команда об отправке уведомления выходило без вставки файла
Удалите строку
Код
.Attachments.Add (ThisWorkbook.FullName)
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, Да это я понял, а как сделать так чтобы для уведомления отправлялись по вышенаписанным условиям ?
 
Я вот эти вышеописанные условия не понял. В одном сообщении Вам нужно запускать по изменению значения ячеек
Цитата
Шахин написал: Надо чтобы при изменении значений в ячейках , допустим столбца D
В другом
Цитата
Шахин написал: чтобы он активировался при команде сохранить
И условия - кому какие уведомления отправлять и в каком случае - тоже темный лес.


 
Согласие есть продукт при полном непротивлении сторон.
 
Медведь - дешифровщик
Занесли новую строку и при занесении в столбце D чего либо уведомление ушло по адресам  J1 в J2
Далее идет подтврждение и YES занесли в E6  например (Ramin Safarof) , уведомление ушло на J2 и С6
Если Yes в F6 поставить, то уведомление на J1 и C6 Только вот вопрос, как определить что было именно это изменение и по нему надо отправить уведомление???.  Ведь если занести или подтвердить два заказа, то …..
Изменено: БМВ - 16 Май 2019 20:08:58
 
БМВ, мне главное чтобы сообщение ушли прокурменту и аккаутант. А там, после того как прокурмент закончил своё дело, не имеем значение какую именно он ячейку заполнил, главное что были изменения в столце E и после сохрания макрос понимал, есл были изменения в столбце Е (столбце для прокурмент), значит сообщения пойдут к этим адрессантам (заявщики и аккаунтант). Заявщиков можно внести всех в строку кому, а в сс только аккаутант и т.д. Но что самое главное, по макросу автора, то что мне надо возможно, главное только , чтобы команда активировалась не после изменения в ячейках, а после команды сохранить. Так как в первом случае это не удобно !
Изменено: Шахин - 16 Май 2019 20:34:39
 
Я пас...
Согласие есть продукт при полном непротивлении сторон.
 
Sanja, сорри. То есть при изменении значений в столбце, не имеет значение какая ячейка. Но главное чтобы команда для уведомлений пошла не сразу же после изменений, а после того как заявщик или другие пользователи закончат свою работу и после команды сохранить пошли бы уведомления. Пользователи будут работать последовательно. Заявщик, после прокурмент, после аккаунта. Главное чтобы каждый из них знал о том , что работа другого закончилась и пришло об этом уведомление.
 
Ненавижу болтливые системы.
Задача несколько и проще и сложнее. Проще по тому, что по изменению надо помечать что было изменение в строке и столбце, а это всего 3 значения  в строке. Перед сохранением проверяем их и по ним формируется сообщения, сами флаги очищаются.
Сложнее, так как надо обрабатывать удаление ошибочно введенных данных и снимать соответствующие флаги.
 
БМВ, Я буду очень благодарен, этому сайту, если кто нибудь поможет. Даже если не получится, ни чего страшного. Значит экзель не всё умеет. )
 
Sanja, и на том спасибо!)
Страницы: 1
Читают тему (гостей: 1)
Наверх