2017-09-06 6 views
0

メールを使ってExcelの一部を受信者に自動的に送信するマクロを作成しました。コードは完全に機能していて、うまく機能しています。選択した範囲のメールを送信するマクロ(条件付きの場合のみ行)

しかし、私はマイナーチェンジを実装したい:マクロは実際には範囲(列)をフィルタリングし、フィルタリング後に存在する行をコピーして別のシートにペーストします。
その後、コピーした範囲を一部の受信者に送信します。

私が変更したいのは、値が内部だけで0以外にもコピーされた行だけを送信するようにマクロに指示することです。
したがって、行(データごとに8列あり)すべての列で、この列を送信しないでください。

以下のコードを提供します。 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"を追加してみてください可能性があります。それは、単一の行に動作しない場合、あなたはおそらく次の文にAutoFilterに試してみてください

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

。この場合は、Criteria1となりますのでご注意ください。

+0

ありがとうございました。不幸なことに、すべてが0の行をペーストします。ただし、その重要な点はわかりませんが、範囲の最初の2つの列には、ヘッダーなので、値はありません。値は範囲の3行目から始まります...重要ですか? –

+1

申し訳ありませんが、自分でテストすることができない場合は、解決策を見つけるのはやや難しいです。私はどのように実行されているか(そして何が起こっているか)をよりよく理解するために、スクリプトをステップごとに実行することを提案しています。それはあなたにいくつかの手がかりを与えることができます。 – SMFSW

+0

@PericlesFaliagas希望の結果を得ることができましたか?あるいは、段階的に実行している間に何かが間違って始まるのを見つけましたか? – SMFSW

関連する問題