none
VBA-Access-Outlook

    Frage

  • Hallo an Alle,

    ich habe ein kleines Problemchen. Der untenstehende Code soll bewirken, dass über Access ein Termin in Outlook angelegt werden soll. Das klappt auch einwandfrei. Jedoch nutzt es mir nichts wenn nur ich den Termin sehe :S Hier entsteht auch die erste Frage: Wie kann ich bewirken, dass Teilnehmer hinzugefügt und benachrichtigt werden soll? Die zweite frage wäre kann ich die E-Mail adressen über eine Abfrage herauslesen lassen? Und die letzte wie füge ich eine Ressource hinzu ? Vielen vielen Dank im Voraus und Schöne Grüße aus München

    If Me.statusNr = 10 And Me.IsDone = True Then
    result = MsgBox("Möchten Sie eine Email für die Termineinladung verschicken?", vbYesNo)
        If (result = vbYes) Then
    
    Dim outtest As Outlook.AppointmentItem
    Dim MailAdressen As String
    
    
    
    Set rsMail = CurrentDb.OpenRecordset("qryTeilnehmer")
    
    
    Datum = InputBox("Datum eingeben und Uhrzeit eingeben tt.mm.yyyy", , "01.10.2013")
    Datum1 = InputBox("Enddatum eingeben und Uhrzeit eingeben", , "02.10.2013")
    Uhrzeit1 = InputBox("Wann soll die Schulung anfangen?", , "09:00")
    Uhrzeit2 = InputBox("Wann soll die Schulung enden?", , "18:00")
    Ort = InputBox("Wo findet die Schulung statt?", , "01.Riem")
    
    Betreff = "Test"
    Inhalt = "Dieser Termin wurde direkt aus Access eingetragen"
    
    Set outl = CreateObject("Outlook.Application")
    
    MeetinStatus = olMeeting
    
    With outtest
        outtest.Recipients.Add
        outtest.Display
        outtest.Body = Inhalt
        outtest.AllDayEvent = False
        outtest.ReminderSet = False
        outtest.Resources = Ressource
        outtest.ReminderMinutesBeforeStart = 60
        outtest.Start = CDate(Datum) + CDate(Uhrzeit1)
        outtest.End = CDate(Datum1) + CDate(Uhrzeit2)
        outtest.Location = Ort
        outtest.Subject = Betreff
        outtest.BusyStatus = olFree
        outtest.Send
        End With
        rsMail.Close
        
        Set rsMail = Nothing
        Set outtest = Nothing
        
        Close #1
        
        Set outl = Nothing
        
        Else
        Me.Undo
        Form_Current
        
        
    
      
    
    
    
    MsgBox "Test läuft"
    
    
    
    End If
    End If
    

    Dienstag, 17. September 2013 12:39

Alle Antworten

  • In qryTeilnehmer solltest Du die Teilnehmer und deren Mailadressen haben, dann kannst Du dieses Recordset durchlaufen und für jeden Teilnehmer ein Mail verschicken. Die Basis hast Du ja schon. ;)


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    Dienstag, 17. September 2013 17:21
  • Das mit dem Recordset hatte ich versucht..sah dann so aus bei mir

    If Me.statusNr = 10 And Me.IsDone = True Then
    result = MsgBox("Möchten Sie eine Email für die Termineinladung verschicken?", vbYesNo)
        If (result = vbYes) Then
    
    Dim outtest As Outlook.AppointmentItem
    Dim MailAdressen As String
    
    
    
    Set rsMail = CurrentDb.OpenRecordset("qryTeilnehmer")
    
    
    Datum = InputBox("Datum eingeben und Uhrzeit eingeben tt.mm.yyyy", , "01.10.2013")
    Datum1 = InputBox("Enddatum eingeben und Uhrzeit eingeben", , "02.10.2013")
    Uhrzeit1 = InputBox("Wann soll die Schulung anfangen?", , "09:00")
    Uhrzeit2 = InputBox("Wann soll die Schulung enden?", , "18:00")
    Ort = InputBox("Wo findet die Schulung statt?", , "01.Riem")
    
    Betreff = "Test"
    Inhalt = "Dieser Termin wurde direkt aus Access eingetragen"
    
    Set outl = CreateObject("Outlook.Application")
    
    
    
    With rsMail
    Do Until .EOF
    Set outtest = outl.CreateItem(olAppointmentItem)
    strMail = strMail & ";" & .Fields(E-Mail)
    Loop
        outtest.Recipients.Add
        outtest.Display
        outtest.Body = Inhalt
        outtest.AllDayEvent = False
        outtest.ReminderSet = False
        outtest.Resources = Ressource
        outtest.ReminderMinutesBeforeStart = 60
        outtest.Start = CDate(Datum) + CDate(Uhrzeit1)
        outtest.End = CDate(Datum1) + CDate(Uhrzeit2)
        outtest.Location = Ort
        outtest.Subject = Betreff
        outtest.BusyStatus = olFree
        outtest.Send
        End With
        rsMail.Close
        
        Set rsMail = Nothing
        Set outtest = Nothing
        
        Close #1
        
        Set outl = Nothing
        
        Else
        Me.Undo
        Form_Current
        
        
    
      
    
    
    
    MsgBox "Test läuft"
    
    
    
    End If
    End If

    + der Debugger zeigt auf  outtest.Recipients.Add und meldet das so ein Objetk bzw. Methode nicht gefunden wurde :-)

    Aber vielen DAnk für die schnelle antowrt :-)

    Donnerstag, 19. September 2013 00:06
  • Da fehlt nach dem Add noch die Mailadresse, bzw. die Mailadressen.

    Mit diesem Code hab ich eine Einladung versenden können, der Code kommt übrigens aus der Hilfe. ;)

    Sub CreateAppt()
    
        Dim outl As Object
        Dim OutTest As Outlook.AppointmentItem
        Dim myRequiredAttendee, myOptionalAttendee, myResourceAttendee As Outlook.Recipient
        
        Set outl = CreateObject("Outlook.Application")
        Set OutTest = outl.CreateItem(olAppointmentItem)
        
        OutTest.MeetingStatus = olMeeting
        OutTest.Subject = "Strategy Meeting"
        OutTest.Location = "Conf Rm All Stars"
        OutTest.Start = #9/24/2013 1:30:00 PM#
        OutTest.Duration = 90
        Set myRequiredAttendee = OutTest.Recipients.Add("empfänger@domain.TLD")
        myRequiredAttendee.Type = olRequired
        Set myOptionalAttendee = OutTest.Recipients.Add("zweiterEmpfaenger@domain.tld")
        myOptionalAttendee.Type = olOptional
        Set myResourceAttendee = OutTest.Recipients.Add("DritterEmpfaenger@domain.tld")
        myResourceAttendee.Type = olResource
        OutTest.Display
        OutTest.Send
    End Sub
    

    Den Rest bekommst Du sicherlich mit etwas Testen noch hin. ;)


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    Donnerstag, 19. September 2013 18:06
  • Hallo Winfried,

    vielen vielen vielen Dank für deine Hilfe..es funktioniert jetzt..kannst du mir nur noch verraten, was Anwendungs- und objektdefinierter Fehler zu bedeuten hat.

    Nochmal vielen vielen Dank :-)

    Donnerstag, 19. September 2013 18:45
  • Ein Objektorientierter Fehler hat mit dem Objekt etwas zu tun. Outl ist ein Objekt. Hast Du für den Anwendungsfehler ein Beispiel?

    BTW: Markiere doch noch meine Antwort als Antwort, Danke.


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    • Als Antwort markiert Momo6693 Donnerstag, 19. September 2013 19:59
    • Tag als Antwort aufgehoben Momo6693 Donnerstag, 19. September 2013 20:37
    Donnerstag, 19. September 2013 18:55
  • Set myRequiredAttendee = OutTest.Recipients.Add("empfänger@domain.TLD") myRequiredAttendee.Type = olRequired

    der Teil hier wird als Fehler übermittel...statt dem empfänger@domain.TLD gebe ich meine mailadresse an und dies führt zur Fehlermeldung

    Schöne Grüße

    Donnerstag, 19. September 2013 20:01
  • Set myRequiredAttendee = OutTest.Recipients.Add("empfänger@domain.TLD") myRequiredAttendee.Type = olRequired

    der Teil hier wird als Fehler übermittel...statt dem empfänger@domain.TLD gebe ich meine mailadresse an und dies führt zur Fehlermeldung

    Hast Du sonst noch etwas am Code verändert? Welche genaue Fehlermeldung bekommst Du? Weshalb schreibst Du im anderen Posting es funktioniert, wenn es doch nicht funktioniert? Du gibst deine Mailadresse auch korrekt an? Zeig doch einfach nochmal deinen vollständigen Code. Hast Du einen Verweis auf Outlook 14.0 erstellt?

    BTW: Du sollst das Posting als Antwort markieren, das die Lösung bzw. den Code enthält, damit andere beim Suchen gleich das richtige Posting finden. Danke.

    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/


    Donnerstag, 19. September 2013 20:20
  • If Me.statusNr = 10 And Me.IsDone = True Then
    result = MsgBox("Möchten Sie eine Email für die Termineinladung verschicken?", vbYesNo)
        If (result = vbYes) Then
    
    Dim outtest As Outlook.AppointmentItem
    Dim myRequiredAttendee, myOptionalAttendee, myRessourceAttendee As Outlook.Recipient
    
    
    
    
    Datum = InputBox("Datum eingeben und Uhrzeit eingeben tt.mm.yyyy", , "01.10.2013")
    Datum1 = InputBox("Enddatum eingeben und Uhrzeit eingeben", , "02.10.2013")
    Uhrzeit1 = InputBox("Wann soll die Schulung anfangen?", , "09:00")
    Uhrzeit2 = InputBox("Wann soll die Schulung enden?", , "18:00")
    Ort = InputBox("Wo findet die Schulung statt?", , "01.Riem")
    Raum = InputBox("In welchem Raum soll die  Schulung stattfinden", , "Raum")
    
    Betreff = "Test"
    Inhalt = "Dieser Termin wurde direkt aus Access eingetragen"
    
    Set outl = CreateObject("Outlook.Application")
    Set outtest = outl.CreateItem(olAppointmentItem)
    
    
    MeetinStatus = olMeeting
    
    With outtest
        outtest.MeetingStatus = olMeeting
        outtest.Body = Inhalt
        outtest.AllDayEvent = False
        outtest.ReminderSet = False
        outtest.ReminderMinutesBeforeStart = 60
        outtest.Start = CDate(Datum) + CDate(Uhrzeit1)
        outtest.End = CDate(Datum1) + CDate(Uhrzeit2)
        outtest.Location = Ort
        outtest.Subject = Betreff
        Set myRequiredAttendee = outtest.Recipients.Add("vorname.nachname@firma.de")
        myRequiredAttendee.Type = olRequired
        Set myRessourceAttendee = outtest.Recipients.Add(Raum)
        myRessourceAttendee.Type = olResource
        outtest.Display
        outtest.Save
        End With
       
        
        
        Set outtest = Nothing
        
        Close #1
        
        Set outl = Nothing
        
        Else
        Me.Undo
        Form_Current
        
        
    
      
    
    
    
    MsgBox "Test läuft"
    
    
    
    End If
    End If
    
        

    Also zur ersten Frage am Code wurde nichts geändert ich habe deinen Code in meinen eingefügt. Die Fehlermeldung ist : Anwendungs-und objektdefinierte Fehler. Meine E-mail adresse ist auch richtig angegeben. Habe dreimal geprüft und ja der verweis muss da sein weil andere funktionen mit outlook funktionieren.

    hier der code und vielen dank für deine mühe:-)


    • Bearbeitet Momo6693 Donnerstag, 3. Oktober 2013 13:17
    Donnerstag, 19. September 2013 20:30
  • und oben hast du erwähnt, dass du den code aus der Hilfe hast. Aus welcher Hilfe meinst du?
    Donnerstag, 19. September 2013 20:47
  • Dim outtest As Outlook.AppointmentItem
    Dim outl As Object
    Dim myRequiredAttendee As Outlook.Recipient, myOptionalAttendee As Outlook.Recipient, myRessourceAttendee As Outlook.Recipient
    Dim dDatum As String
    Dim Datum1 As String
    Dim Uhrzeit1 As String
    Dim Uhrzeit2 As String, Ort As String, Raum As String, Betreff As String, Inhalt As String
    
    dDatum = InputBox("Datum eingeben und Uhrzeit eingeben tt.mm.yyyy", , "01.10.2013")
    Datum1 = InputBox("Enddatum eingeben und Uhrzeit eingeben", , "02.10.2013")
    Uhrzeit1 = InputBox("Wann soll die Schulung anfangen?", , "09:00")
    Uhrzeit2 = InputBox("Wann soll die Schulung enden?", , "18:00")
    Ort = InputBox("Wo findet die Schulung statt?", , "01.Riem")
    Raum = InputBox("In welchem Raum soll die  Schulung stattfinden", , "*metafinanz Raum 0.1 RIEM(14)")
    
    Betreff = "Test"
    Inhalt = "Dieser Termin wurde direkt aus Access eingetragen"
    
    Set outl = CreateObject("Outlook.Application")
    Set outtest = outl.CreateItem(olAppointmentItem)
    
    With outtest
        outtest.MeetingStatus = olMeeting
        outtest.Body = Inhalt
        outtest.AllDayEvent = False
        outtest.ReminderSet = False
        outtest.ReminderMinutesBeforeStart = 60
        outtest.Start = CDate(dDatum) + CDate(Uhrzeit1)
        outtest.End = CDate(Datum1) + CDate(Uhrzeit2)
        outtest.Location = Ort
        outtest.Subject = Betreff
        Set myRequiredAttendee = outtest.Recipients.Add("emfpaenger@domain.tld")
        myRequiredAttendee.Type = olRequired
        Set myRessourceAttendee = outtest.Recipients.Add(Raum)
        myRessourceAttendee.Type = olResource
        outtest.Display
        outtest.Send
        outtest.Save
    End With
       
        
        
        Set outtest = Nothing
        
        Close #1
        
        Set outl = Nothing

    Datum ist ein Reserviertes Wort in Access, ändere das. Variablen deklarieren, ansonsten fliegt dir das alles in Kürz um die Ohren.

    http://www.donkarl.com?FAQ1.5

    Die FAQ im allgemeinen sei dir ans Herz gelegt: http://www.donkarl.com/

    Schau dir auch diese Deklaration an:

    Dim myRequiredAttendee As Outlook.Recipient, myOptionalAttendee As Outlook.Recipient, myRessourceAttendee As Outlook.Recipient

    Schau deinen Code an, Du mußt in VBA jede Variable dimensionieren und deklarieren als das, was sie ist. Ganz oben in jedem Modul mußt Du ein Option Explicit eintragen. Schalte dazu im VBA-Editor, Menü Extras > Optionen > Reiter Editor [X] Variablendeklaration erforderlich ein. Jetzt über Debuggen Kompilieren. Möglicherweise bekommst Du jetzt sehr viele Fehler angezeigt, langsam einen nach dem anderen abarbeiten.

    Im VBA-Editor den Cursor auf 'MeetingStatus' setzen und F1 drücken, dann bekommst Du Hilfe dazu.

    Es reicht nicht ganz zum Schluß zu dimensionieren. Das gibt es nur im Visual Studio.

    BTW: Groß- und Kleinschreibung erhöht die Lesbarkeit, Danke.


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    Donnerstag, 19. September 2013 20:49
  • okay funktioniert jetzt vielen vielen herzlichen dank noch einmal...das mit explicit kann ich nicht machen weil wie du gesagt hast, es tauchen viele Fehlermeldungen auf...jetzt funktioniert das ganze auch so...noch einmal vielen vielen dank :-)
    Donnerstag, 19. September 2013 21:06
  • das mit explicit kann ich nicht machen weil wie du gesagt hast, es tauchen viele Fehlermeldungen auf

    Und über kurz oder lang fliegt dir alles um die Ohren. Auch wenn es jetzt viel Arbeit ist, deklariere die Variablen und gewöhn es dir an. Alles andere holt dich früher ein als es dir lieb ist.

    Noch ein Hinweis zur Variablendeklaration bzw. Benamsung. Ich habe mir angewöhnt die Variablen gem. der Dimensionierung zu benennen:

    Dim strDatum as String
    Dim objObjekt as Object
    Und so weiter.

    Und jetzt darfst Du noch die Antwort markieren, in der ich den Code gepostet habe, der funktioniert, Danke.


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    Donnerstag, 19. September 2013 21:11
  • das mit explicit kann ich nicht machen weil wie du gesagt hast, es tauchen viele Fehlermeldungen auf...

    Ähm. Genau dann musst Du das machen (abgesehen davon, dass man das eh immer aktiviert haben sollte).

    Viele Fehlermeldung = Viele, viele Fehler. Die solltest Du beheben. Es ist ja nicht nur so, dass Du sehr wahrscheinlich einfach mal so irgendwo neue Variablen durch falsche Schreibweise erzeugst, Du hast auch keinen Überblick über die verwendeten Variablen, da sie ja eben nirgends deklariert sind.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 19. September 2013 21:45
    Moderator
  • vielen dank für die tollen tipps...die werde ich sofort umsetzen :-)
    Donnerstag, 19. September 2013 21:47
  • Hallo Stefan,

    Hallo Winfried

    eine frage. Wieso setzt der Code eigentlich sofort einen Termin und schiebt das ganze in die Gelöschten Elemente. Gibt es eine Funktion bei der einfach eine Termineinladung verschickt wird, sodass die Personen die in der Empfängerliste erhalten sind das recht haben zu oder abzusagen? Vielen dank


    • Bearbeitet Momo6693 Montag, 30. September 2013 14:08
    Montag, 30. September 2013 14:08
  • eine frage. Wieso setzt der Code eigentlich sofort einen Termin und schiebt das ganze in die Gelöschten Elemente. Gibt es eine Funktion bei der einfach eine Termineinladung verschickt wird, sodass die Personen die in der Empfängerliste erhalten sind das recht haben zu oder abzusagen?

    Bei mir wurde nicht ohne Rückfrage ein Termin eingetragen. Wie genau sieht denn dein Code jetzt aus?


    Servus
    Winfried

    GPOs: http://www.gruppenrichtlinien.de/
    WSUS Package Publisher: http://wsuspackagepublisher.codeplex.com/

    Samstag, 5. Oktober 2013 18:44