A Microsoft Outlook email forum. Outlook Banter

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » Outlook Banter forum » Microsoft Outlook Email Newsgroups » Outlook and VBA
Site Map Home Register Authors List Search Today's Posts Mark Forums Read Web Partners

Calendar Macro for Outlook 2007



 
 
Thread Tools Search this Thread Display Modes
  #1  
Old June 27th 07, 05:44 PM posted to microsoft.public.outlook.program_vba
Bravadarose
external usenet poster
 
Posts: 2
Default Calendar Macro for Outlook 2007

I have a macro that works in Outlook 2003; however, it no longer works in
2007. A .cvs file is attached to an email and the macro is to put the
information from this file into the Outlook Calendar. It should delete
previous calendar entries within the same date range and replace with what is
in the new file. Could someone please help me convert my macro for 2007?

Below is my current code:


Sub ImportSchedule()

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim myOlApp
Dim myItem
Dim myAttachments
Dim strBodyText
Dim CRLF
Dim CRTEST
Dim intTxtStartDate, intTxtEndDate, intExchVariable
Dim strExchangeVariable
Dim strExchNewVariable
Dim strLine
Dim intStart
Dim intBreak
Dim strMsg
Dim intAdded
Dim intFirstDate
Dim strResult
Dim sFoldername As String
Dim objPage
Dim fs As Object
Dim s, n
Dim AttachName As String
Dim objAppt
Dim myNameSpace
Dim arrParams
Dim myOlApplic
Dim myAppointments
Dim currentAppointment
Dim onMapi As NameSpace
Dim ofFolder As MAPIFolder
Dim Message, Title, Default, MyValue, Style
Dim Message2, Title2, Default2, MyValue2
Dim strStart, strEnd, nCount
Dim strCalStart, strCalEnd, strTextStart, strTextEnd


'------------Check Attachment to see if it's schedule.txt---------
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.ActiveInspector.CurrentItem
Set myAttachments = myItem.Attachments
On Error Resume Next
AttachName = myAttachments.Item(1).DisplayName

If AttachName = "Schedule.txt" Then
myAttachments.Item(1).SaveAsFile "C:\" & _
myAttachments.Item(1).DisplayName

intFirstDate = 1
'^^^^^^^^^^^^Check Attachment to see if it's schedule.txt^^^^^^^^^

'---------------DELETE--------------------------------------------
'Set myOlApplic = CreateObject("Outlook.Application")
'Set myNameSpace = myOlApplic.GetNamespace("MAPI")
'Set myAppointments = myNameSpace.GetDefaultFolder _
' (olFolderCalendar).Items
'Set currentAppointment = myAppointments.Find("[Categories] = ""Staff Trak""")

'While TypeName(currentAppointment) "Nothing"
' currentAppointment.Delete
' Set currentAppointment = myAppointments.FindNext
'Wend
'^^^^^^^^^^^^^^^^^^DELETE^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'----------Open schedule.txt file and read it storing values in
strLine------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Schedule.txt")
Set strBodyText = f.OpenAsTextStream(ForReading, TristateFalse)
s = strBodyText.ReadAll
nCount = strBodyText.Count


Set onMapi = GetNamespace("MAPI")

If MsgBox("Will you currently be importing offline?", 3) = vbYes Then
If MsgBox("Will you be importing to a subfolder of the root
Calendar?", 3) = vbYes Then
Title = "Import Schedule (Working Offline)"
Message = "Please supply me with the name of your Root
Calendar Folder:"
Default = "Calendar"
MyValue = InputBox(Message, Title, Default)
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue).Folders(MyValue2)
Else
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue2)
End If


Else
Set ofFolder = onMapi.PickFolder
End If


If ofFolder Is Nothing Then
MsgBox "No Folder Selected, User Cancelled"
Else
MsgBox "Folder - " & ofFolder.Name & " was selected by the user"
Set myAppointments = ofFolder.Items
'/////////Need to get the start and end date of the report
strMsg = ""
intAdded = 0
strStart = ""

CRLF = ":::*" '---------------------Carrige Return Line Feed
CRTEST = ","
'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
intTxtStartDate = ""
intTxtEndDate = ""
intExchVariable = ""

strStart = ""
strEnd = ""
strExchangeVariable = ""

If intBreak 0 Then
Do Until intBreak = 0
strLine = Mid(s, intStart, intBreak - intStart)

If strLine "" Then
If intStart = 1 Then
intTxtStartDate = InStr(1, strLine,
CRTEST) '1ST COMMA start of the report
intTxtEndDate = InStr(intTxtStartDate +
1, strLine, CRTEST) '2ND COMMA end of report start time
intExchVariable = InStr(intTxtEndDate +
1, strLine, CRTEST) '3RD COMMA end of report start time
intExchVariableEnd =
InStr(intExchVariable + 1, strLine, CRTEST) 'end of report

strStart = Mid(strLine, intTxtStartDate
+ 1, intTxtEndDate - (intTxtStartDate + 1)) + " 00:00:00 AM"
strEnd = Mid(strLine, intTxtEndDate + 1,
intExchVariable - (intTxtEndDate + 1)) + " 23:59:00 PM"
strExchangeVariable = Mid(strLine,
intExchVariable + 1, intBreak - (intTest + 4))


End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)

Loop
End If
'////////////////

strExchNewVariable = "[Categories] = """ + strExchangeVariable +
""""
Set currentAppointment = myAppointments.Find(strExchNewVariable)


While TypeName(currentAppointment) "Nothing"
strCalStart = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strCalEnd = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strTextStart = FormatDateTime(strStart, vbGeneralDate)
strTextEnd = FormatDateTime(strEnd, vbGeneralDate)

If ((DateValue(strCalStart) = DateValue(strTextStart)) And
(DateValue(strCalEnd) = DateValue(strTextEnd))) Then
currentAppointment.Delete
End If

Set currentAppointment = myAppointments.FindNext
Wend
End If



CRLF = ":::*" '---------------------Carrige Return Line Feed

strMsg = ""
intAdded = 0

'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
If intBreak 0 Then
Do Until intBreak = 0

strLine = Mid(s, intStart, intBreak - intStart)
strNoLine = InStr(1, strLine, "Nothing")


If strLine "" Then
'Do not want to bring in the 1st line, it now has the
start and enddate of report
If strNoLine = 0 Then
strResult = AddAppt(strLine, ofFolder)
'Sends values to AddAppt Function
strMsg = strMsg & CRLF & strResult
intAdded = intAdded + 1
End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)
Loop
End If
'----------Open schedule.txt file and read it storing values in
strLine------------
'Else
' Exit Sub
End If
f.Delete 'Deletes saved file from C:\
myItem.Close (olDiscard) 'Closes the Inspector window
End Sub

Function AddAppt(strParams, ofFolder)

Dim objAppt As AppointmentItem
Dim arrParams
Dim varStart
Dim strMsg
Dim StartDate, EndDate
Dim check

On Error Resume Next

Set objAppt = ofFolder.Items.Add(olAppointmentItem)



'Set objAppt = Application.CreateItem(olAppointmentItem)


'This function will only work in VBScript 2.0 and later


arrParams = Split(strParams, ",") 'Reads the commas out of the file.
objAppt.Subject = arrParams(0)

'Determine whether an all day event or not
objAppt.AllDayEvent = arrParams(5)

If objAppt.AllDayEvent = True Then
'treats all-day events as single day
varStart = CDate(arrParams(1) & " 12:00 AM")
objAppt.Start = varStart
Else
objAppt.Start = arrParams(1) & " " & arrParams(2)
objAppt.End = arrParams(3) & " " & arrParams(4)

End If

objAppt.ReminderSet = arrParams(6)
If objAppt.ReminderSet = True Then
objAppt.ReminderMinutesBeforeStart = _
DateDiff("m", arrParams(7) & " " & arrParams(8), objAppt.Start)
End If
objAppt.Categories = arrParams(9)
objAppt.Body = arrParams(10)
objAppt.Location = arrParams(11)


objAppt.Save
objAppt.Close (g_Const_olSave)

End Function


  #2  
Old June 27th 07, 11:14 PM posted to microsoft.public.outlook.program_vba
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 11,651
Default Calendar Macro for Outlook 2007

What in particular doesn't work?

--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54


"Bravadarose" wrote in message ...
I have a macro that works in Outlook 2003; however, it no longer works in
2007. A .cvs file is attached to an email and the macro is to put the
information from this file into the Outlook Calendar. It should delete
previous calendar entries within the same date range and replace with what is
in the new file. Could someone please help me convert my macro for 2007?

Below is my current code:


Sub ImportSchedule()

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim myOlApp
Dim myItem
Dim myAttachments
Dim strBodyText
Dim CRLF
Dim CRTEST
Dim intTxtStartDate, intTxtEndDate, intExchVariable
Dim strExchangeVariable
Dim strExchNewVariable
Dim strLine
Dim intStart
Dim intBreak
Dim strMsg
Dim intAdded
Dim intFirstDate
Dim strResult
Dim sFoldername As String
Dim objPage
Dim fs As Object
Dim s, n
Dim AttachName As String
Dim objAppt
Dim myNameSpace
Dim arrParams
Dim myOlApplic
Dim myAppointments
Dim currentAppointment
Dim onMapi As NameSpace
Dim ofFolder As MAPIFolder
Dim Message, Title, Default, MyValue, Style
Dim Message2, Title2, Default2, MyValue2
Dim strStart, strEnd, nCount
Dim strCalStart, strCalEnd, strTextStart, strTextEnd


'------------Check Attachment to see if it's schedule.txt---------
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.ActiveInspector.CurrentItem
Set myAttachments = myItem.Attachments
On Error Resume Next
AttachName = myAttachments.Item(1).DisplayName

If AttachName = "Schedule.txt" Then
myAttachments.Item(1).SaveAsFile "C:\" & _
myAttachments.Item(1).DisplayName

intFirstDate = 1
'^^^^^^^^^^^^Check Attachment to see if it's schedule.txt^^^^^^^^^

'---------------DELETE--------------------------------------------
'Set myOlApplic = CreateObject("Outlook.Application")
'Set myNameSpace = myOlApplic.GetNamespace("MAPI")
'Set myAppointments = myNameSpace.GetDefaultFolder _
' (olFolderCalendar).Items
'Set currentAppointment = myAppointments.Find("[Categories] = ""Staff Trak""")

'While TypeName(currentAppointment) "Nothing"
' currentAppointment.Delete
' Set currentAppointment = myAppointments.FindNext
'Wend
'^^^^^^^^^^^^^^^^^^DELETE^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'----------Open schedule.txt file and read it storing values in
strLine------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Schedule.txt")
Set strBodyText = f.OpenAsTextStream(ForReading, TristateFalse)
s = strBodyText.ReadAll
nCount = strBodyText.Count


Set onMapi = GetNamespace("MAPI")

If MsgBox("Will you currently be importing offline?", 3) = vbYes Then
If MsgBox("Will you be importing to a subfolder of the root
Calendar?", 3) = vbYes Then
Title = "Import Schedule (Working Offline)"
Message = "Please supply me with the name of your Root
Calendar Folder:"
Default = "Calendar"
MyValue = InputBox(Message, Title, Default)
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue).Folders(MyValue2)
Else
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue2)
End If


Else
Set ofFolder = onMapi.PickFolder
End If


If ofFolder Is Nothing Then
MsgBox "No Folder Selected, User Cancelled"
Else
MsgBox "Folder - " & ofFolder.Name & " was selected by the user"
Set myAppointments = ofFolder.Items
'/////////Need to get the start and end date of the report
strMsg = ""
intAdded = 0
strStart = ""

CRLF = ":::*" '---------------------Carrige Return Line Feed
CRTEST = ","
'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
intTxtStartDate = ""
intTxtEndDate = ""
intExchVariable = ""

strStart = ""
strEnd = ""
strExchangeVariable = ""

If intBreak 0 Then
Do Until intBreak = 0
strLine = Mid(s, intStart, intBreak - intStart)

If strLine "" Then
If intStart = 1 Then
intTxtStartDate = InStr(1, strLine,
CRTEST) '1ST COMMA start of the report
intTxtEndDate = InStr(intTxtStartDate +
1, strLine, CRTEST) '2ND COMMA end of report start time
intExchVariable = InStr(intTxtEndDate +
1, strLine, CRTEST) '3RD COMMA end of report start time
intExchVariableEnd =
InStr(intExchVariable + 1, strLine, CRTEST) 'end of report

