Datei anhängen und den Dateinamen in Email-Text eintragen

Ryan1991

Grünschnabel
Hallo
Ich habe ein Problemchen mit einem Outlook 2010 Makro-Skript.

Ich würde gerne über ein neues Menüband ein Makro hinterlegen, das mit in einer Email nicht nur eine Datei anhängt, sondern auch z.B "Anhang: Dateiname.Dateiendung"
in den Email-Text einträgt.

Ich hoffe mir kann jemand helfen,
ich habe leider keine Ahnung von VBA...

MfG
Ryan1991
 

HonniCilest

Erfahrenes Mitglied
Das könnte etwa so aussehen:
Code:
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Public Function MyOpenFiledialog() As String
    Dim MyDialog As OPENFILENAME
    
    MyDialog.lStructSize = Len(MyDialog)
    MyDialog.lpstrFilter = "Text Files (*.txt)" + Chr$(0) + "*.txt" + Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)
    MyDialog.lpstrFile = Space$(254)
    MyDialog.nMaxFile = 255
    MyDialog.lpstrFileTitle = Space$(254)
    MyDialog.nMaxFileTitle = 255
    MyDialog.lpstrInitialDir = "C:\"
    MyDialog.lpstrTitle = "Open File"
    MyDialog.flags = 0
    
    If GetOpenFileName(MyDialog) Then
        MyOpenFiledialog = Trim$(MyDialog.lpstrFile)
    Else
        MyOpenFiledialog = vbNullString
    End If
End Function

Public Sub MyAttach()
    Set myItem = Application.CreateItem(olMailItem)
    Set myAttachments = myItem.Attachments
    myFile = MyOpenFiledialog()
    myAttachments.Add myFile
    myItem.Body = "Anhang: " & myFile
    myItem.Display
End Sub
 

Ryan1991

Grünschnabel
Hay Honni,
Vielen dank für deine Hilfe.
Ich habe den Quellcode mal ausprobiert, und dierekt den ersten auftretenden Fehler: "Private Declare Function GetOpenFileName Lib "comdlg32.dll"" behoben, da ich eine 64-bit version von Outlook verwende.

Nun tritt leider ein neuer Fehler auf, mit dem ich nicht zurecht komme... -.-


Code:
Public Sub MyAttach()
    Set myItem = Application.CreateItem(olMailItem)
    Set myAttachments = myItem.Attachments
    myFile = MyOpenFiledialog() <<< Fehler: -2147024893 (80070003)': Der Pfad ist nicht vorhanden...
    myAttachments.Add myFile
    myItem.Body = "Anhang: " & myFile
    myItem.Display
End Sub

Vielleicht kannst du mir da ja noch einmal helfen?!
Oder jemand anderes?!

Schonmal Danke im vorraus
MfG
Ryan1991
 

Ryan1991

Grünschnabel
hmm,
eine 32-bit Version von Outlook 2010 würde alles viel leichter machen ;D
So wie ich das sehe, ist der SMTP-pickup-Verzeichnis-Pfad falsch...
Jetzt ist das problem, ich nutze nicht IIS, sondern das läuft alles über einen Exchange Server.
...
 

Ryan1991

Grünschnabel
hmm...
es öffnet sich einfach nicht das Dialog fenster, wo man die jeweilige datei aussuchen kann...
Desshalb beschwert sich der Compiler auch, das er den Pfad nicht findet, denn beim debuggen habe ich gesehen, das er einfach in der Funktion auf "else" springt und dann die Datei leert, somit kann es auch keinen pfad in der myfile variable geben...

Nun ist die frage, wie muss ich den quelltext auf Outlook 2010 64 bit Basis umschreiben, damit sich das fenster öffnet?!

MfG
Ryan1991
 

HonniCilest

Erfahrenes Mitglied
Laut Google folgende Zeilen:
Code:
Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _
    Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Boolean

hwndOwner As LongPtr
hInstance As LongPtr
lpfnHook As LongPtr

MyDialog.lStructSize = LenB(MyDialog)
 
Zuletzt bearbeitet:

Ryan1991

Grünschnabel
Juhuu, es Funktioniert (teilweise)

Wenn ich jetzt compiliere, bekomme ich die Dateiauswahl, kann eine datei auswählen, aber der erstellt immer eine neu Email...
ist es auch machbar das man das Menüband nur in der geöffneten email (die z.B gerade geschrieben wurde) verwenden kann?!
so wie beim normalen "Datei anfügen"
 

Ryan1991

Grünschnabel
Hat sich schon erledigt!

Jetzt muss der eingefügte Text nur noch an die Cursorposition, damit mir nicht immer die ganze Email, samt Signatur gelöscht wird.

Honni Ich danke dir für deine Geduld mit mir ;D