Hallo,
Ik ben bezig om vanuit een excel bestand een rooster om te zetten naar de agenda van outlook. dit lukt met bijgevoegde code inmiddels prima.
Nu is het alleen zo dat als iet wijzigt in het rooster er een nieuwe afspraak gemaakt wordt en de "oude' informatie blijft staan.
Dus hoe krijg ik het in VB geregeld om de oude afspraak te vervangen door de nieuwe.
Of eventueel de hele dag wissen en het rooster opnieuw toevoegen o.i.d.
Ik wil nog wel even melden dat ik sinds afgelopn donderdag in VB bezig ben en dat wat er nu aan code staat via diverse sites tot stand is gekomen.
Dus waarschijnlijk zal e.e.a. niet erg handig geprogrameerd zijn.....
Opmaak Excel is
Datum Taakcode Starttijd Eindtijd Info Dienst Aanvang Einde
--------------------------------------------------------------------------------------------------------------------------
VBA code:
Sub MakeAppts()
Dim olApp As Object
Dim olAppt As Object
Dim cel As Object
Dim sFind As String
Dim appt As Outlook.AppointmentItem
Dim olFolder As Outlook.MAPIFolder
Dim ns As Outlook.Namespace
Dim ol As New Outlook.Application
Dim objCopy As Outlook.AppointmentItem
Dim appointment As Outlook.AppointmentItem
Dim duplicate As Outlook.AppointmentItem
Set ns = ol.GetNamespace("MAPI")
Set olFolder = ns.GetDefaultFolder(olFolderCalendar)
Set myFolder_privCal = ol.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar)
Set olApp = CreateObject("Outlook.Application")
Set objItem_orig = myFolder_privCal.Items
objItem_orig.Sort ("Start")
For Each cel In Intersect(Sheets("Blad1").UsedRange, Sheets("Blad1").[a8:a80]).Cells
If cel.Offset(0, 1) <> "" Then
Set olAppt = olApp.CreateItem(1)
With olAppt
Set objCopy = objItem_orig.GetFirst
Plandatum = cel.Offset(0, 0)
Planstart = cel.Offset(0, 2)
Planeind = cel.Offset(0, 3)
.Start = Plandatum + Planstart
.End = Plandatum + Planeind
.Subject = cel.Offset(0, 1)
.Location = cel.Offset(0, 5)
.ReminderSet = False
'Controle op dubbele afspraken
sFind = "[Start] = '" & Format(.Start, "ddddd h:mm") & "' AND [Subject]='" & cel.Offset(0, 1) & "' And [End] = '" & Format(.End, "ddddd h:mm") & "'"
Set appt = olFolder.Items.Find(sFind)
If Not appt Is Nothing Then
GetAppt
appt.Delete
.Save
'GoTo dubbel
End If
'nieuwe of geupdate afspraak
.Save
End With
ElseIf (cel.Offset(0, 5) <> "Pauze") And (cel.Offset(0, 5) <> "Dag") Then
Set olAppt = olApp.CreateItem(1)
With olAppt
Plandatum = cel.Offset(0, 0)
Planstart = cel.Offset(0, 6)
Planeind = cel.Offset(0, 7)
.Start = Plandatum + Planstart
.End = Plandatum + Planeind
.Subject = cel.Offset(0, 4)
.Location = cel.Offset(0, 5)
.ReminderSet = False
'Controle op dubbele afspraken
sFind = "[Start] = '" & Format(.Start, "ddddd h:mm") & "' AND [Subject]='" & cel.Offset(0, 4) & "' And [End] = '" & Format(.End, "ddddd h:mm") & "'"
Set appt = olFolder.Items.Find(sFind)
If Not appt Is Nothing Then
GetAppt
appt.Delete
.Save
'GoTo dubbel
End If
'nieuwe of geupdate afspraakSave
.Save
End With
End If
dubbel:
Next
' Clean up...
MsgBox "Rooster is verwerkt in je Outlook agenda...", vbMsgBoxSetForeground
Set olNs = Nothing
Set olAppt = Nothing
Set olItem = Nothing
Set olApp = Nothing
End Sub
Ik ben bezig om vanuit een excel bestand een rooster om te zetten naar de agenda van outlook. dit lukt met bijgevoegde code inmiddels prima.
Nu is het alleen zo dat als iet wijzigt in het rooster er een nieuwe afspraak gemaakt wordt en de "oude' informatie blijft staan.
Dus hoe krijg ik het in VB geregeld om de oude afspraak te vervangen door de nieuwe.
Of eventueel de hele dag wissen en het rooster opnieuw toevoegen o.i.d.
Ik wil nog wel even melden dat ik sinds afgelopn donderdag in VB bezig ben en dat wat er nu aan code staat via diverse sites tot stand is gekomen.
Dus waarschijnlijk zal e.e.a. niet erg handig geprogrameerd zijn.....

