Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
936to940
936to940
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dateien aus untersch. Verzeichnissen versenden

Dateien aus untersch. Verzeichnissen versenden
30.12.2007 12:31:00
Peter
Guten Tag
in meinem Workbook "VERSAND", in Tabelle "Auflistung" habe ich in Spalte A ab Zeile 3 die Pfade und in Spalte B ab Zeile 3 die Namen (von geschlossenen) .xls Dateien aufgeführt. Nun möchte ich diese per Mail versenden. Da die Dateien eine gewisse Grösse haben, möchte ich pro Mail nur 5 Dateien versenden.
Bisher habe ich nur offene Excel-Files versandt und pro Mail immer nur eine Datei. Ich bin sehr dankbar für Hinweise, wie ich nachfolgenden Code umbauen muss, dass eine solche Aufbereitung von Mails möglich wird.
Vielen Dank, Peter

Sub senden()
Dim Nachricht As Object, OutApp As Object
Dim SavePath As String
Dim AWS As String
Dim File As String
Dim vFile as String
Dim to_ As String
ThisWorkbook.Activate
to_ = Sheets("Parameter").Range("Versand")
vFile = ActiveSheet.Name
SavePath = Application.ActiveWorkbook.path
File = ActiveSheet.Name
ActiveSheet.Copy  'Kopiert aktuelles Sheet in eine neue Mappe
With ActiveWorkbook
.Sheets(1).Name = "Print"
.SaveAs SavePath & "\" & File
End With
With ActiveWorkbook
.Save
End With
'Aktive Arbeitsmappe wird als mail gesendet
AWS = ActiveWorkbook.FullName
Application.DisplayAlerts = False
Set OutApp = CreateObject("Outlook.Application")
'InitializeOutlook = True
Set Nachricht = OutApp.CreateItem(0)
With Nachricht
.To = to_
.Subject = "Report " & Date & " " & Time
.Attachments.Add AWS
.Display
End With
Set OutApp = Nothing
Set Nachricht = Nothing
Application.DisplayAlerts = True
ActiveWorkbook.Close
Kill AWS
End Sub


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien aus untersch. Verzeichnissen versenden
30.12.2007 15:36:19
Peter
Hallo Sepp
Der Ansatz ist PERFEKT !!!
Vielen Dank, Peter

Nachtrag: wie können Attachments für anderes ....
30.12.2007 16:04:16
Peter
... Versandprogramm übergeben werden?
Hallo Sepp, liebes Forum
Ich erlaube mir noch eine Anschlussfrage. Zum Teil will ich die Dateien per Outlook und zum Teil per Lotus Notes versenden.
Was wann zum Tragen kommt, frage ich mit Hilfe von Select Case ab. Wenn ein Versand mittels Notes erfolgt, habe ich die entsprechenden Variablen mit folgendem Aufruf an eine Subroutine übergeben.
Nun habe ich im Code von Sepp versucht eine Variable zu lokalisieren, die die einzelnen Dateinamen liefert und bin nicht fündig geworden
Kann mir jemand sagen, wie ich die zum Versandbestimmten Dateinamen der entsprechenden Funktion übergebe?
Vielen Dank!
Peter
'Code für Versand mit Lotus Notes
VersendeMail to_, cc_, bcc_, AWS 'mit AWS wurde bisher das entsprechende Attachment übergeben

Anzeige
AW: Nachtrag: wie können Attachments für anderes ....
30.12.2007 16:08:10
Josef
Hallo Peter,
die Dateien stehen nach wie vor in "AWS" allerdings ist "AWS" jetzt ein Array das die Dateienamen aufnimmt.
Gruß Sepp

AW: Nachtrag: wie können Attachments für anderes ....
30.12.2007 16:34:35
Peter
Hallo Sepp
Vielen Dank für die Info.
Heisst das für mich, dass ich das entsprechende Argument "Anhang" der Funktion als Array definieren muss (habe leider gerade keine Lotus Notes Umgebung "zur Hand" um das Auszutesten)?
Public Sub VersendeMail(Empfaenger As String, CC As String, BCC As String, Anhang As String) 'bisher
Public Sub VersendeMail(Empfaenger As String, CC As String, BCC As String, Anhang As Array) 'neu
Freundlicher Gruss, Peter

