PDA

Vollständige Version anzeigen : "Diese Blatt senden"


Uppe
17.03.2009, 12:54
Hallo Experten,

wenn man ein Arbeitsblatt über Mail versenden will, gibt es den Button "Dieses Blatt senden". Wenn man im Arbeitsblatt einen Bereich markiert, heißt der Button "Aktuelle Auswahl senden".

Wie kann ich erreichen, dass immer das gesamte Tabellenblatt verschickt wird? (Der Anwender muss den Button aber selber drücken)

Danke und Gruß
Uppe

mumpel
17.03.2009, 13:54
Hallo!

Hier mal ein Beispiel. Dieses liegt in zwei Versionen vor. Einmal für Excel 2007 und einmal für Excel 2000-2003.

Gruß, René

mumpel
17.03.2009, 14:23
Hier noch eine Version für Word 2007 und Word 2000-2003. Für alle, die es interessiert. Habe ich mal auf die Schnelle erstellt.

Noch ein wichtiger Hinweis:

Der Makrocode in den 4 Beispieldateien wurde in Office 2007 erstellt.

gemedo
17.03.2009, 15:03
hallo
ich habe in excel ein bestellformular gemacht und möchte nun, dass dieses vom kunden ausgefüllte formular automatisch per mail an mich gesendet werden kann.
da ich nur bescheidene excel-erfahrung habe, kann mir ein profi unter euch sicher weiterhelfen.

vielen dank schon im voraus

gemedo


hallo mumpel

könnte dein vorschlag die lösung für meine frage sein?

gruss gemedo

Uppe
17.03.2009, 15:21
Hallo René,

leider helfen mir Deine Ausführungen nicht so richtig weiter, oder ich sehe den Wald vor lauter Bäumen nicht.

Ich habe durch diverse Userforms vom User Daten erfragt und stelle damit ein Datenblatt zusammen und starte den "Datei - Senden an - Email-Empfänger - Sendet das aktuelle Blatt als Textkörper" - Dialog. Mailempfänger, Betreffzeile usw. wurden ebenfalls vom User vorher gewählt und sind schon eingetragen.

Danach wird das Mail mit dem Button "Dieses Blatt senden" vom User verschickt.
Der User soll aber die Möglichkeit haben auf dem Tabellenblatt nachträglich evtl. noch etwas zu verändern. Wenn er das aber macht, wird nur die aktuelle Auswahl versendet und nicht mehr das gesamte Datenblatt.

Kann man prüfen, wie der gedrückte Button heißt?

Gruß Uppe

mumpel
17.03.2009, 16:00
Hallo!

@ Uppe

Müsste ich mal probieren. Du könntest aus meinem Beispiel nur den für Dich notwendigen Code herauskopieren. Und eventuell anpassen, wenn nur der geänderte Bereich versendet werden soll. Vielleicht postest Du mal eine Beispielmappe. Dann kann ich mir das mal anschauen. Wird aber erst morgen etwas, muss jetzt ehrenamtlich kurz weg.

@ gemedo

Das automatische Versenden der Email habe ich noch nie gemacht. Soetwas sollte man auch niemals ohne Einverständis des Kunden machen. Der Kunde sollte schon wissen, was mit seinem Emailkonto passiert. Daher sollte der Kunde das Versenden des Formulars manuell anstoßen.

Gruß, René

Uppe
17.03.2009, 16:18
Hallo René,

mit diesem Code will ich das zusammengebastelte Datenblatt versenden:

