Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1760to1764
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
Button mit weiterer "Vorgehensweise?"
02.06.2020 22:12:45
Sco
Hallo!
Ich habe eine Excel File mit 3 Mappen.
Deckblatt (1)
Protokoll (2)
Zeichnung (3)
Wenn ich die Datei öffne, öffnet sich erst das Protokoll (2)
Da habe ich 2 Buttons. 1.= I.O. von (1) & (2) wird ein PDF erstellt und die Datei schließt sich.
Mit dem 2ten Button möchte ich folgendes:
Klicke ich drauf, will ich eine Frage, ob ich das Deckblatt (1) ausfüllen möchte oder die gesamte Excel File weiterleiten möchte.
Wähle ich "selber ausfüllen" aus, soll sich das Deckblatt (1) öffnen Zeile A1:A1.
Wähle ich "weiterleiten" soll sich Outlook öffnen, die ganze Datei in Outlook als Anhang angehangen werden und man nur noch den Empfänger und ggf. noch Text in der Mail eingeben.
Wie sieht hierzu der Code aus?

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 00:12:29
Felix
HiHi,
du kannst entweder eine MSGBox mit 2 Knöpfen nehmen oder wenn du die Knöpfe selbst beschriften willst eine Userform erstellen.
Die Antwort der MSGBox legst du auf eine Variable, zB.
answ = MsgBox("Wenn Sie dads Deckblatt füllen wollen, clicken Sie 'Ja', wenn Sie die Datei per  _
E-mail weiterleiten möchten 'Nein'", Buttons:=vbYesNoCancel)
If answ = 6 Then
Sheets(1).Activate
Sheets(1).Range("A1").Select
Else If answ = 7 Then
Call sendFileAsMail
End If
End If

Damit würde man den E-mailVersand auf ein anderes Makro auslagern. Mach sich nur schöner
Beispiel für OutlookVersand ganz allgemein
Sub sendFileAsMail()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = "beispiel@bsp.de"
.Subject = "Betreff: ExcelDatei"
.Body = "Diese E-Mail sollte als Anhang " & Thisworkbook.Name & " enthalten."
.Attachments.Add 'vollständiger Dateipfad
.Display
End With
End Sub
Vlg Felix
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 11:37:11
volti
Hallo Sco Be,
hier eine weitere, alternative Lösung, bzw. ein Ansatz dazu, wenn Du keine Userform erstellen willst und trotzdem eine eigene Beschriftung der Buttons einer MsgBox möchtest:
Wegen des umfangreichen codes (Modul MsgBox_64, kein Anpassungsbedarf durch Dich) habe ich Dir das mal in eine Beispielmappe eingebaut. Die Grund-Sub im Modul1 kannst Du ja bei Bedarf noch anpassen.
MsgBoxEx.xlsb
viele Grüße
Karl-Heinz
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 14:23:58
Sco
@Karl-Heinz
.hHook = SetWindowsHookEx(5, AddressOf MsgBoxHookProc, _
GetWindowLongPtr(Application.hwnd, GWL_HINSTANCE), GetCurrentThreadId())
schmeißt mir einen Fehler raus und es geht nicht weiter
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 15:03:36
volti
Hallo,
kann ich so nicht auflösen, bei mir läufts und der Code wurde auch schon öfter eingesetzt):
a) 32 Bit oder 64 Bit Betriebsystem ? (Tool erwartet 64 Bit, kann gerne auch beides anbieten)
b) Welcher Fehler? Fehlermeldung, Absturz, Steckenbleiben? Ggf. Screenshot
viele Grüße
Karl-Heinz
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 15:42:58
Sco
Wie auf dem Screenshot sieht das aus:
Userbild
Habe Win10 64-bit
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:00:05
Daniel
HI
mach aus dem roten Text mal eine Programmzeile, indem du den Zeilenumbruch löschst.
eine logische VBA-Codezeile muss im Editor auch in einer Text-Zeile stehen.
das erfordert manchmal ein wenig Nacharbeit, wenn man VBA-Code aus anderen Systemen wie einem Browser kopiert und einfügt, da hier, je nach Textfeldbreite, manchmal willkürlich Umbrüche eingefügt werden, die der VBA-Editor nicht verarbeiten kann.
wenn man im VBA-Editor eine logische Codezeile in mehrere Textzeilen aufteilen will, damit man im Editor nicht so scrollen muss, muss vor dem Umbruch (ENTER) ein Leerzeichen und ein Unterstrich stehen, damit der VBA-Edior weiß, dass die Codezeile in der nächsten Textzeile fortgeführt wird.
Gruß Daniel
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:21:42
volti
Hallo Daniel,
wohl wahr, Deine Ausführungen, danke dafür. Das passiert leider häufig hier im Forumscode....
Hier aber nicht zutreffend, da der Code ja aus der fertigen Exceldatei kommt und ich das bewusst aus den von Dir beschriebenen Gründen umgebrochen hatte.
Ich tippe eher, obwohl ich die gleiche Software wie der Fragende habe, auf den GetWindowLong(Ptr), für den die API drei Versionen vorrätig hat.
Mal sehen, ob's nun bei ihm geht....
VG KH
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:12:24
volti
Hallo,
ich habe hier auch Win10, 64 Bit, ist mir daher unverständlich.
Auf dem Screenshot ist nicht der "_" am Ende der ersten zeile zu sehen. Ist der weg? Aber dann würden ja nicht beide Zeile rot sein....
.hHook = SetWindowsHookEx(5, AddressOf MsgBoxHookProc, _
GetWindowLongPtr(Application.hwnd, GWL_HINSTANCE), GetCurrentThreadId())
Ich habe den code mal auf mehrere Variablen aufgezogen und einen erweiterten Declare eingefügt. Schau mal, wie es jetzt ist.
https://www.herber.de/bbs/user/137990.xlsb
viele Grüße
Karl-Heinz
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:24:44
Sco
Prima, das klappt jetzt!
Jetzt versuche ich noch, den Outlookversand einzubinden, dann bin ich zufrieden
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:27:52
volti
Sehr schön,
und danke für die Rückmeldung.
Das war auch für mich eine wichtige Info. Jetzt weiß ich, dass ich die eine Declare doppeln muss.
VG KH
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 16:43:21
Sco
Kannst du mir noch ein letztes Mal helfen?
Ich möchte diesen Code ausführen, wenn ich "weiterleiten" drücke:
Sub sendFileAsMail()
Dim objOutlook As Object
Dim objMail As Object
Set objOutlook = CreateObject("Outlook.Application")
Set objMail = objOutlook.CreateItem(0)
With objMail
.To = ""
.CC = "nameatname.name"
.Subject = "Prüfprotokoll " & ThisWorkbook.Name
.Body = "Siehe Datei im Anhang: " & ThisWorkbook.Name & vbNewLine & " Für Rückfragen stehe  _
ich zur Verfügung."
.Attachments.Add ActiveWorkbook.FullName 'vollständiger Dateipfad
.Display
End With
End Sub
Wo muss ich diesen einfügen, dass das so klappt?
Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 17:36:32
volti
Hallo,
ich hatte Dir ja schon eine komplette Mailversendung mit Empfängerabfrage und incl. Dateianhang und Signatur in den nachfolgenden Code (Modul1) gepackt, den Du auch noch anpassen kannst...
Wenn Du diesen trotzdem in einer Extra-Sub haben willst oder Deine Sub sendFileAsMail nehmen möchtest, ersetzt Du den gesamten Code zwischen case "Weiterleiten" und case else durch Call sendFileAsMail
.....
case "Weiterleiten"
Call sendFileAsMail
case else
.....

Sub MeineMsgBox()
 Dim sTo As String, sMailText As String, sSignatur As String
 
 Select Case MsgBoxEx("Möchtest Du das Deckblatt ausfüllen oder die Datei weiterleiten?", "Auswahl", _
            "&Deckblatt,&Weiterleiten,A&bbrechen", vbQuestion)
 
 Case "Deckblatt":
      With Sheets("Deckblatt")
       .Select
       .Range("A1").Select
      End With
 Case "Weiterleiten":
'Mail senden
   sTo = "eMail@web.de"
Nochmal:
   sTo = InputBox("Bitte den Empfänger eingeben!", "eMail senden", sTo)
   If StrPtr(sTo) = 0 Then Exit Sub
   If sTo = "" Then GoTo Nochmal
   If Not sTo Like "*@*.*" Then GoTo Nochmal
   sMailText = "Siehe Datei im Anhang: " & ThisWorkbook.Name _
             & "¶ Für Rückfragen stehe ich zur Verfügung.¶"
   With CreateObject("Outlook.Application").CreateItem(0)
    .To = sTo
    .Subject = "Betreff: ExcelDatei"
    .GetInspector:  sSignatur = .HTMLBody       'Signatur holen
    .HTMLBody = Replace(sMailText, "¶", "<br>") & sSignatur
    .Attachments.Add ThisWorkbook.FullName      'Datei in eMail einfügen
    .Display
   End With
  Case Else
    Exit Sub
  End Select
End Sub

viele Grüße
Karl-Heinz

Anzeige
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 20:21:47
Sco
Gut, hat geklappt :D
Nun will ich nur noch, dass die Datei im Anhang, so heißt wie im Code .Subject angegeben ist, dass eben die zu verschickende Excel File so heißt wie der Anhang.
Was muss ich am Code ändern?
AW: Button mit weiterer "Vorgehensweise?"
03.06.2020 22:25:05
volti
Hi,
ich gehe mal davon aus, dass Du Deine Sub sendFileAsMail meinst.
Dein Text ist nicht eindeutig: Nun will ich nur noch, dass die Datei im Anhang, so heißt wie im Code .Subject angegeben ist, dass eben die zu verschickende Excel File so heißt wie der Anhang.
Die zu verschickende Excel File heißt immer wie der Anhang.
Hier ist im Subject "Prüfprotokoll " & ThisWorkbook.Name, also die Datei, in dem das Makro steht, angeführt.
Versendet wird aber die gerade aktive Datei, .Attachments.Add ActiveWorkbook.FullName. Das kann die gleiche Datei sein, muss aber ncht.
Wenn Du die gleiche Datei, die auch im Subject angegeben ist, versenden willst, muss Du .Attachments.Add ThisWorkbook.FullName verwenden.
viele Grüße
Karl-Heinz
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige