Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VB-Outlook-Skript

Frage Microsoft Outlook & Mail

Mitglied: darkestdespair

darkestdespair (Level 1) - Jetzt verbinden

25.11.2009 um 09:05 Uhr, 5211 Aufrufe, 16 Kommentare

Ich möchte gerne eine Mail versenden, die andere Mails im Anhang hat

Hallo erstmal.
Ich habe einen Code verfasst, der ausgewählte Spammails als Anhang an eine festgelegte Mail-Adresse schicken soll, beim Betätigen eines Buttons.
Die E-Mail soll keinen Text und keinen Betreff enthalten, nur eben die markierten Spammails als Anhang.
Leider erhalte ich immer wieder Fehler und weiss nicht mehr weiter, da ich absoluter Neuling auf VB-Ebene bin.


Es geht um den folgenden Code:


Private Lfn As Integer
Sub Markierte_Mails_Verschicken()

Dim Ordner As MAPIFolder
Dim SelektierteMail As MailItem
Dim Selektion As Selection
Dim Anzahl_kopierte_Mails As Integer

On Error GoTo Fehler

Ordner = Application.ActiveExplorer.CurrentFolder 'Den aktuell geöffneten Ordner verwenden.
Selektion = Ordner.Selection 'Die markierten Mails benutzen
Anzahl_kopierte_Mails = 0 'Set kopierte = 0

If Selektion.Count = 0 Then
MsgBox ("Bitte Mails auswählen!")
Else: For Each SelektierteMail In Selektion
Mail_senden (SelektierteMail) 'Übergeben der Mails an das Unterprogramm
Anzahl_kopierte_Mails = Anzahl_kopierte_Mails + 1
Next
End If
Exit Sub

Fehler:
MsgBox (Err.Description + " Bitte sicherstellen, dass im gewählten Ordner Mails markiert sind und der Ordner ein Mailordner ist!")

End Sub

Private Sub Mail_senden(ByVal Mail As Object)
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
With olApp.CreateItem(0)
'Empfänger
.Recipients.Add "Mail@Mail.de
'Lesebestätigung aus
.ReadReceiptRequested = False
'Dateianhang
.Attachments.Add Mail
.Send
End With
Set olApp = Nothing
End Sub



Ich erhalte bei der Zeile "Ordner = Application.ActiveExplorer.CurrentFolder 'Den aktuell geöffneten Ordner verwenden." immer den Fehler: Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.
Leider habe ich absolut keine Ahnung, wie ich weiter vorgehen muss. Bin, wie schon gesagt, absoluter Neuling auf dem Gebiet.
Mitglied: Gilneas
25.11.2009 um 09:43 Uhr
Ich würde dir empfehlen mit solchen anfragen ein auf Code spezialisiertes Forum zu befragen. Für VB.Net fällt mir spontan nur dieses hier ein: http://www.vbarchiv.net
Hier hüpfen mehr Admins als Coder rum


Btw. gotos sind sehr umstritten, viele sagen, dass das man diese vermeiden soll, weil es nichts mit ordentlichen Programmieren zu tun hat. Aber die Frage will ich hier eigentlich nicht aufwerfen
Bitte warten ..
Mitglied: 76109
25.11.2009 um 10:00 Uhr
Zitat von Gilneas:
Btw. gotos sind sehr umstritten, viele sagen, dass das man diese
vermeiden soll, weil es nichts mit ordentlichen Programmieren zu tun
hat. Aber die Frage will ich hier eigentlich nicht aufwerfen
Das ist wohl der größte Schwachsinn, den ich je gehört habe

Gruß Dieter
Bitte warten ..
Mitglied: TheEternalPhenom
25.11.2009 um 10:35 Uhr
Sers

ich hab zwar von VB keine groß Ahnung jedoch aber solche Fehelermeldungen gibt es auch bei VBA. Meistens liegt es daran, dass der Angegeben Pfad/Ordner/Zelle o. ä. nicht gefunden wurde. An deiner Stelle würde ich einfach mal Versuchen über eine Inputbox den Pfad zu der Datei/Ordner händig einzugeben. Somit könntest du jedenfalls testen ob es daran liegt, dass VB den Ordner nicht annehmen will.

@ Dieter

Also in VBA gelten GoTo Anweisungen als nicht gerade schön programmiert. Vorallem weil man meist so programmieren kann das die GoTo Anweisung nicht benötigt wird.
Bitte warten ..
Mitglied: 76109
25.11.2009 um 10:57 Uhr
Hallo duffman521!

Zitat von TheEternalPhenom:
Also in VBA gelten GoTo Anweisungen als nicht gerade schön
programmiert. Vorallem weil man meist so programmieren kann das die
GoTo Anweisung nicht benötigt wird.
Was meinst Du wie If-, Case-, For- oder While-Schleifen funktionieren. Ihr habt wahrscheinlich noch nie einen Maschinencode (Assembler) gesehen. Wie sonst sollen den Wahr/Falsch-Verzweigungen oder Schleifendurchläufe ohne ein Goto (nicht sichtbar) stattfinden?

Gruß Dieter.
Bitte warten ..
Mitglied: TheEternalPhenom
25.11.2009 um 11:08 Uhr
Zitat von 76109:
Hallo duffman521!

> Zitat von TheEternalPhenom:
Was meinst Du wie If-, Case-, For- oder While-Schleifen
funktionieren. Ihr habt wahrscheinlich noch nie einen Maschinencode
(Assembler) gesehen.
Wie sonst sollen den Wahr/Falsch-Verzweigungen oder
Schleifendurchlauf ohne ein nicht sichtbares Goto stattfinden?

Gruß Dieter.


Zum einen sagte man kann meistens ohen GoTo programmieren zum anderen habe ich wegen der Verwendung eines GoTo in meine Abschlussprüfung abzüge bekommen. Mit GoTo war der Code 600 Zeichen lang ohne GoTo musste ich knapp 50 Zeichen mehr einbauen.
Und dann rede ich nur von VB und VBA in beiden Programmiersprachen kann man die GoTo Anwendung zu 90 Prozent, wenn nicht so gar öfter, durch If-, Case-, For- oder While-Schleifen verhindern. Wie es in anderen Sprachen genau aussieht kann ich nicht objektive beurteilen bisher habe ich aber großteils nur negatives über die GoTo Anweisung gehört.
Bitte warten ..
Mitglied: 76109
25.11.2009 um 12:05 Uhr
Hallo duffman521!

Hatte mich falsch ausgedrückt und oben korrigiert. Also grundsätzlich werden alle Programmiersprachen beim Compilern in einen Maschinecode (Assembler) übersetzt. Und eine If-, Case-, While- oder For-Schleife kann ohne ein Goto (Goto = Sprung zu einer anderen Stelle im Programmcode) nicht funktionieren. Allerdings geb ich Dir insofern recht, dass Goto-Anweisungen über große Distanzen nicht effizient sind. Also bei 600 Zeilen Code würde auch ich keinen Goto mehr verwenden. Goto's sollten nur kurze Distanzen haben, also über ein paar Zeilen (Short-Jumps = relativ +/- 255 Code-Bytes) ist das vollkommen OK. Aber generell zu sagen Goto's zu verwenden sei schlechte Programmierung, finde ich reichlich überzogen

Gruß Dieter
Bitte warten ..
Mitglied: TheEternalPhenom
25.11.2009 um 12:32 Uhr
Ich finde es unsauber Programmiert.
Außerdem war der gesamte Programmcode 600 Zeile lang die GoTos gingen über höchstens 10 Zeilen.

Ich habe aber irgendwie das Gefühl wir reden im Momen etwas an einander vorbei.


Was du meinst sind "GoTo" Anweisungen innerhalb einer anderen Anweisung.

Sprich:
If a = b then
MsgBox "Richtig"
Else
MsgBox "Falsch"
End If

In diesem Fall also ist Else eine Sprungmarke, zu der das Programm springt falls die Abfrage Falsch ist.


Was Gilneas und ich meine ist der befehl GoTo (7. Zeile in darkestdespairs Programm).

Sprich:

GoTo 123

Code
Code
Code

123

Code
Code
Code

In diesem Beispiel aber gibt es einen fest definierten Sprung mit GoTo und genau diese Anweisung wird von vielen als "unsaubere" oder schlechte Programmierung angesehen.

Das bei If-, Case-, While- oder For-Schleife Sprungmarken vorhanden sein müssen ist klar.
Bitte warten ..
Mitglied: 76109
25.11.2009 um 13:19 Uhr
Hallo nochmal!

Also, das wäre mal ein Auszug einer C-Compilerten For-Schleife in Assembler:
01.
@1@86: 
02.
   ;	 
03.
   ;for(bitc=1;bitc < 256;bitc << 1, i++) { 
04.
   ;	 
05.
	?debug	L 38 
06.
	mov	word ptr [bp-4],1 
07.
	mov	ax,word ptr [bp-14] 
08.
	mov	word ptr [bp-12],ax 
09.
	jmp	short @1@338		= GOTO @1@338 
10.
@1@142: 
11.
	...... 
12.
@1@338: 
13.
	...... 
14.
	jmp	short @1@86		= GOTO @1@86
Und das wäre ein eigenes Goto in Assembler:
01.
   ; Goto 123 
02.
   ;  
03.
        jmp	short @1@123		= GOTO @1@123         
04.
        ...... 
05.
        ...... 
06.
@1@123:
Es ist kein Unterschied, ob die For-Schleife jetzt ein Goto macht oder ob ich einen Goto mache. Der Sprungbefehl ist der gleiche und somit keineswegs verwerflich.

Gruß Dieter
Bitte warten ..
Mitglied: Gilneas
25.11.2009 um 15:10 Uhr
Ohje, hätt ich bloß den Mund gehalten.

Sorry @ darkestdespair!

Wir sind Offtopic, die Frage war eine andere, es ging nicht um eine Umfrage zum Thema "Wer kann gotos leiden und wer nicht?"

Bezüglich des Fehlers würde ich mich an deiner Stelle mal schlau machen, ob der Aufruf

01.
Ordner = Application.ActiveExplorer.CurrentFolder
So korrekt ist, oder ob du noch Bibliotheken oder anderes einbinden musst oder sonst irgend nen Kram initialisieren solltest. Also sprich, welche Grundvoraussetzungen müssen erfüllt sein, dass das Objekt Ordner = Application.ActiveExplorer.CurrentFolder gesetzt ist.
Bitte warten ..
Mitglied: darkestdespair
25.11.2009 um 15:35 Uhr
Danke, ich wollte schon fast fragen, wo ich hier gelandet bin...
Eigentlich sollte, nachdem, was ich rausgefunden habe, das alles ganz normal sein in VB von Outlook.
Nur trotzdem geht das nicht...
Gruß
Bitte warten ..
Mitglied: 76109
25.11.2009 um 15:55 Uhr
Hallo darkestdespair!

Ich sollte mich wohl auch entschuldigen, war ziemlich an der Sache vorbei.

Leider habe ich kein Outlook und kann daher nicht den ganzen Code nachvollziehen, aber Objecte müssen einer Variablen per Set-Anweisung zugewiesen werden
z.B.:
01.
Set Ordner = Application.ActiveExplorer.CurrentFolder 'Den aktuell geöffneten Ordner verwenden. 
02.
Set Selektion = Ordner.Selection 'Die markierten Mails benutzen 
03.
For Each SelektierteMail In Selektion 
04.
...
01.
Set olApp = CreateObject("Outlook.Application") 
02.
Set olObj = olApp.CreateItem(0)
Gruß Dieter
Bitte warten ..
Mitglied: Biber
25.11.2009 um 22:18 Uhr
Moin darkestdespair,

ein bisschen handwerkliches Nachbessern ist in der Tat erforderlich, aber ... hmmm... erkennbar ist die Absicht ja schon.

Minimale Nachbesserungen nach der ersten Sichtkontrolle ( ungetestete Skizze!!):
01.
Sub Markierte_Mails_Verschicken() 
02.
 
03.
' Dim Ordner As MAPIFolder 
04.
Dim SelektierteMail As MailItem 
05.
Dim mySelectedItems As Selection 
06.
Dim mailX As MailItem 
07.
Dim Anzahl_kopierte_Mails As Integer 
08.
 
09.
On Error GoTo Fehler    
10.
 
11.
' Set Ordner = Application.ActiveExplorer.CurrentFolder 'Den aktuell geöffneten Ordner verwenden. 
12.
' "ordner"... for what?? 
13.
Set mySelectedItems = Application.ActiveExplorer.Selection 
14.
' .Selection KANN nur eine Methode des/eines Explorers sein, nicht eines "Ordners" 
15.
' --- s.o Set Selektion = Ordner.Selection 'Die markierten Mails benutzen 
16.
Anzahl_kopierte_Mails = 0 'Set kopierte = 0 
17.
 
18.
If mySelectedItems.Count = 0 Then 
19.
  MsgBox ("Bitte Mails auswählen!") 
20.
Else 
21.
 For Each SelektierteMail In mySelectedItems 
22.
  Set mailX = SelektierteMail 
23.
  Mail_senden mailX 'Übergeben der Mails an das Unterprogramm 
24.
  Anzahl_kopierte_Mails = Anzahl_kopierte_Mails + 1 
25.
  Next 
26.
End If 
27.
Exit Sub 
28.
 
29.
Fehler: 
30.
MsgBox (Err.Description + " Bitte sicherstellen, dass im gewählten Ordner Mails markiert sind und der Ordner ein Mailordner ist!") 
31.
 
32.
End Sub 
33.
 
34.
Private Sub Mail_senden(aMail As MailItem) 
35.
 
36.
'' Hier glaub ich nicht, dass da nun nochmal eine OL-Appz neu geöffnet werden muss!! 
37.
' bitte selbst downsizen!! 
38.
 Dim olApp As Object 
39.
Set olApp = CreateObject("Outlook.Application") 
40.
With olApp.CreateItem(0) 
41.
'Empfänger 
42.
.Recipients.Add "Mail@Mail.de" 
43.
'Lesebestätigung aus 
44.
.ReadReceiptRequested = False 
45.
'Dateianhang 
46.
.Attachments.Add aMail 
47.
.Send 
48.
End With 
49.
Set olApp = Nothing 
50.
End Sub 
51.
 
Grüße
Biber
Bitte warten ..
Mitglied: TheEternalPhenom
27.11.2009 um 07:38 Uhr
1. Enschuldige ich mich auch, weil wir etwas im Thema abgekommen sind.

2. Bin ich überrascht das ich trotz meiner fehlenden VB Kenntnisse schon mal die Richtigezeile gefunden hab, in der der Fehler sein könnte/ist.

3. Würde mich mal interessieren ob die Tipps geholfen haben?

@darkestdespair Du könntest vllt. mal die Lösung hier noch mal posten, wenn alles funktioniert.
Bitte warten ..
Mitglied: darkestdespair
27.11.2009 um 15:10 Uhr
Sry erstmal, bin grade erst zum testen gekommen.
Also funktionieren tuts, aber ich kriege 2 Abfragen, einmal vor dem eigentlichen schicken und zwar:
http://img121.imageshack.us/i/spam1y.jpg/
Und für jede E-Mail muss ich dann auch noch eine gesonderte Bestätigung abgeben:
http://img265.imageshack.us/i/spam2w.jpg/
Kann man das umgehen?
Ich denke nämlich, dass sich dann einige User schwer aufregen werden.
Vor allem weil man vor jeder Mail noch ne Zeit warten muss, bevor man die nächste Bestätigen kann.
Bitte warten ..
Mitglied: Gilneas
27.11.2009 um 18:30 Uhr
Ich würde jetzt mal probieren in den Sicherheitseinstellungen von Outlook rumzustellen.
Die sind leider auch mit denen für den IE verknüpft, aber vll. findet sich da was. Fang doch mal grob an, in dem du die Sicherheitsstufen ganz runterschaltest, um herauszufinden, ob es überhaupt Einfluss hat.
Bitte warten ..
Mitglied: TheEternalPhenom
28.11.2009 um 13:49 Uhr
Naja man merkt das Windows gelernt hat. Einer der ersten Virern, wars glaube ich, hat sich selbst per VBA Script über Outlook verschickt. Wenn man dein Programm in Verbindung mit diesem Problem sieht ist es nur gut das Outlook nachfragt.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

Outlook & Mail
Outlook Ablage - habt ihr eine Idee? (2)

Frage von MegaGiga zum Thema Outlook & Mail ...

Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...