Opmaak Excel is
Datum Taakcode Starttijd Eindtijd Info Dienst Aanvang Einde
--------------------------------------------------------------------------------------------------------------------------
VBA code:
Sub MakeAppts()
Dim olApp As Object
Dim olAppt As Object
Dim cel As Object
Dim sFind As String
Dim appt As Outlook.AppointmentItem
Dim olFolder As Outlook.MAPIFolder
Dim ns As Outlook.Namespace
Dim ol As New Outlook.Application
Dim objCopy As Outlook.AppointmentItem
Dim appointment As Outlook.AppointmentItem
Dim duplicate As Outlook.AppointmentItem
Set ns = ol.GetNamespace("MAPI")
Set olFolder = ns.GetDefaultFolder(olFolderCalendar)
Set myFolder_privCal = ol.GetNamespace("MAPI").GetDefaultFolder(olFolderCalendar)
Set olApp = CreateObject("Outlook.Application")
Set objItem_orig = myFolder_privCal.Items
objItem_orig.Sort ("Start")
For Each cel In Intersect(Sheets("Blad1").UsedRange, Sheets("Blad1").[a8:a80]).Cells
If cel.Offset(0, 1) <> "" Then
Set olAppt = olApp.CreateItem(1)
With olAppt
Set objCopy = objItem_orig.GetFirst
Plandatum = cel.Offset(0, 0)
Planstart = cel.Offset(0, 2)
Planeind = cel.Offset(0, 3)
.Start = Plandatum + Planstart
.End = Plandatum + Planeind
.Subject = cel.Offset(0, 1)
.Location = cel.Offset(0, 5)
.ReminderSet = False
'Controle op dubbele afspraken
sFind = "[Start] = '" & Format(.Start, "ddddd h:mm") & "' AND [Subject]='" & cel.Offset(0, 1) & "' And [End] = '" & Format(.End, "ddddd h:mm") & "'"
Set appt = olFolder.Items.Find(sFind)
If Not appt Is Nothing Then
GetAppt
appt.Delete
.Save
'GoTo dubbel
End If
'nieuwe of geupdate afspraak
.Save
End With
ElseIf (cel.Offset(0, 5) <> "Pauze") And (cel.Offset(0, 5) <> "Dag") Then
Set olAppt = olApp.CreateItem(1)
With olAppt
Plandatum = cel.Offset(0, 0)
Planstart = cel.Offset(0, 6)
Planeind = cel.Offset(0, 7)
.Start = Plandatum + Planstart
.End = Plandatum + Planeind
.Subject = cel.Offset(0, 4)
.Location = cel.Offset(0, 5)
.ReminderSet = False
'Controle op dubbele afspraken
sFind = "[Start] = '" & Format(.Start, "ddddd h:mm") & "' AND [Subject]='" & cel.Offset(0, 4) & "' And [End] = '" & Format(.End, "ddddd h:mm") & "'"
Set appt = olFolder.Items.Find(sFind)
If Not appt Is Nothing Then
GetAppt
appt.Delete
.Save
'GoTo dubbel
End If
'nieuwe of geupdate afspraakSave
.Save
End With
End If
dubbel:
Next
' Clean up...
MsgBox "Rooster is verwerkt in je Outlook agenda...", vbMsgBoxSetForeground
Set olNs = Nothing
Set olAppt = Nothing
Set olItem = Nothing
Set olApp = Nothing
End Sub
Laatst bewerkt: