Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Aus Excel definierten Email account ansprechen

Forumthread: Aus Excel definierten Email account ansprechen

Aus Excel definierten Email account ansprechen
11.09.2015 10:45:24
Matthias
Hallo
nachfolgend mein Code.
Sub SeriendruckVS()
'** Dimensionierung der Variablen
Dim strPDF As String
Dim OutlookApp As Object, strEmail As Object
Dim olOldBody As String
Dim wksData As Worksheet, wksPrint As Worksheet
Dim iRow As Integer
Dim FolderPDF As String, File_PDF As String
On Error GoTo Fehler
Set wksData = Worksheets("Mitgliederdaten")
Set wksPrint = ActiveWorkbook.Worksheets("VS")
iRow = 7
ActiveWorkbook.Worksheets("VS").Unprotect PWs
FolderPDF = ActiveWorkbook.Path & Application.PathSeparator & "_11_E-Mail"
If Dir(FolderPDF, vbDirectory) = "" Then
VBA.MkDir FolderPDF
End If
FolderPDF = FolderPDF & Application.PathSeparator
Do Until IsEmpty(wksData.Cells(iRow, 1))
If UCase(wksData.Cells(iRow, 22).Value) = "C" Then 'Wert in Spalte D prüfen
wksPrint.Range("T1").Value = wksData.Cells(iRow, 1).Value 'lfd. Nr
wksPrint.Calculate '? - wenn Formelberechnungen aktualisiert werden müssen
File_PDF = FolderPDF & wksPrint.Range("A6").Text & "_" _
& wksPrint.Range("A7").Text & ".pdf" 'Zellen und verbindenden Text ggf. anpassen
wksPrint.ExportAsFixedFormat Type:=xlTypePDF, Filename:=File_PDF, _
Quality:=xlQualityStandard, IgnorePrintAreas:=False, OpenAfterPublish:=False
Set OutlookApp = CreateObject("Outlook.Application")
Set strEmail = OutlookApp.CreateItem(0)
With strEmail
Set .SendUsingAccount = .Session.Accounts.Item(2)
olOldBody = .htmlBody
.To = wksData.Cells(iRow, 10).Value
.Subject = "Vertrag Amateursportler" & " " & Worksheets("GD").Range("$W$2"). _
Value
.body = "Hallo" & " " & wksPrint.Range("A7").Value & "," & Chr(13) & Chr(13) &  _
_
"anbei dein Vertrag als Amateursportler" & " " & Worksheets("GD").Range("$W$2").Value & " " & " _
zur weiteren Verwendung."
.Display    'Mail nur Anzeigen Nicht senden
VBA.SendKeys "^{END}", True
'Einfügen einer bestimmten Signatur
strSignatur = "SKK Willmering"
'strSignatur = "meineFirmenSignatur"
.GetInspector.CommandBars.Item("Insert").Controls("Signatur").Controls(strSignatur). _
_
Execute
.Attachments.Add File_PDF
.send
Sleep 15000  ' 2 Sekunden warten
Dim olApp    As Object
Dim olName   As Object
Dim olFolder As Object
Dim olMail   As Object
Set olApp = GetObject(, "OutLook.Application")
Set olName = olApp.GetNamespace("MAPI")
Set olFolder = olName.Session.Folders("SKK Willmering").Folders("Gesendete Objekte")
Set olMail = olFolder.Items.GetLast
olMail.SaveAs FolderPDF & Format(Date, "yymmdd") & "_" & "VS" & "_" & wksPrint.Range("A6").Text  _
& "_" & wksPrint.Range("A7").Text & ".msg", 3
On Error Resume Next
End With
Kill File_PDF
End If
iRow = iRow + 1
Loop
ActiveWorkbook.Worksheets("VS").Protect PWs
Err.Clear
Fehler:
End Sub
Damit wird eine PDF Aus Excel erstellt und an bestimmte Emailadressen versendet. Dancah wird die Email gespeichert.
Eine Frage bleibt dennoch offen.
Mit dem Code
Set .SendUsingAccount = .Session.Accounts.Item(2)
Wird der Emailaccount ausgewählt. In dem Fall habe ich zwei Accounts und der anzusprechende Account ist der zweite.
Was ist aber wenn ich auf einem anderen PC nur einen Account habe, der aber genauso heisst wir der Orginal Account? Funktioniert das dann noch? Ich denke fast nicht oder?
Kann man den Bezug auf den Account von der laufenden Nummer (hier 2) ändern auf den Acoountnamen? Dieser bleibt immer gleich.
Besten Dank für die Hilfe.

Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 11:39:27
mumpel
Hallo!
Sprich den Account mit seinem Namen an, nicht mit dem Index. Also Set .SendUsingAccount = .Session.Accounts.Item("Kontoname")
Gruß, René

