添付ファイルが.msgのOutlookメールを自動化するプロジェクトで作業しています。これらのメールの送信は、Excelを介して行われます。私はそれを行うためにVBA Excelを使用しています。サブフォルダ内の.msgファイルを検索し、VBA Excelを使用してOutlookでメールを送信します。
Excelには、必要な電子メール(列T)と.msgファイルの名前の一部を持つ他の列(列R)の列があります。ファイル名の一部は、1つ以上のファイルに含めることができます。さらに多くのファイルが見つかった場合は、列Tで指定された対応するメールにすべて郵送されます。
Excel VBAの新機能ですが、これらのファイルを見つけ出してそこに配置する作業コードがあります列Uのパス(2つのファイルが見つかった場合は、コードUとVで区切られた後のコードになります)を使用して、パスの末尾にあるOutlookメールでパスを送信します。
私の唯一の問題は、これらのファイルがサブフォルダに配布されていることと、すべてのファイルが1つのフォルダにある場合にのみ機能することです。私は(DIR $)を使ってこれらのファイルをワイルドカードで探します。 1つのフォルダではなく、すべてのサブフォルダ内のファイルを検索するコードを最適化するにはどうすればよいですか?
Sub Send_Files()
Dim OApp As Object
Dim OMail As Object
Dim sh As Worksheet
Dim cell As Range
Dim FileCell As Range
Dim rng As Range
Dim irow As Integer
Dim i As Integer
Dim dpath As String
Dim pfile As String
Dim FileNames As String
Dim Sourcewb As Workbook
Dim Destwb As Workbook
Dim TempFilePath As String
Dim TempFileName As String
Dim Mail_Object, OutApp As Variant
Dim OutMail As Variant
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
On Error Resume Next
irow = 1
dpath = "H:\My Documents\test\"
Do While Cells(irow, 18) <> Empty
pfile = Dir$(dpath & "\*" & Cells(irow, 18) & "*")
FileNames = ""
'MsgBox pfile
Do Until LenB(pfile) = 0
If FileNames <> "" Then
FileNames = FileNames & ";" & dpath & pfile
Else
FileNames = dpath & pfile
End If
pfile = Dir$
For Each cell In Cells(irow, 18)
Cells(irow, 21) = FileNames
Next cell
Loop
irow = irow + 1
Loop
'Debug.Print FileNames
Application.DisplayAlerts = False
Columns("V:AU").Select
Selection.ClearContents
Columns("U:U").Select
Selection.TextToColumns Destination:=Range("U1"), DataType:=xlDelimited, _
TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
Set sh = ActiveSheet
Set OApp = CreateObject("Outlook.Application")
For Each cell In sh.Columns("T").Cells.SpecialCells(xlCellTypeConstants)
Set rng = sh.Cells(cell.Row, 1).Range("U1:V1")
If cell.Value Like "?*@testmail.nl" And _
Application.WorksheetFunction.CountA(rng) > 0 Then
Set OMail = OApp.CreateItem(0)
With OMail
.To = cell.Value
.Body = "Hoi " & cell.Offset(0, -1).Value
.Subject = cell.Offset(0, -2).Value
For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
If Trim(FileCell) <> "" Then
If Dir(FileCell.Value) <> "" Then
.Attachments.Add FileCell.Value
'.Subject = FileCell.Value
End If
End If
Next FileCell
.Display
' Application.Wait (Now + TimeValue("0:00:01"))
' Application.SendKeys "%z"
End With
Set OMail = Nothing
End If
Next cell
Set OApp = Nothing
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub
返信用のThnxxとあなたの発見したバグについては、私は間違って最後に(スラッシュ)を付けたテストファイルとして書いていました。私は実際のファイル名をテストファイル名に置き換えたので、実際には(H:\ My Documents \ test)となりました。再帰的なDIRについては、その機能を構築するのに多くの努力をしましたが、たびに失敗するだけなので、助けを求めました。私は実際にそれを経験していません。私のコードに実装する方法を教えていただければ本当に感謝しています。 – Sam
ummm、どうすればそのファイルマスクを作ることができますか?私は本当に最善を尽くしており、その背後にある論理を理解しています。私はちょうど正しい符号化形式でそれを作ることはできません、私はVBAで私の知識はまだ十分ではないと思う:( – Sam
ファイルマスクは、pfile = dir $(dpath& "\ *"&Cells(irow、18 )& "*")。 "* .bmp"の代わりにサンプルコードで使用されます – thx1138v2