Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hallo liebe Excelgemiende,
benötige mal wieder Eure Hilfe bei folgendes Problem:
In eine exceldatei habe ich ab Zeile 2 ins Spalte B Lieferscheinnummern und in Spalte C Rechnungsnummern immer verschiedene Anzahl. Die Lieferscheine dazu und Rechnungen sind in einen bestimmten Ordner abgelegt als PDF Dateien, mit anderen dateien. Nun möchte ich per VBA auf Knopfdruck, dass sämtliche Rechnungen und Lieferscheine die in der Exceldatei aufgeführt sind die PDF Dateien dazu, gesucht, ausgedruckt werden und anschliessend als Mailanhang versendet werden!
Ich hoffe Ihr versteht was ich meine!? ?
Vielen lieben Dank im Voraus!!
LG
Alexandra
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Alexandra,
ich will ja nicht unhöflich sein, aber hast Du dazu mal unsere Suche oben rechts benutzt? pdf und Anhang hatten wir schon häufig behandelt. pdf und drucken eventuell auch, da bin ich mir nicht ganz sicher.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
13.08.2020, 08:33
(Dieser Beitrag wurde zuletzt bearbeitet: 13.08.2020, 09:10 von schauan.
Bearbeitungsgrund: Änderung Codeanzeige
)
Hallo Andre,
danke für deine Antwort, ich habe natürlich die Suche genutzt und das hier mir für die Anhänge gebastelt:
Code: Private Sub MailErzeugen()
Wahl = MsgBox("Exportdokumente senden?", vbYesNo)
If Wahl <> 6 Then Exit Sub
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add Range("H1").Value
.Subject = "Exportdokumente Sendung " & Range("C1").Text & ", " & Range("C2").Text & " " & Range("C4").Text & " - " & Range("C3").Text
.GetInspector.display
.ReadReceiptRequested = True
.Attachments.Add "c:\Temp123\" & "LS" & Range("A6") & ".PDF"
.Attachments.Add "c:\Temp123\" & "RE" & Range("C6") & ".PDF"
If Range("F1") = "x" Then .display
If Range("F1") <> "x" Then .Send
'.Send
MsgBox ("Exportdokumente zur Sendung " & Range("C1") & " wurden erfolgreich gesendet!")
End With
Set olApp = Nothing
End Sub
Das fügt mir die PDF Dateien mit den Namen die im A6 und C6 stehen entsprechend in eine Mail ein und versendet diese, das funktioniert! Aber wie kann ich das flexibel gestalten, daß der Code die ganzen Lieferschein und Rechnungen sucht die in der jeweiligen Spalte aufgeführt sind sucht, druckt und als Mailanhang dann versendet. Und vor allem, was wenn mal eine Datei nicht gefunden wird!? Zum Thema drucken der PDFs habe ich leider nichts gefunden!?
Kann mir jemand mit dem Code helfen?
Vielen Dank
LG
Alexandra
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hi Alexandra,
da muss eine Schleife drumherum oder Du hast ein Startmakro, wo Du den Mailexport mit den entsprechenden Parametern aufrufst.
Eine Schleife könnte so aussehen:
Dim iCnt%
iCnt=2 'Bei Eintraegen ab Zeile 2
'Schleife solange in A nicht nix steht, oder 8 für Spalte H und dann aber mit dem Startwert iCnt = 1
Do While Cells(iCnt, 1).Value <> ""
'Ende Schleife solange in A nicht nix steht
Loop
Dann setzt Du den Range zusammen, ich bleib jetzt mal bei "meinem" A: Range("A" & iCnt)
Mir ist jetzt nur nicht klar ob Du mehrere E-Mails an verschiedene Empfänger senden willst oder an einen Empfänger mehrere verschiedene Anhänge.
Wenn es verschiedene Empfänger sind, käme die Schleife um das With / End With außen herum. Geht's nur um mehrere Anhänge dann nur um die Zeilen mit den Anhängen.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hallo Andre,
vielen Dank für dein Antwort. Es sollen alle Rechnungen und Lieferscheine die in der Exceldatei aufgeführt sind an einen Empfänger versendet werden!
Könntest du mir evtl. den ganzen Code für eine Spalte mal schreiben mit finden der Dateien, Drucken und Versenden, ich würde Ihn dann für die anderen Spalten erweitern und anpassen!?
Wärst du so nett? Ich war schon mal etwas tiefer drin im Excel VBA aber seit über 1 Jahr leider nichts mehr damit gemacht und leider entsprechend alles wieder verlernt! :(
Für Dich ist es wahrscheinlich ein Klacks!
Wäre wirklich sehr dankbar!
LG
Alexandra
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hi Alexandra,
hier erst mal der Teil mit den Anhängen, kannst mal schauen, ob das so passt.
Code: Option Explicit
Private Sub MailErzeugen()
Wahl = MsgBox("Exportdokumente senden?", vbYesNo)
If Wahl <> 6 Then Exit Sub
Dim olApp As Object
Dim iCnt% 'Schleifenzaehler
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add Range("H1").Value
.Subject = "Exportdokumente Sendung " & Range("C1").Text & ", " & Range("C2").Text & " " & Range("C4").Text & " - " & Range("C3").Text
.GetInspector.display
.ReadReceiptRequested = True
iCnt = 6 'Bei Eintraegen ab Zeile 6
'Schleife solange in A nicht nix steht
Do While Cells(iCnt, 1).Value <> ""
'wenn Datei vorhanden, dann
If Dir("c:\Temp123\LS" & Range("A" & iCnt) & ".PDF") <> "" Then
'Anhang hinzufuegen
.Attachments.Add "c:\Temp123\LS" & Range("A" & iCnt) & ".PDF"
'Ende wenn Datei vorhanden, dann
End If
'wenn Datei vorhanden, dann
If Dir("c:\Temp123\RE" & Range("C" & iCnt) & ".PDF") <> "" Then
'Anhang hinzufuegen
.Attachments.Add "c:\Temp123\RE" & Range("C" & iCnt) & ".PDF"
'Ende wenn Datei vorhanden, dann
End If
'Ende Schleife solange in A nicht nix steht
Loop
If Range("F1") = "x" Then .display
If Range("F1") <> "x" Then .Send
'.Send
MsgBox ("Exportdokumente zur Sendung " & Range("C1") & " wurden erfolgreich gesendet!")
End With
Set olA
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Edit:
da wäre noch eine Frage. Öffnest Du pdf standardmäßig mit dem AdobeReader oder einem anderen pdf Reader oder mit dem Browser?
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hi Andre,
ich öffne die PDFs mit Acrobat Reader Standard.
Deine Schleife läuft unendlich weiter!? :)
LG
Alexandra
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
Zitat:Deine Schleife läuft unendlich weiter!?
peinlich, peinlich
da fehlt vor dem Loop noch ein iCnt=iCnt+1 und am Ende ist auch noch was abgerutscht
Mit Druck sieht es so aus. Hab den Druck aber nur extra getestet und nicht hier im Makro
Code: Option Explicit
'API fuer Anwendungsaufruf
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
(ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Sub MailErzeugen()
Wahl = MsgBox("Exportdokumente senden?", vbYesNo)
If Wahl <> 6 Then Exit Sub
Dim olApp As Object
Dim iCnt% 'Schleifenzaehler
Dim strFile$ 'Dateiname
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add Range("H1").Value
.Subject = "Exportdokumente Sendung " & Range("C1").Text & ", " & Range("C2").Text & " " & Range("C4").Text & " - " & Range("C3").Text
.GetInspector.display
.ReadReceiptRequested = True
iCnt = 6 'Bei Eintraegen ab Zeile 6
'Schleife solange in A nicht nix steht
Do While Cells(iCnt, 1).Value <> ""
'dateiname 1
strFile = "c:\Temp123\LS" & Range("A" & iCnt) & ".PDF"
'wenn Datei vorhanden, dann
If Dir(strFile) <> "" Then
'Anhang hinzufuegen
.Attachments.Add strFile
'Drucken
ShellExecute 0, "print", strFile, "", "", 0
'Ende wenn Datei vorhanden, dann
End If
'dateiname 2
strFile = "c:\Temp123\RE" & Range("C" & iCnt) & ".PDF"
'wenn Datei vorhanden, dann
If Dir(strFile) <> "" Then
'Anhang hinzufuegen
.Attachments.Add strFile
'Drucken
ShellExecute 0, "print", strFile, "", "", 0
'Ende wenn Datei vorhanden, dann
End If
'Schleifenzaehler hochsetzen
iCnt = iCnt + 1
'Ende Schleife solange in A nicht nix steht
Loop
If Range("F1") = "x" Then .display
If Range("F1") <> "x" Then .Send
'.Send
MsgBox ("Exportdokumente zur Sendung " & Range("C1") & " wurden erfolgreich gesendet!")
End With
Set olApp = Nothing
End Sub
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 27.04.2014
Version(en): Privat: Office Home & Business 2019 / Arbeit: MS365
Hallo Andre,
vielen Dank schon mal, sieht schon sehr gut aus! Ich werde morgen versuchen den Code auf all meine Bedürfnisse anzupassen und melde mich dann wieder!
Aufgefallen ist mir beim Testen, dass die PDF gedruckt werden aber der Acrobat Reader nach dem Drucken offen bleibt? Kann man das ändern, AR nach dem Drucken geschlossen wird? Und eine zweite Frage, der Code orientiert sich nach Spalte A, wenn jetzt aber in Spate A nur zwei Lieferscheine stehen und in Spate C 3 oder mehr dann hört der Code nach der zweiten Rechnungsnummer auf?
Vielen lieben Dank bisher!
LG
Alexandra
|