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

Вход

Регистрация

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

 

= Мир MS Excel/Условия для отправки autoemail - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Условия для отправки autoemail (Макросы/Sub)
Условия для отправки autoemail
Kassandra Дата: Вторник, 25.08.2015, 12:49 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здравствуйте, помогите, пожалуйста, добавить еще одно условие перед автоматической отправкой письма (одно условие уже есть)
Условие которое нужно добавить: если одна из колонок 26 или 32 или 36 не пустые, то только тогда оправлять письмо.

Код:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TablCode
Dim Email_Subject, Email_Send_From, Email_Send_To, _
     Email_Cc, Email_Bcc, Email_Body As String
Dim Mail_Object, Mail_Single As Variant

If Target.Count > 1 Then Exit Sub
TablCode = Array(31, 34, 36, 18, 99)
Select Case Target.Column
      Case 21, 25, 29, 33
            For I = 0 To 4
              If Target.Value = TablCode(I) Then
                  'Macro email
                 '--------------------------------------------------------
                 If OutlookOuvert = False Then o = Shell("Outlook", vbNormalNoFocus)
                  Email_Subject = " DL " & TablCode(I)
                  Email_Send_From = "xxxx@gmail.com"
                  Email_Send_To = "xxxx@gmail.com"
                  Email_Cc = "xxxx@gmail.com"
                  Email_Bcc = "xxxx@gmail.com"
                  Email_Body = "auto mail" & vbCr & _
                  "" & vbCr & _
                  "Un code " & TablCode(I) & " a été atritubé a un vol autjoudh'ui" & vbCr & _
                  vbCr & _
                  "Date : " & Cells(Target.Row, 1) & vbCr & _
                  "Nom agent: " & Cells(Target.Row, 2) & vbCr & _
                  "départ: " & Cells(Target.Row, 13) & vbCr & _
                  "STD: " & Format(Cells(Target.Row, 18), "hh:mm") & vbCr & _
                  "ATD: " & Format(Cells(Target.Row, 19), "hh:mm") & vbCr & _
                  "explication : " & Cells(Target.Row, 24) & vbCr & _
                  "@tt"
                   
                  On Error GoTo debugs
                  Set Mail_Object = CreateObject("Outlook.Application")
                  Set Mail_Single = Mail_Object.CreateItem(0)
                  With Mail_Single
                      .Subject = Email_Subject
                      .To = Email_Send_To
                      .cc = Email_Cc
                      .BCC = Email_Bcc
                      .Body = Email_Body
                      .send
                  End With
debugs:
                  If Err.Description <> "" Then MsgBox Err.Description
                  '----------------------------------------------------------------
              End If

          Next
        
End Sub
[/vba]
[moder]Для кода макроса используйте кнопочку #, а не fx. Тогда не будет такой кучи попугайчиков


Сообщение отредактировал _Boroda_ - Вторник, 25.08.2015, 12:51
 
Ответить
СообщениеЗдравствуйте, помогите, пожалуйста, добавить еще одно условие перед автоматической отправкой письма (одно условие уже есть)
Условие которое нужно добавить: если одна из колонок 26 или 32 или 36 не пустые, то только тогда оправлять письмо.

Код:

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TablCode
Dim Email_Subject, Email_Send_From, Email_Send_To, _
     Email_Cc, Email_Bcc, Email_Body As String
Dim Mail_Object, Mail_Single As Variant

If Target.Count > 1 Then Exit Sub
TablCode = Array(31, 34, 36, 18, 99)
Select Case Target.Column
      Case 21, 25, 29, 33
            For I = 0 To 4
              If Target.Value = TablCode(I) Then
                  'Macro email
                 '--------------------------------------------------------
                 If OutlookOuvert = False Then o = Shell("Outlook", vbNormalNoFocus)
                  Email_Subject = " DL " & TablCode(I)
                  Email_Send_From = "xxxx@gmail.com"
                  Email_Send_To = "xxxx@gmail.com"
                  Email_Cc = "xxxx@gmail.com"
                  Email_Bcc = "xxxx@gmail.com"
                  Email_Body = "auto mail" & vbCr & _
                  "" & vbCr & _
                  "Un code " & TablCode(I) & " a été atritubé a un vol autjoudh'ui" & vbCr & _
                  vbCr & _
                  "Date : " & Cells(Target.Row, 1) & vbCr & _
                  "Nom agent: " & Cells(Target.Row, 2) & vbCr & _
                  "départ: " & Cells(Target.Row, 13) & vbCr & _
                  "STD: " & Format(Cells(Target.Row, 18), "hh:mm") & vbCr & _
                  "ATD: " & Format(Cells(Target.Row, 19), "hh:mm") & vbCr & _
                  "explication : " & Cells(Target.Row, 24) & vbCr & _
                  "@tt"
                   
                  On Error GoTo debugs
                  Set Mail_Object = CreateObject("Outlook.Application")
                  Set Mail_Single = Mail_Object.CreateItem(0)
                  With Mail_Single
                      .Subject = Email_Subject
                      .To = Email_Send_To
                      .cc = Email_Cc
                      .BCC = Email_Bcc
                      .Body = Email_Body
                      .send
                  End With