Anzeige
AW: Nachtrag: wie können Attachments für anderes ....
30.12.2007 16:41:36
Josef
Hallo Peter,
"As Variant" und nicht "As Array".

Public Sub VersendeMail(Empfaenger As String, CC As String, BCC As String, Anhang As Variant) ' _
neu


Allerdings muss die Sub "VersendeMail" dieses Datenfeld auch verarbeiten können.

Gruß Sepp

Ein Beispiel
30.12.2007 20:04:00
Josef
Hallo Peter,
anbei ein Codebeispiel, wie man die Paramter übergeben kann. Ausserdem werden die Abhänge nicht in fixen Blöcken zugeteilt, sondern man kann die maximale Gesamtgrösse der Anhänge angeben. Ist dadurch etwas flexibler, wenn große und kleine Dateien versendet werden.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private OLApp As Object

Private Const cMaxSize As Long = 521000 'Maximale Gesamtgrösse der Anhänge in KB

Sub SendMail_Attachment()
Dim objFSO As Object, objF As Object
Dim strFile As String, TO_ As String
Dim AWS() As String
Dim lngR As Long, lngE As Long, lngSize As Long, lngS As Long
Dim i As Integer

Set objFSO = CreateObject("Scripting.FileSystemObject")

With ThisWorkbook
    
    TO_ = .Sheets("Parameter").Range("Versand")
    
    lngE = Application.Max(3, .Sheets("Dateien").Cells(Rows.Count, 1).End(xlUp).Row)
    
    For lngR = 3 To lngE
        
        strFile = .Sheets("Dateien").Cells(lngR, 1).Text & "\" & .Sheets("Dateien").Cells(lngR, 2).Text
        
        If Dir(strFile) <> "" Then
            
            Set objF = objFSO.GetFile(strFile)
            lngSize = lngSize + objF.Size
            
            If lngR < lngE Then
                Set objF = objFSO.GetFile(.Sheets("Dateien").Cells(lngR + 1, 1).Text & _
                    "\" & .Sheets("Dateien").Cells(lngR + 1, 2).Text)
                lngS = objF.Size
            Else
                lngS = 0
            End If
            
            Redim Preserve AWS(i)
            AWS(i) = strFile
            i = i + 1
            
            If lngSize + lngS > cMaxSize Or lngR = lngE Then
                i = 0
                lngSize = 0
                SendWith_OutLook TO_, Subject:="Report " & Date & " " & Time, Attachments:=AWS
                Erase AWS
            End If
            
        End If
        
    Next
    
End With

Set objFSO = Nothing
Set objF = Nothing
Set OLApp = Nothing
End Sub

Sub SendWith_OutLook(TO_ As Variant, Optional CC_ As Variant, Optional BCC_ As Variant, _
    Optional Subject As String, Optional Attachments As Variant)


Dim OMail As Object
Dim strTO As String, strCC As String, strBCC As String
Dim vAttatch As Variant, n As Integer

If IsArray(TO_) Then
    strTO = Join(TO_, ";")
Else
    strTO = TO_
    End If

If IsArray(CC_) Then
    strCC = Join(CC_, ";")
ElseIf Not IsMissing(CC_) Then
    strCC = CC_
    End If

If IsArray(BCC_) Then
    strBCC = Join(BCC_, ";")
ElseIf Not IsMissing(BCC_) Then
    strBCC = BCC_
    End If

If IsArray(Attachments) Then
    vAttatch = Attachments
ElseIf Not IsMissing(Attachments) Then
    Redim vAttatch(0)
    vAttatch(0) = Attachments
End If

If OLApp Is Nothing Then
    Set OLApp = CreateObject("Outlook.Application")
End If

Set OMail = OLApp.CreateItem(0)

With OMail
    .To = strTO
    .CC = strCC
    .BCC = strBCC
    .Subject = Subject
    For n = 0 To UBound(vAttatch)
        If Not IsEmpty(vAttatch) Then .Attachments.Add vAttatch(n)
    Next
    .Display
End With

Set OMail = Nothing
End Sub

Gruß Sepp

Anzeige
AW: Ein Beispiel
31.12.2007 10:00:00
Peter
Hallo Sepp
Vielen Dank für diesen interessanten Code. Ich werde mich da mal durcharbeiten, um das ganze auch zu verstehen.
Alles Gutes fürs neue Jahr!
Peter

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige