2017-09-06 24 views
0

我已經創建了一個宏經由電子郵件自動發送一個excel工作表的一部分,以一些接收者。代碼功能齊全,工作效率很高。宏發送(如果條件是遵守僅行)與選定的範圍郵件

然而,我想要實現到其上的微小變化:宏實際上是濾波的範圍(列),它複製濾波之後存在,然後糊劑然後在另一片的行。
之後,它發出的複製粘貼範圍有些收件人。

我想要改變的是,告訴宏只發送複製粘貼的行中有值,而不僅僅是0.
所以,如果一行(每行有8列與數據)只有0在它的所有列中,然後不發送這一個。

我將在下面提供的代碼。添加If條件應該很容易,但我已經嘗試並失敗了。可能有人知道如何在代碼中添加If條件。

Sub MAIL() 
    Dim ToArray As String 
    Dim CCArray As String 
    Dim Subject As String 
    Dim Content As String 
    Dim lastrow1 As Integer 
    Dim lastrow2 As Integer 
    Application.ScreenUpdating = False 
    For I = 1 To 20 
    Sheets.Add.Name = "WS1" 
    Sheets("Report").Activate 
    ToArray = "[email protected]" 
    'ToArray = ThisWorkbook.Sheets("Report").Cells((I + 2), 28).Value 
    CCArray = ThisWorkbook.Sheets("Report").Cells((I + 2), 29).Value 
    Subject = ThisWorkbook.Sheets("Report").Cells((I + 2), 30).Value 
    Content = ThisWorkbook.Sheets("Report").Cells((I + 2), 31).Value 
    ThisWorkbook.Sheets("Report").Range("I24:U24").AutoFilter Field:=2, Criteria1:=ThisWorkbook.Sheets("Report").Cells((I + 2), 27).Value 
    lastrow1 = ThisWorkbook.Sheets("Report").Cells(ThisWorkbook.Sheets("Report").Rows.Count, "U").End(xlUp).Row 
    ThisWorkbook.Sheets("Report").Range("K24:U" & lastrow1).SpecialCells(xlCellTypeVisible).Copy ThisWorkbook.Sheets("WS1").Cells(1, 1) 
    lastrow2 = ThisWorkbook.Sheets("WS1").Cells(Sheets("WS1").Rows.Count, "A").End(xlUp).Row 
    If lastrow2 >= 2 Then 
     Sheets("WS1").Columns("A:M").AutoFit 
     Sheets("WS1").Activate 
     Sheets("WS1").Range("A1:M" & lastrow2).Select 
     ActiveWorkbook.EnvelopeVisible = True 
     With Sheets("Report").MailEnvelope 
      .Introduction = Content 
      .Item.To = ToArray 
      .Item.CC = CCArray 
      .Item.Subject = Subject 
      .Item.Send 
     End With 
     Application.ScreenUpdating = True 
     Application.DisplayAlerts = False 
    End If 
    Sheets("WS1").Delete 
    Next I 
End Sub 

回答

0

您可以嘗試在你的過濾代碼行添加Criteria2:="<>0"

ThisWorkbook.Sheets("Report").Range("I24:U24").AutoFilter Field:=2, Criteria1:=ThisWorkbook.Sheets("Report").Cells((I + 2), 27).Value 

如果沒有在一行上工作,你或許應該嘗試AutoFilter上的下一個語句。請注意在這種情況下,它將是Criteria1

+0

謝謝你的答案..可惜的是,它劇照膏這裏的一切是0行。但是,我不知道它必須提到它,但範圍中的前兩列有一些類型的垂直頭文件,所以沒有值..值從第三行開始......這很重要嗎? –

+1

好吧,這是有點難以找到一個解決方案適合你,如果我們不能自行測試;我可以建議的是逐步執行腳本以更好地瞭解它如何運行(以及發生了什麼)。它可以給你一些線索。 – SMFSW

+0

@PericlesFaliagas你設法得到想要的結果嗎?或者您是否在逐步執行的過程中發現事情開始出現問題? – SMFSW