2017-12-28 56 views
0

나는 [A] 열에 200 개의 이름을 넣고 다음에 이름에 대한 첨부 파일을 말하며 Excel 시트 ("Sheet2"라고 부름)를 가지고 있습니다. 그것에 [B].(VBA) 여러 첨부 파일이있는 메일 보내기 목록에 중복 된 메일 주소

각 이름의 메일 주소가있는 다른 시트 ("Sheet1")가 있습니다. 중대한! ->이 Sheet1 목록은 200 개의 이름이있는 첫 번째 목록보다 깁니다.

시트 "Sheet2"(열 [A])에 중복 항목이 있지만 첨부 파일이 서로 다릅니다.

내가 어떻게 든 내가 그렇게하도록 관리 할 수 ​​없습니다 만 사용자에게 필요한 모든 attachements 하나의 메일을 보내 싶습니다

...

내가 가진 루프가 목록에 모든 사용자에 대해 메일을 생성합니다 "Sheet1의" 하지만 "Sheet2"목록의 사용자에게만 메일이 필요합니다.

여기에서 답변을 찾으십시오. 감사!

내 코드 :

Sub Mails() 

Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 


Dim FileName As Variant 
Dim wkbSource As Workbook 
Dim wksSource As Worksheet 
Dim wksDest As Worksheet 


Set wksDest = ThisWorkbook.Worksheets("Sheet2") 
Set wksSource = ThisWorkbook.Worksheets("Sheet1") 

Dim LastRowSource As Long 
LastRowSource = wksSource.Cells(wksSource.Rows.Count, "A").End(xlUp).Row 

Dim LastRowDest As Long 
LastRowDest = wksDest.Cells(wksDest.Rows.Count, "A").End(xlUp).Row 

For i = 1 To LastRowSource 

    Dim OutApp As Object 
    Dim OutMail As Object 
    Dim CC As String 

    Set OutApp = CreateObject("Outlook.Application") 
    Set OutMail = OutApp.CreateItem(0) 
    Dim TC_User As String 
    Dim TC_Attachement As String 
    Dim TC_File As String 

    TC_User = "" 
    CC = "" 
    TC_User = wksSource.Range("A" & i) 
    TC_USer_mail = wksSource.Range("B" & i) 
    TC_Attachement = "" 

     With OutMail 
      .To = TC_USer_mail 
      .BCC = "" 
      .Importance = 2 
      .Subject = "for you" 
      .HTMLBody = "<body style='font-family:arial;font-size:13'>" & _ 
         "<b>############################################<br>" & _ 
         "Diese Mail wurde automatisch erstellt<br>" & _ 
         "############################################</b><br><br>" & _ 
          "Hallo " & TC_User & "," & "<br><br>" & _ 
          "blabla.<br><br>" & _ 
         "</body>" 
      For g = 2 To LastRowDest 
       If wksDest.Range("A" & g) = TC_User Then 

        TC_File = wksDest.Range("B" & g) 
        TC_Attachement = "C:\Users\bla\Documents" & "\" & TC_File 

        If Dir(TC_Attachement) <> "" Then 
         .Attachments.Add TC_Attachement 
         'GoTo nextvar 

         Else 
        End If 
       End If 
'nextvar: 
      Next g 

     .Display 
     End With 
     On Error GoTo 0 

     Set OutMail = Nothing 
     Set OutApp = Nothing 
Next i 

Application.EnableEvents = True 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 
Ende: 

End Sub 
+0

귀하의 목록 ... – dwirony

+0

소스 -> 시트 ("Sheet1") = 사용자 ID + 메일 목적지 -> 시트 ("PDF_an_MA") = 사용자 ID + 첨부 파일 – smartini

답변

0

그래서 거기에 각각의 이름 에 대한 첨부 파일의 알 수없는 숫자 (즉 반드시 하나 없습니다.)을하고 당신이 그 (것)들을 함께 그룹화해야합니까?

그냥 복사하고 이름 열 라인까지, 그리고 단순히 목록 (→ SortData를) 정렬 갈 수 있도록 다른 아래 하나 개의 테이블을 붙여 넣기 (그것은? 한 번 것 같은 소리) 후 이름이 함께 그룹화됩니다.

여기에서 보내는 프로세스를 자동화하기 위해 목록을 정렬 할 수있는 몇 가지 방법이 있습니다. 그것의 소리에 의해, 대부분의 이름은 하나의 첨부 파일을 가지므로, 당신이가는 것처럼 보내고 수동으로 추가 파일을 보냅니다.

일회용 작업을 수동으로 처리하는 것은 자동화하는 것보다 빠르고 쉽습니다. 이 반복되는 작업이 될 것입니다 경우

, 다음 소스 데이터를 구성하는 더 나은 방법을 찾으려고 (간단한 Access 테이블처럼합니다.)

+0

빠른 응답을 주셔서 감사합니다. 실제로 반복 작업이며 사용자는 수동 작업을 전혀해서는 안됩니다. – smartini

+0

그래, 당신은 정렬을 자동화 할 수있다. (단지 코드 줄 일 뿐이다.) 그리고 줄 단위로 목록을 반복한다. - 이전 줄과 같지 않은 이름을 발견한다면, 그것은 새로운 이메일이다. 이전 것이 있으면 보낼 수 있습니다.). - 다음 행이 현재 행과 동일한 이름이면 추가 할 첨부 파일입니다. 빈 셀까지 반복하십시오. – ashleedawg

+0

하지만 원하지 않는 수신자에게 메일을 보내면 내 문제가 해결되지 않습니까? – smartini

1

좋아, 내 해결책을 발견했다. 어쩌면 우아하지 않을 수도 있지만 작동합니다. "With OutMail"- Statement 바로 앞에이 코드를 썼습니다. 메일 데이터베이스의 User-ID가 수신자 목록에 실제로 있는지 확인합니다. 그렇지 않은 경우이 User-ID는 건너 뜁니다.

For j = 2 To LastRowSource 
     If TC_User = wksDest.Range("A" & j) Then 
      GoTo weiter_j 
     End If 
    Next j 
GoTo Ende: 

weiter_j: 
현재 (`wksSource = ThisWorkbook.Worksheets ("Sheet1의") ')이 포함 된 하나 있다면, 당신은 PDF_an_MA 시트에 소스를 변경해야 할 것을 Sheet1``에서 목록을 복용하고