strStart = Mid(strLine, intTxtStartDate
+ 1, intTxtEndDate - (intTxtStartDate + 1)) + " 00:00:00 AM"
strEnd = Mid(strLine, intTxtEndDate + 1,
intExchVariable - (intTxtEndDate + 1)) + " 23:59:00 PM"
strExchangeVariable = Mid(strLine,
intExchVariable + 1, intBreak - (intTest + 4))


End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)

Loop
End If
'////////////////

strExchNewVariable = "[Categories] = """ + strExchangeVariable +
""""
Set currentAppointment = myAppointments.Find(strExchNewVariable)


While TypeName(currentAppointment) "Nothing"
strCalStart = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strCalEnd = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strTextStart = FormatDateTime(strStart, vbGeneralDate)
strTextEnd = FormatDateTime(strEnd, vbGeneralDate)

If ((DateValue(strCalStart) = DateValue(strTextStart)) And
(DateValue(strCalEnd) = DateValue(strTextEnd))) Then
currentAppointment.Delete
End If

Set currentAppointment = myAppointments.FindNext
Wend
End If



CRLF = ":::*" '---------------------Carrige Return Line Feed

strMsg = ""
intAdded = 0

'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
If intBreak 0 Then
Do Until intBreak = 0

strLine = Mid(s, intStart, intBreak - intStart)
strNoLine = InStr(1, strLine, "Nothing")


If strLine "" Then
'Do not want to bring in the 1st line, it now has the
start and enddate of report
If strNoLine = 0 Then
strResult = AddAppt(strLine, ofFolder)
'Sends values to AddAppt Function
strMsg = strMsg & CRLF & strResult
intAdded = intAdded + 1
End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)
Loop
End If
'----------Open schedule.txt file and read it storing values in
strLine------------
'Else
' Exit Sub
End If
f.Delete 'Deletes saved file from C:\
myItem.Close (olDiscard) 'Closes the Inspector window
End Sub

Function AddAppt(strParams, ofFolder)

Dim objAppt As AppointmentItem
Dim arrParams
Dim varStart
Dim strMsg
Dim StartDate, EndDate
Dim check

On Error Resume Next

Set objAppt = ofFolder.Items.Add(olAppointmentItem)



'Set objAppt = Application.CreateItem(olAppointmentItem)


'This function will only work in VBScript 2.0 and later


arrParams = Split(strParams, ",") 'Reads the commas out of the file.
objAppt.Subject = arrParams(0)

'Determine whether an all day event or not
objAppt.AllDayEvent = arrParams(5)

If objAppt.AllDayEvent = True Then
'treats all-day events as single day
varStart = CDate(arrParams(1) & " 12:00 AM")
objAppt.Start = varStart
Else
objAppt.Start = arrParams(1) & " " & arrParams(2)
objAppt.End = arrParams(3) & " " & arrParams(4)

End If

objAppt.ReminderSet = arrParams(6)
If objAppt.ReminderSet = True Then
objAppt.ReminderMinutesBeforeStart = _
DateDiff("m", arrParams(7) & " " & arrParams(8), objAppt.Start)
End If
objAppt.Categories = arrParams(9)
objAppt.Body = arrParams(10)
objAppt.Location = arrParams(11)


objAppt.Save
objAppt.Close (g_Const_olSave)

End Function


  #3  
Old June 28th 07, 03:32 PM posted to microsoft.public.outlook.program_vba
Bravadarose
external usenet poster
 
Posts: 2
Default Calendar Macro for Outlook 2007

When I run it I get a Run-time error '91': Object variable or With block
variable not set. I go into debug and it Highlights this line:

Set myItem = myOlApp.ActiveInspector.CurrentItem

"Sue Mosher [MVP-Outlook]" wrote:

What in particular doesn't work?

--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54


"Bravadarose" wrote in message ...
I have a macro that works in Outlook 2003; however, it no longer works in
2007. A .cvs file is attached to an email and the macro is to put the
information from this file into the Outlook Calendar. It should delete
previous calendar entries within the same date range and replace with what is
in the new file. Could someone please help me convert my macro for 2007?

Below is my current code:


Sub ImportSchedule()

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim myOlApp
Dim myItem
Dim myAttachments
Dim strBodyText
Dim CRLF
Dim CRTEST
Dim intTxtStartDate, intTxtEndDate, intExchVariable
Dim strExchangeVariable
Dim strExchNewVariable
Dim strLine
Dim intStart
Dim intBreak
Dim strMsg
Dim intAdded
Dim intFirstDate
Dim strResult
Dim sFoldername As String
Dim objPage
Dim fs As Object
Dim s, n
Dim AttachName As String
Dim objAppt
Dim myNameSpace
Dim arrParams
Dim myOlApplic
Dim myAppointments
Dim currentAppointment
Dim onMapi As NameSpace
Dim ofFolder As MAPIFolder
Dim Message, Title, Default, MyValue, Style
Dim Message2, Title2, Default2, MyValue2
Dim strStart, strEnd, nCount
Dim strCalStart, strCalEnd, strTextStart, strTextEnd


'------------Check Attachment to see if it's schedule.txt---------
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.ActiveInspector.CurrentItem
Set myAttachments = myItem.Attachments
On Error Resume Next
AttachName = myAttachments.Item(1).DisplayName

If AttachName = "Schedule.txt" Then
myAttachments.Item(1).SaveAsFile "C:\" & _
myAttachments.Item(1).DisplayName

intFirstDate = 1
'^^^^^^^^^^^^Check Attachment to see if it's schedule.txt^^^^^^^^^

'---------------DELETE--------------------------------------------
'Set myOlApplic = CreateObject("Outlook.Application")
'Set myNameSpace = myOlApplic.GetNamespace("MAPI")
'Set myAppointments = myNameSpace.GetDefaultFolder _
' (olFolderCalendar).Items
'Set currentAppointment = myAppointments.Find("[Categories] = ""Staff Trak""")

'While TypeName(currentAppointment) "Nothing"
' currentAppointment.Delete
' Set currentAppointment = myAppointments.FindNext
'Wend
'^^^^^^^^^^^^^^^^^^DELETE^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'----------Open schedule.txt file and read it storing values in
strLine------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Schedule.txt")
Set strBodyText = f.OpenAsTextStream(ForReading, TristateFalse)
s = strBodyText.ReadAll
nCount = strBodyText.Count


Set onMapi = GetNamespace("MAPI")

If MsgBox("Will you currently be importing offline?", 3) = vbYes Then
If MsgBox("Will you be importing to a subfolder of the root
Calendar?", 3) = vbYes Then
Title = "Import Schedule (Working Offline)"
Message = "Please supply me with the name of your Root
Calendar Folder:"
Default = "Calendar"
MyValue = InputBox(Message, Title, Default)
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue).Folders(MyValue2)
Else
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue2)
End If


Else
Set ofFolder = onMapi.PickFolder
End If


If ofFolder Is Nothing Then
MsgBox "No Folder Selected, User Cancelled"
Else
MsgBox "Folder - " & ofFolder.Name & " was selected by the user"
Set myAppointments = ofFolder.Items
'/////////Need to get the start and end date of the report
strMsg = ""
intAdded = 0
strStart = ""

CRLF = ":::*" '---------------------Carrige Return Line Feed
CRTEST = ","
'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
intTxtStartDate = ""
intTxtEndDate = ""
intExchVariable = ""

strStart = ""
strEnd = ""
strExchangeVariable = ""

If intBreak 0 Then
Do Until intBreak = 0
strLine = Mid(s, intStart, intBreak - intStart)

If strLine "" Then
If intStart = 1 Then
intTxtStartDate = InStr(1, strLine,
CRTEST) '1ST COMMA start of the report
intTxtEndDate = InStr(intTxtStartDate +
1, strLine, CRTEST) '2ND COMMA end of report start time
intExchVariable = InStr(intTxtEndDate +
1, strLine, CRTEST) '3RD COMMA end of report start time
intExchVariableEnd =
InStr(intExchVariable + 1, strLine, CRTEST) 'end of report

strStart = Mid(strLine, intTxtStartDate
+ 1, intTxtEndDate - (intTxtStartDate + 1)) + " 00:00:00 AM"
strEnd = Mid(strLine, intTxtEndDate + 1,
intExchVariable - (intTxtEndDate + 1)) + " 23:59:00 PM"
strExchangeVariable = Mid(strLine,
intExchVariable + 1, intBreak - (intTest + 4))


End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)

Loop
End If
'////////////////

strExchNewVariable = "[Categories] = """ + strExchangeVariable +
""""
Set currentAppointment = myAppointments.Find(strExchNewVariable)


While TypeName(currentAppointment) "Nothing"
strCalStart = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strCalEnd = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strTextStart = FormatDateTime(strStart, vbGeneralDate)
strTextEnd = FormatDateTime(strEnd, vbGeneralDate)

If ((DateValue(strCalStart) = DateValue(strTextStart)) And
(DateValue(strCalEnd) = DateValue(strTextEnd))) Then
currentAppointment.Delete
End If

Set currentAppointment = myAppointments.FindNext
Wend
End If



CRLF = ":::*" '---------------------Carrige Return Line Feed

strMsg = ""
intAdded = 0

'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
If intBreak 0 Then
Do Until intBreak = 0

strLine = Mid(s, intStart, intBreak - intStart)
strNoLine = InStr(1, strLine, "Nothing")


If strLine "" Then
'Do not want to bring in the 1st line, it now has the
start and enddate of report
If strNoLine = 0 Then
strResult = AddAppt(strLine, ofFolder)
'Sends values to AddAppt Function
strMsg = strMsg & CRLF & strResult
intAdded = intAdded + 1
End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)
Loop
End If
'----------Open schedule.txt file and read it storing values in
strLine------------
'Else
' Exit Sub
End If
f.Delete 'Deletes saved file from C:\
myItem.Close (olDiscard) 'Closes the Inspector window
End Sub

Function AddAppt(strParams, ofFolder)

Dim objAppt As AppointmentItem
Dim arrParams
Dim varStart
Dim strMsg
Dim StartDate, EndDate
Dim check

On Error Resume Next

Set objAppt = ofFolder.Items.Add(olAppointmentItem)



'Set objAppt = Application.CreateItem(olAppointmentItem)


'This function will only work in VBScript 2.0 and later


arrParams = Split(strParams, ",") 'Reads the commas out of the file.
objAppt.Subject = arrParams(0)

'Determine whether an all day event or not
objAppt.AllDayEvent = arrParams(5)

If objAppt.AllDayEvent = True Then
'treats all-day events as single day
varStart = CDate(arrParams(1) & " 12:00 AM")
objAppt.Start = varStart
Else
objAppt.Start = arrParams(1) & " " & arrParams(2)
objAppt.End = arrParams(3) & " " & arrParams(4)

End If

objAppt.ReminderSet = arrParams(6)
If objAppt.ReminderSet = True Then
objAppt.ReminderMinutesBeforeStart = _
DateDiff("m", arrParams(7) & " " & arrParams(8), objAppt.Start)
End If
objAppt.Categories = arrParams(9)
objAppt.Body = arrParams(10)
objAppt.Location = arrParams(11)


objAppt.Save

  #4  
Old June 28th 07, 03:46 PM posted to microsoft.public.outlook.program_vba
Sue Mosher [MVP-Outlook]
external usenet poster
 
Posts: 11,651
Default Calendar Macro for Outlook 2007

The error suggests that ActiveInspector returns Nothing, in other words, that you do not have any item open in its own window when you run the code.

Also note that you should never use this statement in Outlook VBA:

Set myOlApp = CreateObject("Outlook.Application")

Instead, either use this statement:

Set myOlApp = Application

or remove that statement completely and replace myOlApp with the intrinsic Application object.
--
Sue Mosher, Outlook MVP
Author of Microsoft Outlook 2007 Programming:
Jumpstart for Power Users and Administrators
http://www.outlookcode.com/article.aspx?id=54


"Bravadarose" wrote in message ...
When I run it I get a Run-time error '91': Object variable or With block
variable not set. I go into debug and it Highlights this line:

Set myItem = myOlApp.ActiveInspector.CurrentItem

I have a macro that works in Outlook 2003; however, it no longer works in
2007. A .cvs file is attached to an email and the macro is to put the
information from this file into the Outlook Calendar. It should delete
previous calendar entries within the same date range and replace with what is
in the new file. Could someone please help me convert my macro for 2007?

Below is my current code:


Sub ImportSchedule()

Const ForReading = 1, ForWriting = 2, ForAppending = 3
Dim myOlApp
Dim myItem
Dim myAttachments
Dim strBodyText
Dim CRLF
Dim CRTEST
Dim intTxtStartDate, intTxtEndDate, intExchVariable
Dim strExchangeVariable
Dim strExchNewVariable
Dim strLine
Dim intStart
Dim intBreak
Dim strMsg
Dim intAdded
Dim intFirstDate
Dim strResult
Dim sFoldername As String
Dim objPage
Dim fs As Object
Dim s, n
Dim AttachName As String
Dim objAppt
Dim myNameSpace
Dim arrParams
Dim myOlApplic
Dim myAppointments
Dim currentAppointment
Dim onMapi As NameSpace
Dim ofFolder As MAPIFolder
Dim Message, Title, Default, MyValue, Style
Dim Message2, Title2, Default2, MyValue2
Dim strStart, strEnd, nCount
Dim strCalStart, strCalEnd, strTextStart, strTextEnd


'------------Check Attachment to see if it's schedule.txt---------
Set myOlApp = CreateObject("Outlook.Application")
Set myItem = myOlApp.ActiveInspector.CurrentItem
Set myAttachments = myItem.Attachments
On Error Resume Next
AttachName = myAttachments.Item(1).DisplayName

If AttachName = "Schedule.txt" Then
myAttachments.Item(1).SaveAsFile "C:\" & _
myAttachments.Item(1).DisplayName

intFirstDate = 1
'^^^^^^^^^^^^Check Attachment to see if it's schedule.txt^^^^^^^^^

'---------------DELETE--------------------------------------------
'Set myOlApplic = CreateObject("Outlook.Application")
'Set myNameSpace = myOlApplic.GetNamespace("MAPI")
'Set myAppointments = myNameSpace.GetDefaultFolder _
' (olFolderCalendar).Items
'Set currentAppointment = myAppointments.Find("[Categories] = ""Staff Trak""")

'While TypeName(currentAppointment) "Nothing"
' currentAppointment.Delete
' Set currentAppointment = myAppointments.FindNext
'Wend
'^^^^^^^^^^^^^^^^^^DELETE^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'----------Open schedule.txt file and read it storing values in
strLine------------
Set fs = CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile("C:\Schedule.txt")
Set strBodyText = f.OpenAsTextStream(ForReading, TristateFalse)
s = strBodyText.ReadAll
nCount = strBodyText.Count


Set onMapi = GetNamespace("MAPI")

If MsgBox("Will you currently be importing offline?", 3) = vbYes Then
If MsgBox("Will you be importing to a subfolder of the root
Calendar?", 3) = vbYes Then
Title = "Import Schedule (Working Offline)"
Message = "Please supply me with the name of your Root
Calendar Folder:"
Default = "Calendar"
MyValue = InputBox(Message, Title, Default)
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue).Folders(MyValue2)
Else
Message2 = "Please supply me with the name of the Calander
you wish to import to:"
Title2 = "Import Schedule (Working Offline)"
Default2 = "Calendar"
MyValue2 = InputBox(Message2, Title2, Default2)
Set ofFolder = onMapi.Folders("Personal
Folders").Folders(MyValue2)
End If


Else
Set ofFolder = onMapi.PickFolder
End If


If ofFolder Is Nothing Then
MsgBox "No Folder Selected, User Cancelled"
Else
MsgBox "Folder - " & ofFolder.Name & " was selected by the user"
Set myAppointments = ofFolder.Items
'/////////Need to get the start and end date of the report
strMsg = ""
intAdded = 0
strStart = ""

CRLF = ":::*" '---------------------Carrige Return Line Feed
CRTEST = ","
'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
intTxtStartDate = ""
intTxtEndDate = ""
intExchVariable = ""

strStart = ""
strEnd = ""
strExchangeVariable = ""

If intBreak 0 Then
Do Until intBreak = 0
strLine = Mid(s, intStart, intBreak - intStart)

If strLine "" Then
If intStart = 1 Then
intTxtStartDate = InStr(1, strLine,
CRTEST) '1ST COMMA start of the report
intTxtEndDate = InStr(intTxtStartDate +
1, strLine, CRTEST) '2ND COMMA end of report start time
intExchVariable = InStr(intTxtEndDate +
1, strLine, CRTEST) '3RD COMMA end of report start time
intExchVariableEnd =
InStr(intExchVariable + 1, strLine, CRTEST) 'end of report

strStart = Mid(strLine, intTxtStartDate
+ 1, intTxtEndDate - (intTxtStartDate + 1)) + " 00:00:00 AM"
strEnd = Mid(strLine, intTxtEndDate + 1,
intExchVariable - (intTxtEndDate + 1)) + " 23:59:00 PM"
strExchangeVariable = Mid(strLine,
intExchVariable + 1, intBreak - (intTest + 4))


End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)

Loop
End If
'////////////////

strExchNewVariable = "[Categories] = """ + strExchangeVariable +
""""
Set currentAppointment = myAppointments.Find(strExchNewVariable)


While TypeName(currentAppointment) "Nothing"
strCalStart = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strCalEnd = FormatDateTime(currentAppointment.Start,
vbGeneralDate)
strTextStart = FormatDateTime(strStart, vbGeneralDate)
strTextEnd = FormatDateTime(strEnd, vbGeneralDate)

If ((DateValue(strCalStart) = DateValue(strTextStart)) And
(DateValue(strCalEnd) = DateValue(strTextEnd))) Then
currentAppointment.Delete
End If

Set currentAppointment = myAppointments.FindNext
Wend
End If



CRLF = ":::*" '---------------------Carrige Return Line Feed

strMsg = ""
intAdded = 0

'Get the first line of the paramaters
intStart = 1
intBreak = InStr(intStart, s, CRLF)
If intBreak 0 Then
Do Until intBreak = 0

strLine = Mid(s, intStart, intBreak - intStart)
strNoLine = InStr(1, strLine, "Nothing")


If strLine "" Then
'Do not want to bring in the 1st line, it now has the
start and enddate of report
If strNoLine = 0 Then
strResult = AddAppt(strLine, ofFolder)
'Sends values to AddAppt Function
strMsg = strMsg & CRLF & strResult
intAdded = intAdded + 1
End If

Else
'exit at first blank line
Exit Do
End If

intStart = intBreak + 4
intBreak = InStr(intStart, s, CRLF)
Loop
End If
'----------Open schedule.txt file and read it storing values in
strLine------------
'Else
' Exit Sub
End If
f.Delete 'Deletes saved file from C:\
myItem.Close (olDiscard) 'Closes the Inspector window
End Sub

Function AddAppt(strParams, ofFolder)

Dim objAppt As AppointmentItem
Dim arrParams
Dim varStart
Dim strMsg
Dim StartDate, EndDate
Dim check

On Error Resume Next

Set objAppt = ofFolder.Items.Add(olAppointmentItem)



'Set objAppt = Application.CreateItem(olAppointmentItem)


'This function will only work in VBScript 2.0 and later


arrParams = Split(strParams, ",") 'Reads the commas out of the file.
objAppt.Subject = arrParams(0)

'Determine whether an all day event or not
objAppt.AllDayEvent = arrParams(5)

If objAppt.AllDayEvent = True Then
'treats all-day events as single day
varStart = CDate(arrParams(1) & " 12:00 AM")
objAppt.Start = varStart
Else
objAppt.Start = arrParams(1) & " " & arrParams(2)
objAppt.End = arrParams(3) & " " & arrParams(4)

End If

objAppt.ReminderSet = arrParams(6)
If objAppt.ReminderSet = True Then
objAppt.ReminderMinutesBeforeStart = _
DateDiff("m", arrParams(7) & " " & arrParams(8), objAppt.Start)
End If
objAppt.Categories = arrParams(9)
objAppt.Body = arrParams(10)
objAppt.Location = arrParams(11)


objAppt.Save

 




Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Writing a macro in Outlook 2007 Tammy Outlook - General Queries 2 May 8th 07 04:47 PM
(2007) Excel macro blocks Outlook??? C. Moya Outlook - General Queries 20 April 30th 07 05:18 PM
Outlook 2007: assigning keyboard shortcut to email editor macro Mikael Outlook and VBA 6 March 17th 07 07:42 PM
Macro works in Word 2007, but not in Outlook 2007 LesG Outlook and VBA 13 March 11th 07 12:30 AM
Outlook macro abends but Word macro runs successfully Jreue Outlook and VBA 0 December 14th 06 12:55 AM


All times are GMT +1. The time now is 08:39 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.Search Engine Friendly URLs by vBSEO 2.4.0
Copyright ©2004-2025 Outlook Banter.
The comments are property of their posters.