Sub Mail_erzeugen
ThisWorkbook.Activate
Worksheets(2).Select
ActiveWorkbook.EnvelopeVisible = True
With ActiveSheet.MailEnvelope.Item
.Categories=Kategorie
.SentOnBehalfOfName = "****"
.To = Empfänger
.Subject = Betreff
.Display
End With
End Sub
Wäre schön, wenn Dir dazu was einfällt. Ich suche schon so lange nach einer Möglichkeit, die Fehlerquelle auszuschließen, dass Anwender nicht das gesamte Arbeitsblatt schicken, sondern nur 5 markierte Zellen :-(

Danke und Gruß
Uppe

mumpel
17.03.2009, 17:18
Hier mal ein Beispielmakro. Mit diesem wird geprüft, wieviele Zellen markiert sind. Bei mehr als 5 markierten Zellen wird eine Fehlermeldung ausgegeben.
<blockquote><pre style='border:thin solid #C0C0C0; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> test() <span style='color:#0000EE'>If</span> Selection.Count > <span style='color:#DDAA00'>5</span> <span style='color:#0000EE'>Then</span> MsgBox <span style='color:#FF0000'>"Zuviele Zellen markiert"</span> <span style='color:#0000EE'>Else</span> MsgBox <span style='color:#FF0000'>"Alles richtig"</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>If</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre></blockquote>
Code eingefügt mit VBA in HTML 2.0 (http://vbahtml.origo.ethz.ch)

Mit dem folgenden Beispielmakro wird geprüft, welche Zeile markiert wurde. Wurde Zeilen 1 bis 7 markriert bzw. mitmarkiert, wird eine entsprechende Meldung erzeugt. Ist alles richtig, werden Zeilen eingefügt. Vielleicht kannst Du damit etwas anfangen.
<blockquote><pre style='border:thin solid #C0C0C0; padding:12px 24px; margin-left:12px; color:#000000'><span style='color:#0000EE'>Sub</span> ZeilenEinfügen(control <span style='color:#0000EE'>As</span> IRibbonControl) <span style='color:#0000EE'>On</span> <span style='color:#0000EE'>Error</span> <span style='color:#0000EE'>GoTo</span> Fehler ActiveSheet.Unprotect <span style='color:#FF0000'>"Kennwort"</span> <span style='color:#0000EE'>If</span> Selection.Row <= <span style='color:#DDAA00'>8</span> <span style='color:#0000EE'>Then</span> MsgBox <span style='color:#FF0000'>"Diese Zeilen dürfen nicht gelöscht oder verschoben werden."</span>, vbOKOnly + vbExclamation, <span style='color:#FF0000'>"Achtung!"</span> <span style='color:#0000EE'>Else</span> Selection.EntireRow.Rows.Insert <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>If</span> ActiveSheet.Protect <span style='color:#FF0000'>"b4X29pL340D"</span> <span style='color:#0000EE'>Exit</span> <span style='color:#0000EE'>Sub</span> Fehler: ActiveSheet.Protect <span style='color:#FF0000'>"Kennwort"</span> MsgBox <span style='color:#FF0000'>"Diese Zeilen dürfen nicht gelöscht oder verschoben werden."</span>, vbOKOnly + vbExclamation, <span style='color:#FF0000'>"Achtung!"</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span></pre></blockquote>
Code eingefügt mit VBA in HTML 2.0 (http://vbahtml.origo.ethz.ch)

Mit dem folgenden Code kann man einen markierten Zellbereich im Mailbody einfügen. Ist aber nur in Outlook getestet. Die Funktion RangeToHtml sollte nicht geändert werden.
<blockquote>
<pre style='border:thin solid #C0C0C0; padding:12px 24px; margin-left:12px; color:#000000; overflow:auto; height:250px; '><span style='color:#0000EE'>Sub</span> SendeEmail() <span style='color:#0000EE'>Dim</span> olapp <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> rng <span style='color:#0000EE'>As</span> Range <span style='color:#0000EE'>Set</span> olapp = CreateObject(<span style='color:#FF0000'>"Outlook.Application"</span>) <span style='color:#0000EE'>With</span> olapp.CreateItem(<span style='color:#DDAA00'>0</span>) <span style='color:#0000EE'>Set</span> rng = Selection .To = <span style='color:#FF0000'>"empfänger@testserver.test"</span> .CC = <span style='color:#FF0000'>""</span> <span style='color:#008000'>'Optional Kopie </span> .BCC = <span style='color:#FF0000'>""</span> <span style='color:#008000'>'Optional Blidnkopie </span> .Subject = <span style='color:#FF0000'>"Test"</span> <span style='color:#008000'>'Optional Betreff </span> <span style='color:#0000EE'>Rem </span><span style='color:#008000'>HTML-Body erzeugen. Mit "<br>" wird ein Zeilenumbruch erzeugt </span> .htmlBody = <span style='color:#FF0000'>"Test<br><br><br>"</span> & RangetoHTML(rng) .display <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>Set</span> rng = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>Set</span> olappp = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Sub</span> <span style='color:#0000EE'>Function</span> RangetoHTML(rng <span style='color:#0000EE'>As</span> Range) <span style='color:#0000EE'>Dim</span> Fso <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> ts <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>Object</span> <span style='color:#0000EE'>Dim</span> TempFile <span style='color:#0000EE'>As</span> <span style='color:#0000EE'>String</span> <span style='color:#0000EE'>Dim</span> TempWB <span style='color:#0000EE'>As</span> Workbook TempFile = Environ$(<span style='color:#FF0000'>"temp"</span>) & <span style='color:#FF0000'>"/"</span> & Format(Now, <span style='color:#FF0000'>"dd-mm-yy h-mm-ss"</span>) & <span style='color:#FF0000'>".htm"</span> rng.Copy <span style='color:#0000EE'>Set</span> TempWB = Workbooks.Add(<span style='color:#DDAA00'>1</span>) <span style='color:#0000EE'>With</span> TempWB.Sheets(<span style='color:#DDAA00'>1</span>) .Cells(<span style='color:#DDAA00'>1</span>).PasteSpecial Paste:=8 .Cells(<span style='color:#DDAA00'>1</span>).PasteSpecial xlPasteValues, , <span style='color:#0000EE'>False</span>, <span style='color:#0000EE'>False</span> .Cells(<span style='color:#DDAA00'>1</span>).PasteSpecial xlPasteFormats, , <span style='color:#0000EE'>False</span>, <span style='color:#0000EE'>False</span> .Cells(<span style='color:#DDAA00'>1</span>).Select Application.CutCopyMode = <span style='color:#0000EE'>False</span> <span style='color:#0000EE'>On</span> <span style='color:#0000EE'>Error</span> <span style='color:#0000EE'>GoTo 0</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>With</span> TempWB.PublishObjects.Add( _ SourceType:=xlSourceRange, _ Filename:=TempFile, _ Sheet:=TempWB.Sheets(<span style='color:#DDAA00'>1</span>).Name, _ Source:=TempWB.Sheets(<span style='color:#DDAA00'>1</span>).UsedRange.Address, _ HtmlType:=xlHtmlStatic) .Publish (<span style='color:#0000EE'>True</span>) <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>With</span> <span style='color:#0000EE'>Set</span> Fso = CreateObject(<span style='color:#FF0000'>"Scripting.FileSystemObject"</span>) <span style='color:#0000EE'>Set</span> ts = Fso.GetFile(TempFile).OpenAsTextStream(<span style='color:#DDAA00'>1</span>, -2) RangetoHTML = ts.readall ts.Close RangetoHTML = Replace(RangetoHTML, <span style='color:#FF0000'>"align=center x:publishsource="</span>, _ <span style='color:#FF0000'>"align=left x:publishsource="</span>) TempWB.Close savechanges:=False Kill TempFile <span style='color:#0000EE'>Set</span> ts = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>Set</span> Fso = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>Set</span> TempWB = <span style='color:#0000EE'>Nothing</span> <span style='color:#0000EE'>End</span> <span style='color:#0000EE'>Function</span></pre>
</blockquote>
Code eingefügt mit VBA in HTML 2.0 (http://vbahtml.origo.ethz.ch)