2017-03-22 5 views
0

Ich habe eine Arbeitsmappe mit 4 Blatt bekommt:Wie alle Blätter befestigen, sondern zuerst in E-Mail-VBA

1. - Empfänger E-Mail-Daten wie TO, CC, Subject, vom 2. bis 4. der Blätter, die ich brauche, als Anhang an die Empfänger senden.

Ich erfand das folgende Skript. Aber ich konfrontierte 2 Ausgaben als Anfänger VBA:

  1. Die ‚Schleife‘ schlägt für die erste leere Zeile aus dem ersten Blatt Senden als auch (Ich möchte mit den letzten E-Mail Details stoppen);
  2. Das 'ActiveWorkbook' sendet alle Blätter (Ich möchte die erste eins überspringen, wo die Empfänger & der VBA-Skript befinden);

schätze ich jede Beratung/Bemerkung, weil ich für 3 Monate VBA studiert. Vielen Dank im Voraus!

Sub ICO_Emails() 
    Dim VSEApp As Object 
    Dim VSEMail As Object 
    Dim VSEText As String 
    Dim Email_Send_To, Email_Cc, Email_Subject As String 

    row_number = 1 

    Do 
     DoEvents 
     row_number = row_number + 1 
     Email_Send_To = Sheet1.Range("A" & row_number) 
     Email_Cc = Sheet1.Range("B" & row_number) 
     Email_Subject = Sheet1.Range("C" & row_number) 
     On Error GoTo debugs 
     Set VSEApp = CreateObject("Outlook.Application") 
     Set VSEMail = VSEApp.CreateItem(0) 
     'Email Body script 
     VSEText = "<BODY style=font-size:14pt;font-family:Times New Roman>Dear all,<p>Test.<p></BODY>" 
     'Email Signature 
     With VSEMail 
      .Display 
     End With 
     Signature = VSEMail.HTMLBody 
     With VSEMail 
      .To = Email_Send_To 
      .CC = Email_Cc 
      .Subject = Email_Subject 
      .HTMLBody = VSEText & Signature 
      .Attachments.Add ActiveWorkbook.FullName 
      .Display 
     End With 
debugs: 
    Loop Until Email_Send_To = "" 
End Sub 
+1

Willkommen bei StackOverflow, bitte formatieren Sie Ihren Code, es ist nicht lesbar. – z32a7ul

Antwort

1

Werfen Sie einen Blick auf Dies. Dies nimmt eine Kopie Ihrer Arbeitsmappe und speichert sie in den "temporären" Speicherort des Benutzers. Es führt dann die Änderungen durch, die Sie an die Kopie der Arbeitsmappe vornehmen möchten, bevor Sie diese anhängen.

Sub ICO_Emails() 
    Dim VSEApp As Object 
    Dim VSEMail As Object 
    Dim VSEText As String 
    Dim Email_Send_To, Email_Cc, Email_Subject As String 
    Dim wb As Workbook, nwb As Workbook 

    Application.ScreenUpdating = False 

    Set wb = ThisWorkbook 
    wb.SaveCopyAs (Environ("temp") & "\temp_" & wb.Name) 

    Set nwb = Workbooks.Open(Environ("temp") & "\temp_" & wb.Name) 
    With nwb 
     Application.DisplayAlerts = False 
     ' Delete relevant sheet 
     .Sheets(1).Delete 
     Application.DisplayAlerts = True 
     .Save 
    End With 

    row_number = 1 

    Do 
     DoEvents 
     row_number = row_number + 1 
     Email_Send_To = Sheet1.Range("A" & row_number) 
     Email_Cc = Sheet1.Range("B" & row_number) 
     Email_Subject = Sheet1.Range("C" & row_number) 
     On Error GoTo debugs 
     Set VSEApp = CreateObject("Outlook.Application") 
     Set VSEMail = VSEApp.CreateItem(0) 
     'Email Body script 
     VSEText = "<BODY style=font-size:14pt;font-family:Times New Roman>Dear all,<p>Test.<p></BODY>" 
     'Email Signature 
     With VSEMail 
      .Display 
     End With 
     Signature = VSEMail.HTMLBody 
     With VSEMail 
      .To = Email_Send_To 
      .CC = Email_Cc 
      .Subject = Email_Subject 
      .HTMLBody = VSEText & Signature 
      .Attachments.Add nwb.FullName 
      .Display 
     End With 
debugs: 
    Loop Until Email_Send_To = "" 
    nwb.Close 
    Application.ScreenUpdating = True 
End Sub 
+0

DisplayAlerts wird zweimal hintereinander auf False gesetzt. Sie könnten in Erwägung ziehen, dieselbe Outlook.Application für jede Iteration erneut zu verwenden. Upvoted – Jbjstam

+0

Hallo Tom, deine Modifikationen lösen meine Probleme nicht. Die angehängten Dateien in jeder E-Mail können nicht geöffnet sein. Und die 'Schleife' berücksichtigt erneut die erste leere Zeile und schlägt sie in eine neue leere E-Mail vor. – VSE

-1
  1. Speichern Sie eine Kopie Ihrer Arbeitsmappe
  2. öffnen es
  3. Entfernen Sie das Blatt aus der Kopie
  4. speichern
  5. Senden Sie dieses bearbeitete Arbeitsmappe
+0

Dies ist keine Antwort. Bitte verwenden Sie die Kommentare – Tom

+0

Es ist eine Antwort auf das Problem, das er angesprochen hat, nämlich dass sein Code die gesamte Arbeitsmappe sendet, anstatt ein Blatt zu überspringen. Sie können eine Frage beantworten, ohne Code zu senden, der zum Kopieren bereit ist. Ich würde einen Kommentar verwenden, wenn ich nicht direkt auf eine Frage antworte, z. B. einen Vorschlag, den ich nicht verwenden soll. Wählen Sie oder, um den Code richtig zu formatieren. – Jbjstam

Verwandte Themen