AW: Aus Excel definierten Email account ansprechen
11.09.2015 11:51:07
matthias
mhm hätte es so versucht, aber dann bringt er mir einen Fehler. (ungültiger prozeduraufruf)
Ich denke hier muss noch was angepasst werden?
Hat jemand eine idee?

Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 12:24:45
mumpel
Eine solche Fehlermeldung kann ich nicht reproduzieren. Was genau gibst Du denn als Namen an?

AW: Aus Excel definierten Email account ansprechen
11.09.2015 15:19:14
matthias
Ich gebe den Namen des Emails Konto an. Unter dem dann der Posteingang etc. aufgeführt wird.

AW: Aus Excel definierten Email account ansprechen
11.09.2015 15:53:52
mumpel
Dann müsste es eigentlich funktionieren.

Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 15:58:01
Michael
Hi zusammen,
ich habe zwar null Ahnung von OL, aber es scheint, als würde .item eine Nummer erwarten anstelle eines Namens.
Versuch's mal mit Set .SendUsingAccount = .Session.Accounts("Kontoname")
und siehe http://www.office-loesung.de/ftopic433162_0_0_asc.php
Schöne Grüße,
Michael

Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 16:02:56
mumpel
Eigentlich müsste es mit "Session.Accounts.Item" funktionieren, egal ob man den Index angibt oder den Namen.

AW: Aus Excel definierten Email account ansprechen
11.09.2015 16:47:25
mumpel
Hier mal ein Beispiel in dem zuvor der Index ausgelesen wird.
Sub MailTest()

Dim olApp     As Outlook.Application
Dim olAcc     As Long
Dim olItem    As Long
Dim olOldBody As String

Set olApp = CreateObject("Outlook.Application")


olItem = 1

For olAcc = 1 To olApp.Session.Accounts.Count
    If olApp.Session.Accounts.Item(olAcc).DisplayName = "Kontoname" Then Exit For
    olItem = olItem + 1
Next olAcc


       
      With olApp.CreateItem(0)
            Set .SendUsingAccount = .Session.Accounts.Item(olItem)
                .GetInspector.Display
                olOldBody = .HTMLBody
                .To = "test@server.de"
                .Subject = "Test"
                .HTMLBody = "Hallo,<br><br>nur ein Test." & _
                            "<br><br>Gruß, Max" & olOldBody
      End With
      
      
End Sub

CodeConverter für Office-Foren, AddIn für Excel/Word 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung durch mumpel

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 19:24:16
matthias
Hallo,
funktioniert auch nicht.
Ich habe eine Exchange Konto in Outlook das auch Postfach heisst und mit einem Symbol das ein Haus zeigt.
Meine externe Emailadresse hat ein ganz anderes Symbol(Aktenschublade)
Kann es sein, dass meine zweite Emailadresse gar keine Postfach ist sondern einfach nur eingebunden ist in das Exchange Konto?
Wenn ich nämlich emails versenden gehen die zuerst in den Postausgang des Exchange Postfaches und dann erst in den Ordner Gesendete Element von der zweiten Emailadresse.
Kann es sein, dass dadurch ein Problem entsteht?
Wenn ja wie löse ich das?

Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 19:58:40
mumpel
Bei Exchange funktioniert SendUsingAccount nicht. Da musst Du mit SentOnBehalfOfName arbeiten.

AW: Aus Excel definierten Email account ansprechen
11.09.2015 20:52:00
matthias
Ist es irgendwie möglich das variabel zu gestalten
sprich entweder
SentOnBehalfOfName wenn ein exchange konto angelegt ist
oder
SendUsingAccount
wenn keins angelegt ist?

Anzeige
AW: Aus Excel definierten Email account ansprechen
11.09.2015 21:23:56
mumpel
Da ich kein Exchange habe kann ich diesbezüglich nichts testen.
Einfach mit einem Error-Handling versuchen.
;
Anzeige
Anzeige

Infobox / Tutorial

Aus Excel definierten Email-Account ansprechen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel: Stelle sicher, dass du die richtige Arbeitsmappe geladen hast.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineArbeitsmappe)" und wähle "Einfügen" > "Modul".

  4. Code einfügen: Kopiere den folgenden VBA-Code in das Modul:

    Sub SeriendruckVS()
       ' Dimensionierung der Variablen
       Dim OutlookApp As Object
       Dim strEmail As Object
       Dim iRow As Integer
       Set OutlookApp = CreateObject("Outlook.Application")
       Set strEmail = OutlookApp.CreateItem(0)
    
       ' Beispielhafte Adressierung
       With strEmail
           Set .SendUsingAccount = .Session.Accounts.Item("DeinKontoname") ' Hier den Kontonamen angeben
           .To = "beispiel@domain.de"
           .Subject = "Betreff hier"
           .Body = "Nachricht hier"
           .Send
       End With
    End Sub
  5. Kontonamen anpassen: Stelle sicher, dass du DeinKontoname durch den tatsächlichen Namen deines Email-Accounts ersetzt.

  6. Makro ausführen: Drücke F5, um das Makro auszuführen.


Häufige Fehler und Lösungen

  • Ungültiger Prozeduraufruf: Wenn du den Kontonamen nicht korrekt angegeben hast, wird dieser Fehler angezeigt. Stelle sicher, dass der Name exakt mit dem in Outlook übereinstimmt.

  • Fehler bei Exchange-Konten: Wenn du mit einem Exchange-Konto arbeitest, funktioniert .SendUsingAccount möglicherweise nicht. Verwende stattdessen:

    .SentOnBehalfOfName = "DeinExchangeKonto"

Alternative Methoden

Falls du den Email-Account nicht über den Namen ansprechen kannst, kannst du die Accounts auslesen und den gewünschten Namen dynamisch zuweisen. Beispiel:

Dim olAcc As Long
Dim accountName As String
accountName = "DeinKontoname"

For olAcc = 1 To OutlookApp.Session.Accounts.Count
    If OutlookApp.Session.Accounts.Item(olAcc).DisplayName = accountName Then
        Set .SendUsingAccount = .Session.Accounts.Item(olAcc)
        Exit For
    End If
Next olAcc

Praktische Beispiele

Hier ist ein Beispiel, wie du den Code anpassen kannst, um den Email-Account basierend auf dem Namen zu wählen:

Dim olItem As Long
Dim accountName As String
accountName = "DeinKontoname"

For olAcc = 1 To OutlookApp.Session.Accounts.Count
    If OutlookApp.Session.Accounts.Item(olAcc).DisplayName = accountName Then
        olItem = olAcc
        Exit For
    End If
Next olAcc

With OutlookApp.CreateItem(0)
    Set .SendUsingAccount = .Session.Accounts.Item(olItem)
    .To = "beispiel@domain.de"
    .Subject = "Betreff hier"
    .Body = "Nachricht hier"
    .Send
End With

Tipps für Profis

  • Error-Handling implementieren: Füge Error-Handling hinzu, um Probleme beim Senden von Emails zu erkennen und zu behandeln. Beispiel:

    On Error GoTo Fehler
    ' Dein Code hier
    Exit Sub
    Fehler:
    MsgBox "Fehler beim Senden der Email: " & Err.Description
  • Überprüfung von Konten: Überprüfe vor dem Senden, ob der gewünschte Account tatsächlich existiert, um Laufzeitfehler zu vermeiden.


FAQ: Häufige Fragen

1. Warum funktioniert .SendUsingAccount nicht bei meinem Exchange-Konto? Weil Exchange-Konten in Outlook eine spezielle Handhabung benötigen. Verwende stattdessen .SentOnBehalfOfName.

2. Kann ich den Account dynamisch wählen? Ja, du kannst die Liste der Accounts durchlaufen und den gewünschten über den Namen auswählen, wie im Beispiel gezeigt.

3. Was passiert, wenn der Kontoname nicht eindeutig ist? Wenn mehrere Konten denselben Namen haben, wird der erste gefundene Account verwendet. Stelle sicher, dass die Namen eindeutig sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige