View Single Post
 
Old 04-12-2013, 05:52 AM
macropod's Avatar
macropod macropod is offline Windows 7 64bit Office 2010 32bit
Administrator
 
Join Date: Dec 2010
Location: Canberra, Australia
Posts: 22,370
macropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond reputemacropod has a reputation beyond repute
Default

With your 'UpdateCalendar' sub, you have some variable naming inconsistences that should be immediately apparent - especially if you set 'Option Explicity' at the top of your code module.

The other issues you'll have with running your 'UpdateCalendar' sub are: (a) you Quit Outlook before calling it; and (b) The sub has no Outlook objects of its own.

Although I'm no Outlook expert (I don't even use it, so I don't know the object model), you might try something based on:
Code:
Sub myButtonMacro3(control As IRibbonControl)
    Dim myDocName As String, mySession As String, myLeagueName As String
    Dim mySubject As String, myBody As String
    Dim objOutlook As Object, oItem As Object, olTsk As Object
    myDocName = ActiveDocument.Name
    myDocName = Left(myDocName, (InStrRev(myDocName, ".")) - 1)
    mySession = ""
    While IsNumeric(Right(myDocName, 1))
        mySession = Right(myDocName, 1) + mySession
        myDocName = Left(myDocName, Len(myDocName) - 1)
    Wend
    myLeagueName = Left(myDocName, Len(myDocName) - 4)
    mySubject = "NewsLetter For " + myLeagueName + " Session " + mySession
    myBody = "Here you go ..."
    ActiveDocument.Save
    'Start/Run Outlook.
    Set oOutlookApp = GetObject(, "Outlook.Application")
    If Err <> 0 Then
        Set oOutlookApp = CreateObject("Outlook.Application")
        bStarted = True
    End If
    'Sen Email.
    Set oItem = oOutlookApp.CreateItem(olMailItem)
    With oItem
        .To = "xxx@gmail.com"
        .Subject = mySubject
        .Body = myBody
        .Attachments.Add ActiveDocument.FullName
        .Send
    End With
    'Update Calendar.
    Set olTsk = objOutlook.TaskItem
    For Each olTsk In objOutlook
        With olTsk
            If .Name = myLeagueName & " Newsletter" Then
                .Status = olWaitingOnSomeoneElse
                .Complete = "75%"
                .Categories = "Newsletters : Sent"
                .Save
            End If
        End With
    Next olTsk
    'Quit Outlook if we started it.
    If bStarted Then oOutlookApp.Quit
    Set oItem = Nothing: Set olTsk = Nothing: Set oOutlookApp = Nothing
    Application.Quit
End Sub
As for Intellisense, your code uses late binding. If you set a reference to Outlook, you can develop your code with early binding and thus have Intellisense access. You can always revert to late binding when you're done.
__________________
Cheers,
Paul Edstein
[Fmr MS MVP - Word]
Reply With Quote