Access / Outlook

Status
Niet open voor verdere reacties.

tonp60

Gebruiker
Lid geworden
29 jul 2009
Berichten
136
Hallo,

Is het mogelijk om een activiteit op een bepaalde datum en tijd vanuit een record in de database te plaatsen in de agenda van iemand?
Het mailen lukt me wel, maar ik wil graag een vermelding in de agenda maken van betrokkene.

Met vriendelijke groet,
Ton
 
Wat wil je precies? Je kunt vanuit Access prima zaken in Outlook regelen zoals afspraken aanmaken, contactpersonen etc. Maar geautomatiseerd? Wat moet ik daar onder verstaan? En wat is het nut van een afspraak, die blijkbaar al in de database zit, niet gelijk in de agenda te zetten maar later via een geplande taak?
 
De database wordt gebruikt als planning tool. Degene waarbij wij een afspraak in de agenda willen zetten heeft geen toegang tot de database. Wij hebben wel toegang tot zijn Outlook profiel.
Nu wordt er een schriftelijke bevestiging verstuurd per mail. Dit gaat direct vanuit Access naar Outlook. Wij willen nu de bevestiging direct in zijn outlook agenda zetten. Kan dit?
 
Dan zeg je nu iets anders als in je eerste berichtje :)
Is het mogelijk om een activiteit op een bepaalde datum en tijd vanuit een record in de database te plaatsen in de agenda van iemand?
Je wilt het plaatsen van de afspraak niet inplannen, maar de afspraak inschieten. En dat is dus prima te doen, zoals ik al schreef. Als je toegang hebt tot het profiel, moet dat kunnen. Al kun je ook een vergaderverzoek mailen, wat de ontvanger dan kan accepteren of niet. Als je hard in het profiel gaat grasduinen, wordt de nieuwe afspraak er rücksichtlos ingerost, ook al staan er andere afspraken.
 
Zou je mij beide opties kunnen uitleggen, zodat wij op een later tijdstip de keuze kunnen maken welke optie het beste werkt. Alvast bedankt.
 
Ik heb geen voorbeeldje paraat van het versturen van een vergaderverzoek, maar dit is in ieder geval code waarmee je in een andere account kan prutsen.
Code:
Private Sub cmdAfspraak_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim outObj As Outlook.Application
Dim outAccount As Outlook.Account
Dim getNamespace As Outlook.NameSpace
Dim OutAppt As Outlook.AppointmentItem
Dim outTask As Outlook.TaskItem
Dim i As Integer, iA As Variant

    Set outObj = Outlook.Application
    For Each outAccount In outObj.Session.Accounts
    MsgBox outAccount.DisplayName & vbLf & outAccount.SmtpAddress
        If outAccount = "Microsoft Exchange" Then
            Set getNamespace = outObj.getNamespace("MAPI")
            getNamespace.Logon "MyProfile", , False
            If Me.cboType = "Taak" Then
                If Me.txtDatum < DateAdd("ww", 26, Date) Then Exit Sub
                iA = Array(0, 1, 3, 6, 12, 26)
                Set outObj = CreateObject("Outlook.Application")
                For i = 0 To 5
                    If Me.chkAddedToOutlook = False Then
                        Set outTask = outObj.CreateItem(olTaskItem)
                        With outTask
                            .StartDate = DateAdd("ww", -iA(i), DateValue(Me.txtDatum))
                            .Subject = Me.txtSubject
                            .Body = Nz(Me.txtApptNotes, "")
                            .Sensitivity = olPrivate
                            If Me.txtReminder.Value > 0 Then
                                .ReminderMinutesBeforeStart = Nz(Me.txtApptReminderDuration, 15)
                                .ReminderSet = True
                            End If
                            .Save
                            If Me.Dirty Then Me.Dirty = False
                        End With
                    End If
                Next i
                Set outTask = Nothing
                Set outObj = Nothing
                Me.AddedToOutlook = True
            Else
                If Me.chkAddedToOutlook = False Then
                    Set OutAppt = outObj.CreateItem(olAppointmentItem)
                    With OutAppt
                        ''.Visible = True
                        .Start = DateValue(Me.txtDatum) + TimeValue(Me.txtTijd)
                        .Duration = Me.txtApptDuration.Value
                        .Subject = Me.txtSubject
                        .Body = Nz(Me.txtApptNotes, "")
                        .Location = Nz(Me.txtApptLocation, "")
                        .Sensitivity = olPrivate
                        If Me.txtReminder.Value > 0 Then
                            .ReminderMinutesBeforeStart = Nz(Me.txtApptReminderDuration, 15)
                            .ReminderSet = True
                        End If
                        ''.Display
                        .Save
                        Me.AddedToOutlook = True
                        If Me.Dirty Then Me.Dirty = False
                    End With
                    Set outObj = Nothing
                    Set OutAppt = Nothing
                End If
                Me.cmdSluiten.SetFocus
                Me.cmdAfspraak.Enabled = False
            End If
        End If
    Next
        
End Sub
Ik heb alle ingevulde velden op een formulier staan, dus de code wordt vanuit dat formulier afgetrapt. Dat zal jij ook wel doen, maar ongetwijfeld met andere objectnamen :). De code heeft ook nog een variant met een herhalende taak; die keuze wordt nu bepaald met een keuzelijst. Dat deel kun je er dus nog uitslopen als je wilt.
 
Uit de Help (wat een aardige bron is dat toch) dit voorbeeldje, dat nog werkt ook (met een kleine aanpassing, dat wel)
Code:
Sub CreateAppt()
Dim myItem As Object
Dim myRequiredAttendee  As Outlook.Recipient, myOptionalAttendee  As Outlook.Recipient, myResourceAttendee As Outlook.Recipient

    Set myItem = Outlook.CreateItem(olAppointmentItem)
    With myItem
        .MeetingStatus = olMeeting
        .Subject = "Strategy Meeting"
        .Location = "Conf Room All Stars"
        .Start = #6/24/2018 1:30:00 PM#
        .Duration = 90
        Set myRequiredAttendee = .Recipients.Add("Nate Sun")
        myRequiredAttendee.Type = olRequired
        Set myOptionalAttendee = .Recipients.Add("Kevin Kennedy")
        myOptionalAttendee.Type = olOptional
        Set myResourceAttendee = .Recipients.Add("Conf Rm All Stars")
        myResourceAttendee.Type = olResource
        .Display
        .Send
    End With
End Sub
 
Access 2007 login form nodig hard vanwege AVG

Wie kan mij helpen over access log in hoe werkt form voor 2007 uitleggen
of geef mij juist download toevoegen, is zeer dankbaar !

Want ...ik heb zoveel google doorgezocht al 3 dagen.
maar demo download is wel gevonden, werkt niet bij mij ;-(
Omdat button klikken met macro doet het niet.
Ik hoop dat je juist demo form login (let op access 2007)
 
@laurel: het is niet de bedoeling dat je inbreekt in een vraag van iemand anders. Maak een eigen vraag aan, zou ik zeggen. En probeer iets duidelijker te omschrijven wat je nu wilt, want eerlijk gezegd snap ik je vraag ook niet.
 
OctaFish hartstikke bedankt. Ik ga er mee aan het stoeien en probeer er uit te komen. Als het gelukt is laat ik het weten.
 
Hallo OctaFish

Het werkt, op een ding na. Ik gebruik onderstaande code:

DoCmd.Echo False
DoCmd.SetWarnings False
Dim myItem As Object
Dim myRequiredAttendee As Outlook.Recipient, myOptionalAttendee As Outlook.Recipient, myResourceAttendee As Outlook.Recipient

Set myItem = Outlook.CreateItem(olAppointmentItem)
With myItem
.MeetingStatus = olMeeting
.Subject = "Inzet bij een examen"
.Location = Me.Lokatie
.Start = Me.Tijd
.Duration = 90
Set myRequiredAttendee = .Recipients.Add(Me.Beoordelaar1Email)
myRequiredAttendee.Type = olRequired
Set myRequiredAttendee = .Recipients.Add(Me.Beoordelaar2Email)
myRequiredAttendee.Type = olRequired
.Display
.Send
End With
DoCmd.SetWarnings True
DoCmd.Echo True

Het probleem is dat ik de datum en tijd niet goed krijg. In de database is een veld datum en een veld tijd. Er moet in beide velden gekeken worden om de afspraat te maken.
Ik heb geprobeerd om de velden te koppelen met: Me.Datum & Me.Tijd. Dit werkt niet. Het is of datum, of tijd. Als ik datum gebruik gaat het goed, maar wordt de tijd op 00.00 - 01.30 gezet.
Gebruik ik tijd dan krijg ik de melding dat de datum in het verleden ligt en of ik toch door wil gaan.
Is er nog een andere mogelijkheid dat er gekeken wordt in beide velden?

Groet,
Ton
 
Je zegt dat je een veld [Tijd] hebt en een veld [Datum]. De vraag is: waarmee vul je die?
 
Ik vul een record met een examen. In het record zet ik in het veld datum de datum van het examen (bijv. 11-06-2018) en in het veld tijd de aanvangstijd (10:00) van het examen.
In het veld beoordelaar1 staat de naam van de examinator. Alles gaat goed als ik op de knop druk om het script te starten, behalve de datum of tijd waarop de afspraak in de agenda gezet wordt.
In het bovenvermelde script wordt nu het veld tijd gebruikt. De afspraak komt wel op de juiste tijd bij de beoordelaar in de agenda te staan, alleen de datum klopt niet (31-12-1899).
Verander ik de .Start in Me.Datum dan wordt de afspraak wel op de juiste datum in de agenda geplaatst, alleen als tijdstip wordt dan 00.00-01.30 uur vermeld.
In het aangeleverde voorbeeld wordt de start vermeld als .Start = #6/11/2018 10:00:00 AM#. Hoe krijg ik het nu voor elkaar dat er gekeken wordt in het veld Me.Datum en Me.Tijd? zodat de afspraak en op de juiste datum en op de juiste tijd in de agenda wordt gezet? Is het trouwens ook mogelijk om er een reminder op te zetten?
 
Je geeft veel tekst, maar niet wat ik vraag :). Je hebt dus twee velden: [Datum] en [Tijd]. De vraag is: waar vul je die mee? Ik vermoed dat je het veld [Datum] vult met =Date(), maar wat zet je in [Tijd]?
 
Ik begrijp echt niet wat je bedoelt. De opmaak van de velden is Opmaak.jpg Ik heb een datum ingevoerd met het format 99-99-00;; en een tijd met het format 00:00;0;_
Deze gegevens komen ook terug in een rapport als ik dit opvraag. Waar kan ik eventueel vinden wat ik in een bepaald veld zet?
 
Format verbloemt de werkelijke gegevens die er staan. Een datum/tijd veld bevat in werkelijkheid getallen. Je moet dan ook geen en gebruiken maar +.

De datum 13-06-2018 is in werkelijkheid 43264,000 de tijd 10:00 is in werkelijkheid 10/24 = 0,416667. Als je dus alleen Me.Tijd gebruikt dan zal dit gezien worden als jaar 0 ofwel 31-12-1899 + de tijd. Als je alleen Me.Datum gebruikt dan zal de tijd gezien worden als 0 = 0:00. Als je ze bij elkaar optelt dan krijg je 43264, 416667 ofwel 13-06-2018 10:00.
 
Inderdaad. Het probleem is nu opgelost v.w.b. de juiste datum met het juiste tijdstip.
Kwam er alleen nog achter dat als het veld beoordelaar2Email niet gevuld is er een foutmelding komt. "Fout 13 tijdens uitvoering. Typen komen niet met elkaar overeen"
Als ik dan de foutopsporing aanklik is de volgende regel geel gearceerd: Set myRequiredAttendee = .Recipients.Add(Me.Beoordelaar2Email)
Ik ga er vanuit dat dit te maken heeft met het feit dat het veld Beoordelaar2Email niet gevuld is. Als ik dan het VBA venster wil sluiten slaat de hele Db vast.
Vul ik het veld wel dan loopt het script gewoon door.
Is hier nog iets aan te doen?
 
De afspraaktijd doe ik trouwens meestal zo:
PHP:
        .Start = DateValue(Me.txtDatum) + TimeValue(Me.txtTijd)
Om het verhaal compleet te maken :). Wat je email probleem betreft: afvangen dat het veld leeg is voordat je het vult. Dus zoiets:
Code:
    If Not Me.Beoordelaar2Email = vbNullString Then
        Set myRequiredAttendee = .Recipients.Add(Me.Beoordelaar2Email)
        myRequiredAttendee.Type = olRequired
    End If
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan