Pages

Showing posts with label outlook. Show all posts
Showing posts with label outlook. Show all posts

Thursday, March 13, 2014

One Wrong Move Can Kill A WebEx

Stuck in a Server Closet: outlook
I was excited, I was es-static, I couldn't wait for the Web Ex. I was going to see the new Cisco product line offerings which I think could really be helpful here with my job.

Then at noon I suddenly realized I missed it.

I was perplexed, I had accepted the meeting invite from Cisco, it was on my calendar. How could I have been so busy to notice something popping up and interrupting my work?

Then I found it. The invite sent out from Cisco had NO reminder set. So when it came time for the 11AM meeting, nothing popped up on my computer or my phone. Nothing yelling at me to "join now!", just silence.

You can easily kill your sales pitch by doing everything right and one thing wrong.

Measure twice and cut once. You don't want to miss out on a million dollars because you rushed your invite.

Monday, February 10, 2014

An Outlook Signature Deployment and How it Changed My Way of Thinking

Stuck in a Server Closet: outlook
Over the course of the past few years our company has wanted to get everyone on a standardized signature to include company information, links and a professional picture of the employee to help give us a personal feel to clients. The idea was great, however deploying signatures to 40 or so employees seemed daunting at the time I had come on board, as well as making the signature its self which was based loosely on the original we had.

I have learned a lot in those past few years about the company, people, technology, and design hoping to make the process easier as some point.

It never happened however. Instead I struggled with the project, with issues surrounding the signature design and even worse compatibility among other programs.

The project changed, died off, came back and changed again. I was fed up, I was tired and most of all I was uninterested. I couldn't make parts of it work well. Images were blown up, Gmail just saw code and I was exhausted with the project altogether.

At the end of 2013 my supervisor had brought the project back up and decided on deploying it before our annual company meeting. I groaned but went along. He suggested we use a third party this time due to my busy schedule, hoping to make things smoother and finish quicker. I'll be the first to admit that utilizing an outside vendor to do "my" job seemed against my own nature, and I am 100% sure I resisted more than I should have. It took a bit for me to warm up to the idea but got them going on it anyway.

The vendor came in, and I showed him what we had and our issues with my ideas and let him get to work. He came back with a signature that looked similar but different and I was actually very pleased on how it turned out. I got my supervisor involved and he stated that he liked it more as well. After some refinements the vendor left to work on it more at a later time and to make it auto populate from excel based data so I could create them easily. Testing of the signature came and went and this time, no garbled code in Gmail, and nothing weird in different versions of Outlook. It became a big win to get even this far and my interested increased ever so slightly back into the project.

I ended up deploying the signatures myself (though it may have worked with a vendor) citing my users busy schedules and the cost of the vendor on site. We've achieved 100% deployment for the users who were with us and had professional photos taken, and all the while I was able to turn my attention to other projects while still having more than plenty to do. In the end my offload of this project to a vendor saved me a lot of time, and got the "leech" of a project out of my head while still being able to show progress week by week on it. Looking back it seemed silly to sit on my mess and not clean it up while all the while I could have utilized someone else to clean up the mess and come back with a steak dinner so to speak. Sitting on messes doesn't help anyone in the long run, the meal never gets made and you smell like rotten eggs. Sometimes, you just need to delegate.

Saturday, November 2, 2013

Another Macros Script for saving tons of emails into a standardize format

Stuck in a Server Closet: outlook
I honestly was passed down some of the code in this script so I am not sure who to give the original credit too!

I modified it to include both emails and meeting requests and error out if neither is acceptable. Added another cleanse group, saved the file in the following format (Project# SenderName DateTimeReceived Subject.msg)

If the senders name was not available (which is the case in some situations) it pulls the last 11 characters and creates a string to save it to when referenced.

Default save folder is C:\

If anyone can find the original poster please leave a comment below!

Enjoy!



Sub MASS_SAVE()
    Dim Mitem
    Dim prompt As String
    Dim name As String
    Dim Nname As String
    Dim Exp As Outlook.Explorer
    Dim sln As Outlook.Selection
    Dim saveSubject As String
    Dim senderName As String
    Dim senderCheck As String
    Dim msg As Object
    Dim timeSent As String

    Set Exp = Application.ActiveExplorer
    Set sln = Exp.Selection
   
    If sln.count = 0 Then
        MsgBox "No objects selected."
    Else
        myPath = BrowseForFolder("C:\")
        Set Mitem = Outlook.ActiveExplorer.Selection.Item(1)
 
        Nname = InputBox("Please enter in the Project #")

        For Each Mitem In sln
     
            If TypeName(Mitem) = "ReportItem" Or TypeName(Mitem) = "MailItem" Or TypeName(Mitem) = "MeetingItem" Then
       
                saveSubject = Mitem.Subject
               
                If Nname = "" Then
                    name = Mitem.Subject
                Else
                    name = Nname
                End If
               
                ' Cleanse illegal characters from subject... :/|*?<>" etc or sharepoint wont have it!
                name = Replace(name, "<", "(")
                name = Replace(name, ">", ")")
                name = Replace(name, "&", "n")
                name = Replace(name, "%", "pct")
                name = Replace(name, """", "'")
                name = Replace(name, "´", "'")
                name = Replace(name, "`", "'")
                name = Replace(name, "{", "(")
                name = Replace(name, "[", "(")
                name = Replace(name, "]", ")")
                name = Replace(name, "}", ")")
                name = Replace(name, "  ", "_")
                name = Replace(name, "   ", "_")
                name = Replace(name, "  ", "_")
                name = Replace(name, "..", "_")
                name = Replace(name, ".", "_")
                name = Replace(name, "__", "_")
                name = Replace(name, ": ", "_")
                name = Replace(name, ":", "_")
                name = Replace(name, "/", "_")
                name = Replace(name, "\", "_")
                name = Replace(name, "*", "_")
                name = Replace(name, "?", "_")
                name = Replace(name, """", "_")
                name = Replace(name, "__", "_")
                name = Replace(name, "|", "_")
               
                saveSubject = Replace(saveSubject, "<", "(")
                saveSubject = Replace(saveSubject, ">", ")")
                saveSubject = Replace(saveSubject, "&", "n")
                saveSubject = Replace(saveSubject, "%", "pct")
                saveSubject = Replace(saveSubject, """", "'")
                saveSubject = Replace(saveSubject, "´", "'")
                saveSubject = Replace(saveSubject, "`", "'")
                saveSubject = Replace(saveSubject, "{", "(")
                saveSubject = Replace(saveSubject, "[", "(")
                saveSubject = Replace(saveSubject, "]", ")")
                saveSubject = Replace(saveSubject, "}", ")")
                saveSubject = Replace(saveSubject, "  ", "_")
                saveSubject = Replace(saveSubject, "   ", "_")
                saveSubject = Replace(saveSubject, "  ", "_")
                saveSubject = Replace(saveSubject, "..", "_")
                saveSubject = Replace(saveSubject, ".", "_")
                saveSubject = Replace(saveSubject, "__", "_")
                saveSubject = Replace(saveSubject, ": ", "_")
                saveSubject = Replace(saveSubject, ":", "_")
                saveSubject = Replace(saveSubject, "/", "_")
                saveSubject = Replace(saveSubject, "\", "_")
                saveSubject = Replace(saveSubject, "*", "_")
                saveSubject = Replace(saveSubject, "?", "_")
                saveSubject = Replace(saveSubject, """", "_")
                saveSubject = Replace(saveSubject, "__", "_")
                saveSubject = Replace(saveSubject, "|", "_")
               
                If TypeName(Mitem) = "MailItem" Then
               
                    senderCheck = "/O=EXCHANGE"
                   
                    senderName = Mitem.sender
                   
                    timeSent = Mitem.ReceivedTime
                   
                    If Left$(senderName, 11) = senderCheck Then
                   
                        senderName = Right$(Mitem.sender, 11)
                       
                    Else
                       
                        senderName = Mitem.sender
                   
                    End If
               
                ElseIf TypeName(Mitem) = "MeetingItem" Then
               
                        senderCheck = "/O=EXCHANGE"
                   
                        senderName = Mitem.senderName
                       
                        timeSent = Mitem.ReceivedTime
                   
                    If Left$(senderName, 11) = senderCheck Then
                   
                        senderName = Right$(Mitem.sender, 11)
                       
                    Else
                       
                        senderName = Mitem.senderName
                   
                    End If
               
                ElseIf TypeName(Mitem) = "ReportItem" Then
               
                        senderName = "Read Receipt"
                       
                        timeSent = Mitem.CreationTime
               
                Else
               
                    MsgBox "Unknown mail type....ERROR"
                   
                    'senderName = ""
                   
                    'MsgBox senderName, vbCritical, "Sender Name"
                   
                    'variable111 = Mitem.CreationTime
                   
                    'MsgBox variable111, vbApplicationModal, "Creation Time"
                   
                End If
               
               
                If myPath = False Then
               
                    MsgBox "No directory chosen !", vbExclamation
                   
                Else
               
                    Mitem.SaveAs myPath & "\" & "Project#" & name & " " & Left$(senderName, 20) & " " & Format(timeSent, "MM-DD-YY HHMM") & " " & Left$(saveSubject, 40) & ".msg", olMSG
               
                End If
               
            Else
           
                MsgBox "A message was not saved because it does not match an EMail format."
               
            End If
       
        Next Mitem
 
    End If
       
MsgBox "Export Complete!", vbOKOnly, "Export Status"

End Sub

Function BrowseForFolder(Optional OpenAt As Variant) As Variant
     'Function To Browse for a user selected folder.
     'If the "OpenAt" path is provided, open the browser at that directory
     'NOTE: If invalid, it will open at the Desktop level
    Dim ShellApp As Object
     'Create a file browser window at the default folder
    Set ShellApp = CreateObject("Shell.Application"). _
    BrowseForFolder(0, "Please choose a folder", 0, OpenAt)
     'Set the folder to that selected. (On error in case cancelled)
    On Error Resume Next
    BrowseForFolder = ShellApp.self.Path
    On Error GoTo 0
     'Destroy the Shell Application
    Set ShellApp = Nothing
     'Check for invalid or non-entries and send to the Invalid error
     'handler if found
     'Valid selections can begin L: (where L is a letter) or
     '\\ (as in \\servername\sharename. All others are invalid
    Select Case Mid(BrowseForFolder, 2, 1)
    Case Is = ":"
        If Left(BrowseForFolder, 1) = ":" Then GoTo Invalid
    Case Is = "\"
        If Not Left(BrowseForFolder, 1) = "\" Then GoTo Invalid
    Case Else
        GoTo Invalid
    End Select
    Exit Function
Invalid:
     'If it was determined that the selection was invalid, set to False
    BrowseForFolder = False
End Function










Monday, October 21, 2013

Outlook macros for travel time and notifying someone you are out of the office automatically

Stuck in a Server Closet: outlook
Lately we have had some questions from employees wanting to automatically add travel time to their calendars. After some research and links from them I came across a script written here that was modified at the bottom of the page for adding in 2 separate times as well as working for meetings and appointments. I modified a few things on it to make sure there was no buffer time as well and then decided to add in one more thing.

Our office uses a global calendar mailbox called Out that they can send a meeting request to stating they will be out of the office so that our Admin team knows easily and from one calendar who is here and who is not. The downside is users forget, so I made a script to automatically send a request to that mailbox (or whatever mailbox you wish) as soon as someone saves an appointment or meeting with the Out Of Office status.

Enjoy!




Dim WithEvents olkCalendar As Outlook.Items


Private Sub Application_Quit()
    Set olkCalendar = Nothing

End Sub

Private Sub Application_Startup()
    Set olkCalendar = Session.GetDefaultFolder(olFolderCalendar).Items

    Const OLK_TRAVEL_SCRIPT_NAME = "Schedule Travel Time"
    Const OLK_INVITE_SCRIPT_NAME = "Notify FAST Team"
End Sub

Private Sub olkCalendar_ItemAdd(ByVal Item As Object)
    If Item.BusyStatus = OlBusyStatus.olOutOfOffice Then
        If MsgBox("Do you need to schedule travel time for this meeting?", vbQuestion + vbYesNo, OLK_TRAVEL_SCRIPT_NAME) = vbYes Then
            CreateTravelAppointmentEntry Item           'setup TO travel time
            CreateTravelAppointmentEntry Item, False    'setup FROM travel time
        End If
        If MsgBox("Do you need to nofity the FAST Team of your absense?", vbQuestion + vbYesNo, OLK_INVITE_SCRIPT_NAME) = vbYes Then
            CreateFastAppointmentEntry Item           'Notify FAST Team
        End If
    End If
End Sub

Private Sub CreateTravelAppointmentEntry(ByVal Item As Object, Optional ByVal isTo As Boolean = True)
    Dim olkTravel As Outlook.AppointmentItem
    Dim intMinutes As Integer

    intMinutes = InputBox("How many minutes " & IIf(isTo, "to", "from") & "?", OLK_TRAVEL_SCRIPT_NAME, 15)
    If intMinutes > 0 Then
        Set olkTravel = Application.CreateItem(olAppointmentItem)
        With olkTravel
            'Edit the subject as desired'
            .Subject = "Travel " & IIf(isTo, "to", "from") & " Meeting: " & Item.Subject
       
            If isTo Then
                .Start = DateAdd("n", intMinutes * -1, Item.Start)
            Else
                .Start = DateAdd("n", 0, Item.End)
            End If
       
            .End = DateAdd("n", intMinutes, .Start)
            .Categories = Item.Categories
            .BusyStatus = olBusy
            .Save
        End With
    End If

    Set olkTravel = Nothing
End Sub

Private Sub CreateFastAppointmentEntry(ByVal Item As Object, Optional ByVal isTo As Boolean = True)
   
    Dim olkInvite As Outlook.AppointmentItem
    Dim intMeetingLength As Integer

    Set olkInvite = Application.CreateItem(olAppointmentItem)
    With olkInvite
        .MeetingStatus = olMeeting
        .Subject = "Out of Office"
        .Start = Item.Start
        .End = Item.End
        .Categories = Item.Categories
        .BusyStatus = olBusy
        'Edit below line with your email address to send to'
        .RequiredAttendees = "out@epicsysinc.com"
        .Send
    End With

    Set olkInvite = Nothing

End Sub


Wednesday, September 18, 2013

An Outlook Quirk

Stuck in a Server Closet: outlook
I discovered a slight bug recently when designing a new signature for our company that I would never had caught in a million years of troubleshooting and is testament to how hard it is to make a perfect application/design.

After setting up tables, images, fighting outlooks lack of support for certain layouts in versions previous to 2013 I thought I had done it all. I checked, printed, sent and printed some more and everything was in great shape. Then I roll out to my first beta group, and man did something so strange happen.

Our CEO has multiple monitors and as such small print can definitely be hard to see way out in the corners, so he has increased the OS rendering 125%. I've seen people do this before, but I have never seen it effect Outlook like it has now. He runs 2013, and every time he sends an email out with the new signature 2 of the 4 images increase in size by 25%. We have compared them to the others, and can not find anything different. It's amazing but so frustrating at the same time. I have yet to find a solution to this issue other than changing the screen back to 100%, but there has to be something that's different....right?

Well after a few hours of prodding I was able to figure it out. The issue seems to only happen when the image has Inline Word Wrapping turned on. Setting it to Top/Bottom seems to fix the image blowup for good.