Excel einzelenes Datenblatt mailen perVisual Basic

Hallo,

ich habe versucht einen Makro wie folgt zu erstellen.Bekomme immer die Antwort „subscript out of range“. Was mache ich falsch? Ich muss dazu sagen, dass ich soetwas das erste Mal probiere. Bin also Anfaenger.

Danke fuer Eure Hilfe!

Birgit :smile:

Sub Blatt_senden()
Sheets(„Tabelle1“).Copy
ActiveWorkbook.SendMail [A1], [B1]
Application.DisplayAlerts = False
ActiveWindow.Close
Application.DisplayAlerts = True
End Sub

Wobei in "[A1]"der Empfänger steht und in „[B1]“ der Betreff.

Hallo, Birgit!

ich habe versucht einen Makro wie folgt zu erstellen.Bekomme
immer die Antwort „subscript out of range“. Was mache ich
falsch? Ich muss dazu sagen, dass ich soetwas das erste Mal
probiere. Bin also Anfaenger.

Zunächst einmal kannst Du nicht nur eine Tabelle, sondern immer nur die ganze Datei verschicken. Dann lautet der Befehl

ActiveWorkbook.SendMail Tabelle1.Cells(1, 1), Tabelle1.Cells(2, 1)

Wobei Deine Routine bei mir auch läuft. Das Copy brauchst Du eigentlich nicht. Ich würde aber über .Cells verweisen; ist sauberer und „internationaler“ (sprich: hängt nicht von Länder- oder sonstigen Einstellungen hinsichtlich Bezugsart oder so ab) und somit sicherer.

Wenn Du nur eine Tabelle verschicken willst, musst Du sie vorher in eine neue Datei reinkopieren (oder alle anderen Blätter aus der Datei entfernen und die Datei nicht abspeichern).

Gruß, Manfred

hier muss ich dir ein klein wenig wiedersprechen.
es ist sehr wohl möglich einzelne Daten von Excel zu versenden ohne den anderen Inhalt der Arbeitsmappe.
das geht mit einem kltzekleinen Trick.
und der lautet:

Sub EmailVersand()
Dim rng As Range
Dim sAddress As String
Application.ScreenUpdating = False
Set rng = Range(„A3:F18“)
sAddress = Range(„B1“).Value
Workbooks.Add 1
rng.Copy Range(„A1“)
Columns.AutoFit
ActiveWorkbook.SendMail sAddress, „Test“
ActiveWorkbook.Close savechanges:=False
Application.ScreenUpdating = True
End Sub

übersetzt heist das ungefähr so:
markiere mir eine gewünschten bereich und kopiere ihn,erzeuge eine neue Arbeitsmappe und füge diesen bereich ein, sende nun diese Arbeitsmappe per E-mail an die vorgegebene Adresse, und lösche anschliessend die neu erstellte Mappe

du hast zwar im grossen und ganzen recht,das nur komplette Exceldateien versendet werden können,aber das ist auch ein weg um nur Teile davon zu verschicken.

mfg
Spaguzzi

Excel: Teile aus einer Tabelle per Mail versenden

hier muss ich dir ein klein wenig wiedersprechen.

Eigentlich nicht wirklich, denn…

ActiveWorkbook.SendMail sAddress, „Test“

Was verschickst Du hier? Et voila. Mein Reden. Natürlich geht es, nur partielle Auszüge zu verschicken. Wegen der Geschichte mit der ganzen Tabelle schrieb ich ja, hätte Birgit die Tabelle in ein leeres Workbook reinkopieren können/müssen, also nichts anderes als in Deinem Code. Trotzdem gut, dass Du auch noch mal den Code für einzelne Ranges einer Tabelle gepostet hast. Hilft sicherlich einigen weiter.

Gruß, Manfred

Klappt immer noch nicht!
Hallo,

erst einmal Danke fuer Eure Hilfe.

Wenn ich Spaguzzis Routine laufen lasse, klappt es nur leider kommen die Makros nicht mit. Bei dem worksheet, das ich senden moechte, handelt es sich um ein Formular, das auch Makros enthaelt. Wie kann ich die Makros mit ruebersenden?

Vielleicht sollte ich noch erwaehnen, das auf meinen Comuter, die englische Version von Office 2000 und Windows intalliert ist. Kann es daran liegen, das meine Routine nicht laeuft? Ich hatte auch schon die Fehlermeldung „Invalid use of property“.

Hoffe Ihr koennt mir helfen.

DANKE!

Birgit

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wenns noch nicht klappt
Hallo zusammen,

wenn’s noch nicht klappt, versuch es mal hiermit. Bei mir funktioniert
es prima.

Gruß

Rolf

Hier der Text:

Ohne weiteres ist der Versand eines einzelnen
Blattes nicht moeglich. Sie koennen aber ein VBA-Makro
schreiben, das 1.) das aktive Blatt in eine neue, temporaere
Arbeitsmappe kopiert, 2.) diese Mappe per E-Mail sendet und
3.) die temporaere Mappe wieder loescht.

Dazu geben Sie im Visual Basic-Editor folgenden Prozedurcode
ein (am besten in ein Modul der „Persoenlichen
Makroarbeitsmappe“, PERSONL.XLS):

Sub SendActiveSheet()
Dim objSourceWb As Workbook
Dim objNewWb As Workbook
Dim strSubjectline As String
Dim strRecipient As String
Dim strTempPath As String

On Error GoTo SendError
strSubjectline = InputBox _
(Prompt:=„Wollen Sie das aktive Blatt senden?“ & _
String(2, vbCr) & _
„Geben Sie eine Betreffzeile ein“ & _
" oder klicken Sie auf Abbrechen.", _
Title:=„Aktives Blatt senden“)
If strSubjectline „“ Then
strRecipient = InputBox _
(„Bitte E-Mail-Empfaenger eingeben:“, _
Title:=„Aktives Blatt senden“)
If strRecipient „“ Then
Application.ScreenUpdating = False
Set objSourceWb = ActiveWorkbook
ActiveSheet.Copy
Set objNewWb = ActiveWorkbook
With objNewWb
.SaveAs "Auszug aus " & objSourceWb.Name
strTempPath = .FullName
.SendMail Recipients:=strRecipient, _
Subject:=strSubjectline
.Close SaveChanges:=False
Kill strTempPath
End With
Application.ScreenUpdating = True
End If
End If

SendEnd:
Set objNewWb = Nothing
Set objSourceWb = Nothing
Exit Sub

SendError:
MsgBox Prompt:="Fehler beim Senden des Blatts " & _
„(“ & Err.Number & „):“ & vbCr & _
Err.Description
Resume SendEnd
End Sub

Die Prozedur fragt zunaechst nach der Betreffzeile und dem
E-Mail-Empfaenger. Wenn Sie entsprechende Angaben machen,
kopiert sie das aktive Blatt in eine neue Arbeitsmappe und
verschickt diese mit der Excel-Standard-Funktion „SendMail“.
Per „Kill“-Anweisung wird die temporaere Arbeitsmappe
schliesslich wieder geloescht.

Um das VBA-Makro einzusetzen, aktivieren Sie in Excel das zu
verschickende Tabellenblatt. Dann druecken Sie Alt+F8, um
eine Liste verfuegbarer Makros anzuzeigen. Doppelklicken Sie
auf den Makronamen „SendActiveSheet“, um die
Programmausfuehrung zu starten.

Beachten Sie, dass beim Einsatz von Outlook 2003, 2002 oder
Outlook 2000 mit den neuesten Sicherheitsupdates vor dem
Mail-Versand ein Warnhinweis erscheint, sodass Sie dem
„Versand in Ihrem Namen“ erst zustimmen muessen. Das liegt
an den Sicherheitseinstellungen von Outlook und nicht an
Excel oder unserem Codebeispiel.

DANKE jetzt klappt es! :smile:
DANKE!