2014-11-24 110 views
1

我基本上试图发送一封电子邮件,如果某个数据点分别大于或小于工作表上的最大和最小点。事情是我设立了“If,Then”声明,但它没有给我我想要的结果。有些文字甚至出现,我试图只显示列“E”中的数字。我想知道我哪里出错了。我会在代码中指定我认为我会出错的地方。此外,我将分别与Max和Min的“K26”和“K25”进行比较。感谢您的帮助!使用VBA根据数据点发送电子邮件

Option Explicit 


Public Sub OutofControl() 
Dim lRow  As Long 
Dim lstRow  As Long 
Dim toList  As String 
Dim ccList  As String 
Dim bccList  As String 
Dim eSubject As String 
Dim EBody  As String 
Dim vbCrLf As String 
Dim data As Variant 
Dim ul As Variant 
Dim ll As Variant 



Dim ws   As Worksheet 

With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
    .DisplayAlerts = True 


End With 

Set ws = Sheets(2) 
ws.Select 

lstRow = WorksheetFunction.Max(3, ws.Cells(Rows.Count, "E").End(xlUp).Row) 

For lRow = 1 To lstRow 

data = Cells(lRow, "E").Value 
ul = Range("K26") 
ll = Range("K25") 


    If data > ul Or data < ll And Not Null Then 
'THIS IS WHERE I THINK I NEED TO CHANGE SOMETHING SO IT DOES NOT DETECT THE TEXT 



    vbCrLf = "<br><br>" 

     toList = Range("B1") 'gets the recipient from col B1 
     eSubject = "Text " & ActiveWorkbook.Name 
     EBody = "<HTML><BODY>" 
     EBody = EBody & "Dear " & Range("B1") & vbCrLf 
     EBody = EBody & "Text :" & Cells(lRow, "C").Value & vbCrLf 
     EBody = EBody & "Link to the SQC Chart:" 
     EBody = EBody & "<A href ='Text'>Text </A>" & vbCrLf 

     EBody = EBody & "</BODY></HTML>" 



     MailData msgSubject:=eSubject, msgBody:=EBody, Sendto:=toList 

     'Cells(lRow, "W").Value = "Mail Sent " & Date + Time 'Marks the row as "email sent in Column W" 

    End If 
Next lRow 


ActiveWorkbook.Save 


With Application 
    .ScreenUpdating = True 
    .EnableEvents = True 
    .DisplayAlerts = True 

End With 

End Sub 



Function MailData(msgSubject As String, msgBody As String, Sendto As String, _ 
    Optional CCto As String, Optional BCCto As String, Optional fAttach As String) 

Dim app As Object, Itm As Variant 
Set app = CreateObject("Outlook.Application") 
Set Itm = app.CreateItem(0) 
With Itm 
    .Subject = msgSubject 
    .To = Sendto 
    If Not IsMissing(CCto) Then .Cc = CCto 
    If Len(Trim(BCCto)) > 0 Then 
     .Bcc = BCCto 
    End If 
    .HTMLBody = msgBody 
    .BodyFormat = 2 '1=Plain text, 2=HTML 3=RichText -- ISSUE: this does not keep HTML formatting -- converts all text 
    'On Error Resume Next 
    If Len(Trim(fAttach)) > 0 Then .Attachments.Add (fAttach) ' Must be complete path'and filename if you require an attachment to be included 
    'Err.Clear 
    'On Error GoTo 0 
    .Save   ' This property is used when you want to saves mail to the Concept folder 
    .Display  ' This property is used when you want to display before sending 
    '.Send   ' This property is used if you want to send without verification 
End With 
Set app = Nothing 
Set Itm = Nothing 
End Function 
+0

你试过ISNUMERIC()? http://www.techonthenet.com/excel/formulas/isnumeric.php – Chrismas007 2014-11-24 20:12:06

+0

@ Chrismas007让我试试。我会让你知道的。再一次感谢你! – adit123 2014-11-25 13:46:36

回答

1
  1. or需要括号从and进行区分。 2.下面的代码将检查数值。
For lRow = 1 To lstRow 
    data = Cells(lRow, "E").Value 
    ul = Range("K26") 
    ll = Range("K25") 
If data > ul Or data < ll Then 
    If IsNumeric(data) = True And isBlank(data) = False Then 

    vbCrLf = "<br><br>" 
     toList = Range("B1") 'gets the recipient from col B1 
     eSubject = "Text " & ActiveWorkbook.Name 
     EBody = "<HTML><BODY>" _ 
     & "Dear " & Range("B1") & vbCrLf _ 
     & "Text :" & Cells(lRow, "C").Value & vbCrLf _ 
     & "Link to the SQC Chart:" _ 
     & "<A href ='Text'>Text </A>" & vbCrLf _ 
     & "</BODY></HTML>" 

     MailData msgSubject:=eSubject, msgBody:=EBody, Sendto:=toList 

     'Cells(lRow, "W").Value = "Mail Sent " & Date + Time 'Marks the row as "email sent in Column W" 

     End If 
    End If 
Next lRow 
+0

我得到一个不匹配的错误,它突出显示了“真”的术语?这是为什么 ? @ Chrismas007 – adit123 2014-11-25 13:50:17

+0

随着数据的设置方式。它们之间有空间。空白点正在显现。为了解决这个问题,我使用了代码:'And Not Null',但现在它根本不工作。什么都不会发送。 – adit123 2014-11-25 14:38:30

+0

什么数据之间有空格?就像在你用data = Cells(lRow,“E”).value'定义变量数据时一样。此外,您之前使用'null'来确定'data'的值是否没有任何内容?那么,您正在循环的列“E”中的所有内容(如在哪种数据中)以及您希望在哪种情况下发送电子邮件? – Chrismas007 2014-11-25 16:11:38

相关问题