debugs:
                  If Err.Description <> "" Then MsgBox Err.Description
                  '----------------------------------------------------------------
              End If

          Next
        
End Sub
[/vba]
[moder]Для кода макроса используйте кнопочку #, а не fx. Тогда не будет такой кучи попугайчиков

Автор - Kassandra
Дата добавления - 25.08.2015 в 12:49
Rioran Дата: Вторник, 25.08.2015, 14:13 | Сообщение № 2
Группа: Авторы
Ранг: Ветеран
Сообщений: 903
Репутация: 290 ±
Замечаний: 0% ±

Excel 2013
Kassandra, здравствуйте.

Без файла примера не совсем понятно, в каком месте колонок вы проверяете наличие значения. Но в качестве общего направления могу предложить такую конструкцию:

[vba]
Код
If Application.WorksheetFunction.CountA( [Ваш набор колонок] ) > 0 Then
[/vba]


Роман, Москва, voronov_rv@mail.ru
Яндекс-Деньги: 41001312674279


Сообщение отредактировал Rioran - Вторник, 25.08.2015, 14:14
 
Ответить
СообщениеKassandra, здравствуйте.

Без файла примера не совсем понятно, в каком месте колонок вы проверяете наличие значения. Но в качестве общего направления могу предложить такую конструкцию:

[vba]
Код
If Application.WorksheetFunction.CountA( [Ваш набор колонок] ) > 0 Then
[/vba]

Автор - Rioran
Дата добавления - 25.08.2015 в 14:13
ikki Дата: Вторник, 25.08.2015, 14:36 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
условие неоднозначно описано, имхо.
то ли ХОТЯБЫ одна из перечисленных "колонок" непустая...
то ли РОВНО одна - непустая...


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеусловие неоднозначно описано, имхо.
то ли ХОТЯБЫ одна из перечисленных "колонок" непустая...
то ли РОВНО одна - непустая...

Автор - ikki
Дата добавления - 25.08.2015 в 14:36
AndreTM Дата: Вторник, 25.08.2015, 14:41 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
Скорее всего, там условие "хотя бы одна из". Кроме того, как я понял, проверять надо не колонки целиком, а ячейки строки таргета по этим колонкам.
И где, кстати, End Select? :)

Можно код сделать попроще, как-то так:
[vba]
Код
TablCode = Array(31, 34, 36, 18, 99)
TablTargetColumns = Array(21, 25, 29, 33)
TablNoemptyColumns = Array(26, 32, 36)

notEmpty = False
For Each c In TablNoemptyColumns
     If Not IsEmpty(Target.Parent.Cells(Target.Row, c).Value) Then
         notEmpty = True
         Exit For
     End If
Next
If InStr(Join(TablTargetColumns, " ") & " ", Target.Column & " ") > 0 And _
     InStr(Join(TablCode, " ") & " ", Target.Value & " ") > 0 And _
     notEmpty Then
     'Macro email
     '--------------------------------------------------------
     '----------------------------------------------------------------
End If
[/vba]


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеСкорее всего, там условие "хотя бы одна из". Кроме того, как я понял, проверять надо не колонки целиком, а ячейки строки таргета по этим колонкам.
И где, кстати, End Select? :)

Можно код сделать попроще, как-то так:
[vba]
Код
TablCode = Array(31, 34, 36, 18, 99)
TablTargetColumns = Array(21, 25, 29, 33)
TablNoemptyColumns = Array(26, 32, 36)

notEmpty = False
For Each c In TablNoemptyColumns
     If Not IsEmpty(Target.Parent.Cells(Target.Row, c).Value) Then
         notEmpty = True
         Exit For
     End If
Next
If InStr(Join(TablTargetColumns, " ") & " ", Target.Column & " ") > 0 And _
     InStr(Join(TablCode, " ") & " ", Target.Value & " ") > 0 And _
     notEmpty Then
     'Macro email
     '--------------------------------------------------------
     '----------------------------------------------------------------
End If
[/vba]

Автор - AndreTM
Дата добавления - 25.08.2015 в 14:41
Kassandra Дата: Вторник, 25.08.2015, 14:41 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
ikki, хотя бы одна
 
Ответить
Сообщениеikki, хотя бы одна

Автор - Kassandra
Дата добавления - 25.08.2015 в 14:41
Kassandra Дата: Среда, 26.08.2015, 12:50 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо всем за советы!! особенное спасибо AndreTM =)
но остались еще вопросы:
1. если что-то написать, а потом попробовать стереть (например ошибся в цифре), то сразу вылазиет ошибка

