Haken bei Verwaise per Makro setzen

Hallo zusammen,

ich habe ein Problem beim Kopieren von Tabellnblättern, dass ist bestimmt etwas für die Tüftler hier… .

Zum Hintergrund: ich habe eine Excel-Datei, in der ich nach meinen Eintragungen alle Tabellenblätter als Anlage per E-Mail versende (Tabellenblätter werden in eine neue Mappe kopiert, lokal abgespeichert, als Anlage der Mail beigefügt, danach wird die lokale Datei wieder gelöscht).

Der Empfänger der Mail soll Eintragungen in der Tabelle machen und diese dann ebenfalls per E-Mail, identischer Ablauf wie oben, versenden.

Nun tritt das Problem auf: wenn ich die beim ersten Mal die Tabellenblätter kopiere, werden die Makros im Modul1 nicht mitkopiert und so sind in der neuen, der E-Mail beigefügten Datei keine Makros. Dies habe ich soweit gehend behoben, dass ich den Code von Modul1 in die Tabellenblätter geschrieben habe. Jetzt tritt ein weiteres Problem auf: zwar hat die neue, der E-Mail beigefügten Datei nun das entsprechende Makro - allerdings ist bei beim kopieren der Tabellenblätter der Haken bei VB-Editor -> Extras -> Verwaise -> Microsoft Outlook 11.0 Object Library, der vorher gesetzt war, entfernt worden; dieser muss jedoch gesetzt sein, damit das Makro funktioniert, also die E-Mail generiert werden kann.

Weiß jemand, wie man diesen Haken per Makro setzen kann, oder auf welche Art und Weise man dieses Problem umgehen kann??

Vielen, vielen Dank schon einmal für eure Hilfe!

Gruß
Christian

Zum Hintergrund: ich habe eine Excel-Datei, in der ich nach
meinen Eintragungen alle Tabellenblätter als Anlage per E-Mail
versende (Tabellenblätter werden in eine neue Mappe kopiert,
lokal abgespeichert, als Anlage der Mail beigefügt, danach
wird die lokale Datei wieder gelöscht).

Der Empfänger der Mail soll Eintragungen in der Tabelle machen
und diese dann ebenfalls per E-Mail, identischer Ablauf wie
oben, versenden.

Moin Christian,

warum schickst du nicht gleich die Mappe als Anhang einer Email?

Gruß
Reinhard

Hallo Reinhard,

das liegt daran, da die Datei einen speziellen Dateinamen erhalten soll; außerdem soll sie salopp gesagt „idiotensicher“ sein, deswegen dieser Weg. Unten mein bisheriges Makro:

Sub E_Mail_starten()

Dim objOL As Outlook.Application
Dim objMail As Outlook.MailItem
Dim sBodyHeader As String
Dim sBodyText As String
Dim sBodyFooter As String

Quelle = ActiveWorkbook.ActiveSheet.Name
Dim MyMessage As Object, MyOutApp As Object
Dim SavePath As String
Dim AWS As String

SavePath = „c:“

ActiveSheet.Copy

ActiveWorkbook.SaveAs SavePath & „TEST“

With ActiveWorkbook
AWS = .FullName
.Close
End With

Set objOL = CreateObject(„Outlook.Application“)
Set objMail = objOL.CreateItem(olMailItem)

With objMail
.Subject = „TEST“
.BodyFormat = olFormatHTML
.HTMLBody = sBodyHeader & sBodyText & sBodyFooter
.To = „TEST“
.CC = „TEST“
.Attachments.Add AWS
.Display
Kill AWS
End With 'objMail

Set objMail = Nothing
Set objOL = Nothing

End Sub

das liegt daran, da die Datei einen speziellen Dateinamen
erhalten soll; außerdem soll sie salopp gesagt „idiotensicher“
sein, deswegen dieser Weg. Unten mein bisheriges Makro:

Hi Christian,

ich weiß nicht, trotz Verweis auf MS Outlook X.0 Object Libraray, warum das olFormatHtml nicht erkannt wird bei meinem XL2000, aber ansonsten würde ich das so machen:

Option Explicit
'
Sub E\_Mail\_starten()
Dim objOL As Outlook.Application
Dim objMail As Outlook.MailItem
Dim sBodyHeader As String
Dim sBodyText As String
Dim sBodyFooter As String
Dim MyMessage As Object, MyOutApp As Object
Dim SavePath As String
Dim AWS As String
SavePath = "c:\"
AWS = SavePath & "TEST.xls"
ActiveWorkbook.SaveCopyAs AWS
Set objOL = CreateObject("Outlook.Application")
Set objMail = objOL.CreateItem(olMailItem)
sBodyHeader = "head"
sBodyText = "Text"
sBodyFooter = "fuß"
With objMail
 .Subject = "TEST"
 '.BodyFormat = olFormatHTML
 .HTMLBody = sBodyHeader & sBodyText & sBodyFooter
 .To = "[email protected]"
 .CC = "[email protected]"
 .Attachments.Add AWS
 '.Display
 .Send
End With 'objMail
Kill AWS
Set objMail = Nothing
Set objOL = Nothing
End Sub

Gruß
Reinhard

das liegt daran, da die Datei einen speziellen Dateinamen
erhalten soll; außerdem soll sie salopp gesagt „idiotensicher“
sein, deswegen dieser Weg. Unten mein bisheriges Makro:

Wozu Verweise setzen?
Du betreibst Late-Bindung, da sind keine Verweise notwendig. Du musst nur alle Outlook spezifischen Objekte auch as Object deklarieren?

Option Explicit

Sub E_Mail_starten()
Dim objOL As Object 'Outlook.Application
Dim objMail As Object 'Outlook.MailItem

und schon klappt das auch ohne Verweiseintrag in der VBA Bibliothek, wenn ich jetzt keine Outloook-Objekt übersehen habe…

Wozu Verweise setzen?
Du betreibst Late-Bindung, da sind keine Verweise notwendig.
Du musst nur alle Outlook spezifischen Objekte auch
as Object deklarieren?

und schon klappt das auch ohne Verweiseintrag in der VBA
Bibliothek, wenn ich jetzt keine Outloook-Objekt übersehen
habe…

Hallo Hans,

hast du *smile*
Const olMailItem As Long = 0
muß noch rein.

Ich fühle mich noch nicht Vbafit genug um an einer Profidiskussion über das Für und Wieder von Early/Late Binding aktiv mitzumachen, bin da froh wenn ich passiv mitlese und glaube vieles zu verstehen :smile:

Gruß
Reinhard

Hallo Reinhard,

hast du *smile*
Const olMailItem As Long = 0
muß noch rein.

Ah, ja das Teil gehört dann wohl zu den Outlook-Konstanten?
und gut is, oder…

Um die Ausgangsfrage auf zu greifen. Man kann einen Verweis auch per Code setzen, da muss aber in den Sicherheitseinstellungen „Zugriff auf Code-Projet vertrauen“ oä. freigegeben werden. Was nicht zu empfehlen und zu erwarten ist.
Ich vermeide Latebinding wo geht in VBA, Du hast nur Ärger damit, wenn Du die Bib nicht ausdrücklich auch mitlieferst. Und wenn Du sie mitlieferst, dann hast DU Ärger weil irgendwelche Registrierungen überschrieben werden und wer anderes über Deine Verweise stolpert :wink: