2015-07-10 7 views
0

Я начинаю новичок VBA, поэтому заранее заблаговременно для всех, кто может мне помочь. В основном я использую адаптированный фрагмент кода Ron de Bruin, чтобы автоматически отправлять почту ученикам, когда их посещаемость падает ниже определенного уровня, как показано в специальной ячейке excel. До сих пор, так хорошо, материал Рона де Бруина следит за этим. Но есть еще один критерий, который я хочу добавить, и это в основном для отправки почты, если есть также буква «Y» в другой ячейке в той же строке, что и посещаемость. Подводя итог, я хочу, чтобы почта отправлялась только тем, кто выполняет два критерия: 1) опускался ниже определенного уровня и 2) имел «Y» в другой ячейке, но на данный момент код учитывает только первый критерий. Огромное спасибо. Alun (код ниже)отправка автоматической почты из excel на основе нескольких условий

Option Explicit 

Private Sub Worksheet_Calculate() 


Dim FormulaRange As Range 
Dim NotSentMsg As String 
Dim MyMsg As String 
Dim SentMsg As String 
Dim MyLimit As Double 



NotSentMsg = "Not Sent" 
SentMsg = "Sent" 

'Above the MyLimit value it will run the macro 
MyLimit = 80 

'Set the range with Formulas that you want to check 
Set FormulaRange = Me.Range("BH279:BH280") 

On Error GoTo EndMacro: 
For Each FormulaCell In FormulaRange.Cells 
    With FormulaCell 
     If IsNumeric(.Value) = False Then 
      MyMsg = "Not numeric" 
     Else 
      If .Value < MyLimit Then 


       MyMsg = SentMsg 
       If .Offset(0, 1).Value = NotSentMsg Then 
        Call Mail_with_outlook2 
       End If 
      Else 
       MyMsg = NotSentMsg 
      End If 
     End If 
     Application.EnableEvents = False 
     .Offset(0, 1).Value = MyMsg 
     Application.EnableEvents = True 
    End With 
Next FormulaCell 

ExitMacro: 
Exit Sub 

EndMacro: 
Application.EnableEvents = True 

MsgBox "Some Error occurred." _ 
    & vbLf & Err.Number _ 
     & vbLf & Err.Description 

End Sub 
+0

Вы можете исправить свою формулу с помощью префикса 'IF (AAA111 =" Y ", percent, 1)'. Если вы хотите улучшить свои знания, а не просто исправить эту проблему, я бы рекомендовал тег 'homework' (не уверенный в орфографии). – user3819867

+0

Спасибо, Ричард, я попробую это в понедельник и дам вам знать. Если вы когда-нибудь забегаете на государственную должность, вы можете быть уверены в моей поддержке! – Alun

+0

Ричард благодарит, я сначала попытался ответить на этот вопрос, потому что мои знания настолько ограничены, что я не уверен, как использовать ваше предложение, где вставить IF (AAA111 = «Y», процент, 1) и что мне нужно будет добавить для это работать. если бы вы могли уточнить, я был бы бесконечно благодарен. Alun – Alun

ответ

0
If .Value2 < MyLimit And Not .EntireRow.Find(What:="Y", LookIn:=xlValues, LookAt:=xlWhole) Is Nothing Then Call Mail_with_outlook2 
'If you look for the complementer solution, remove the " Not" 

Вы искать значение "Y" в той же строке.
Я бы рекомендовал установить выходные переменные также в почтовый макрос Call Mail_with_outlook2(emailaddress, name, title, MyValue).

+0

Привет, пользователь 3819867, спасибо за это. Я должен ждать до понедельника, чтобы попробовать, но я уверен, что это сработает. Я дам Вам знать. Спасибо. Хороших выходных. – Alun

+0

Привет снова, я вставил свой код вместо Если .Value Alun

+0

Мой синтаксис просто помещает итерацию 'Call' в ту же строку. Я считаю, что это может вызвать проблемы. 'Если .Value2 user3819867