2. Вот какие нужны условия:
IF column 21 = 31 or 18 or 36 or 34 or 99 andColumn 24 = не пустая => отправить письмо
IF column 25 = 31 or 18 or 36 or 34 or 99 andColumn 28 = не пустая => отправить письмо
IF column 29 = 31 or 18 or 36 or 34 or 99 andColumn 32 = не пустая => отправить письмо
IF column 33 = 31 or 18 or 36 or 34 or 99 andColumn 36 = не пустая => отправить письмо

IF column 22 or 26 or 30 or 34 = 99A =>не отправлять письмо (если это условие невозможно прописать, то оно не сильно важно)
К сообщению приложен файл: TEST_ENVOI_MAIL.xlsm (36.5 Kb)
 
Ответить
СообщениеСпасибо всем за советы!! особенное спасибо AndreTM =)
но остались еще вопросы:
1. если что-то написать, а потом попробовать стереть (например ошибся в цифре), то сразу вылазиет ошибка

2. Вот какие нужны условия:
IF column 21 = 31 or 18 or 36 or 34 or 99 andColumn 24 = не пустая => отправить письмо
IF column 25 = 31 or 18 or 36 or 34 or 99 andColumn 28 = не пустая => отправить письмо
IF column 29 = 31 or 18 or 36 or 34 or 99 andColumn 32 = не пустая => отправить письмо
IF column 33 = 31 or 18 or 36 or 34 or 99 andColumn 36 = не пустая => отправить письмо

IF column 22 or 26 or 30 or 34 = 99A =>не отправлять письмо (если это условие невозможно прописать, то оно не сильно важно)

Автор - Kassandra
Дата добавления - 26.08.2015 в 12:50
Kassandra Дата: Четверг, 27.08.2015, 11:49 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
AndreTM, в том то и дело, что дабл-клик не нужен, люди вводят данные, которые автоматически должны отправляться без каких-либо еще действий
 
Ответить
СообщениеAndreTM, в том то и дело, что дабл-клик не нужен, люди вводят данные, которые автоматически должны отправляться без каких-либо еще действий

Автор - Kassandra
Дата добавления - 27.08.2015 в 11:49
AndreTM Дата: Четверг, 27.08.2015, 12:26 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 500 ±
Замечаний: 0% ±

2003 & 2010
А ничего, что "люди" могут ошибаться? :D Даже если вы для соответствующих ячеек предусмотрите "проверку данных", чтобы туда нельзя было внести ничего, кроме верных значений - никто не гарантирует, что оператор не внесет "не то из верных" значений.
Соответственно, надо тогда сначала проверять корректность ввода, и только потом выполнять действие (отправку письма). И, как я и сказал, действие можно повесить на любое событие, не обязательно даблклик. Или уж тогда сделайте вообще отдельную юзерформу, где будут вводиться данные при модификации строки, а при записи данных - и будет выполняться и контроль, и отправка. Иначе вы рискуете организовать кучу неверных писем...


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеА ничего, что "люди" могут ошибаться? :D Даже если вы для соответствующих ячеек предусмотрите "проверку данных", чтобы туда нельзя было внести ничего, кроме верных значений - никто не гарантирует, что оператор не внесет "не то из верных" значений.
Соответственно, надо тогда сначала проверять корректность ввода, и только потом выполнять действие (отправку письма). И, как я и сказал, действие можно повесить на любое событие, не обязательно даблклик. Или уж тогда сделайте вообще отдельную юзерформу, где будут вводиться данные при модификации строки, а при записи данных - и будет выполняться и контроль, и отправка. Иначе вы рискуете организовать кучу неверных писем...

Автор - AndreTM
Дата добавления - 27.08.2015 в 12:26
Kassandra Дата: Четверг, 27.08.2015, 14:14 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 11
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
AndreTM, это не важно, если человек ошибится в написании (так как это как бы дополнительная мера) и все быстро на месте проверяется и то что будут неверные письма тоже не проблема =) тут главное оперативность, человек ввел данные, письмо сразу же отправилось
Еще есть проблема в названии темы, нужно что бы тема была в зависимимости от колонки куда ввели данные, сейчас там постоянно тема 31

Огромное Вам спасибо, что Вы мне помогаете =)
 
Ответить
СообщениеAndreTM, это не важно, если человек ошибится в написании (так как это как бы дополнительная мера) и все быстро на месте проверяется и то что будут неверные письма тоже не проблема =) тут главное оперативность, человек ввел данные, письмо сразу же отправилось
Еще есть проблема в названии темы, нужно что бы тема была в зависимимости от колонки куда ввели данные, сейчас там постоянно тема 31

Огромное Вам спасибо, что Вы мне помогаете =)

Автор - Kassandra
Дата добавления - 27.08.2015 в 14:14
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Условия для отправки autoemail (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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