PDA

View Full Version : Please help me find my UID!!



pebcak
02-22-2021, 06:37 AM
Hi everyone - looking to accomplish a specific action in Outlook. Me: taught myself Batch and BASIC and took some C++ in college, but never went much further. So I understand programming, but struggle a bit with object oriented programming. The extent of my VBA is having created a UserForm to ask for some information and plug it into a form letter my office uses.

What I'd like to accomplish is simple conceptually ... while I have an email selected in the main/Mail pane, I'd like ... I want to execute a macro that:

1) finds a unique identifier in the subject field of the email; and then
2) searches the UID in subject/body in my Inbox and all subfolders (basic search, not Advanced).

Does the code really have to get into DASL/DAV Searching and Locating and MAPI?!

Outlook doesn't have a Record Macro function so the best I can even jump off with is a lame search macro from Word ... I'm sure this doesn't come close to the differences between searching an email vs of a Word document (for step 1), never mind the complexities of searching Outlook versus as opposed to one Word document. But I have to imagine the Search field in Outlook is an object that should make it simple enough?!?! (famous last words)

I've been in and out of dozens of Microsoft help pages and forums and finally decided to just ask.

Sub ForOutlook()
'
' ForOutlook Macro
'
'
Selection.Find.ClearFormatting
With Selection.Find
.Text = "<the UID would go here>"
.Replacement.Text = ""
.Forward = True
.Wrap = wdFindAsk
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
End With
Selection.Find.Execute
End Sub

gmayor
02-22-2021, 11:31 PM
The concept may seem simple, but there are some issues that need explanation.
How is the UID identified initially? If it's a constant value, then why bother with the original message, when you could just look for the UID in the inbox? If not, how is it determined?
What do you want to do with the messages that contain the UID?
Because of the processes involved, this could take a long time to run if you have a lot of stored messages.

pebcak
02-24-2021, 07:13 AM
The concept may seem simple, but there are some issues that need explanation.
How is the UID identified initially? If it's a constant value, then why bother with the original message, when you could just look for the UID in the inbox? If not, how is it determined?
What do you want to do with the messages that contain the UID?
Because of the processes involved, this could take a long time to run if you have a lot of stored messages.

Thank you so much for your response ... I suppose the searching part is a bit more ambitious than I anticipated.

What about a macro that just searches the subject field of the currently selected email to find the UID and copy that into the clipboard?

The UID always follows the format of four numbers a hyphen and six numbers. The first four numbers are a year, the last six numbers are a serial number. So it's safe to say the first two numbers of the year will always start with a 20 and the first number of the serial will start with a 0, e.g., 20##-0#####. Case numbers look like 2019-012345, 2020-029415 and 2021-000325.

pebcak
02-24-2021, 03:00 PM
Thank you so much for your response ... I suppose the searching part is a bit more ambitious than I anticipated.

What about a macro that just searches the subject field of the currently selected email to find the UID and copy that into the clipboard?

The UID always follows the format of four numbers a hyphen and six numbers. The first four numbers are a year, the last six numbers are a serial number. So it's safe to say the first two numbers of the year will always start with a 20 and the first number of the serial will start with a 0, e.g., 20##-0#####. Case numbers look like 2019-012345, 2020-029415 and 2021-000325.


OK so I've almost got it to set a string as the subject line.

Sub FindMatterNumber ()

Dim strSubject as String
Dim myItem as Outlook.MailItem

strSubject = myItem.Subject

MsgBox "Subject is: " & strSubject

End Sub


But it's breaking on the strSubect = my item.Subject ... I don't know how to identify the Subject

gmayor
02-25-2021, 12:46 AM
You have to tell the macro which message myItem refers to. If it is a selected item then:

Sub FindMatterNumber()
Dim strSubject As String
Dim myItem As Outlook.MailItem
On Error Resume Next
Select Case Outlook.Application.ActiveWindow.Class
Case olInspector
Set myItem = ActiveInspector.currentItem
Case olExplorer
Set myItem = Application.ActiveExplorer.Selection.Item(1)
End Select
strSubject = myItem.Subject
MsgBox "Subject is: " & strSubject, vbInformation
lbl_Exit:
Exit Sub
End Sub

pebcak
02-25-2021, 06:05 AM
You have to tell the macro which message myItem refers to. If it is a selected item then:

Sub FindMatterNumber()
Dim strSubject As String
Dim myItem As Outlook.MailItem
On Error Resume Next
Select Case Outlook.Application.ActiveWindow.Class
Case olInspector
Set myItem = ActiveInspector.currentItem
Case olExplorer
Set myItem = Application.ActiveExplorer.Selection.Item(1)
End Select
strSubject = myItem.Subject
MsgBox "Subject is: " & strSubject, vbInformation
lbl_Exit:
Exit Sub
End Sub


This works great!!! NOW ... I'm going to reverse-engineer it :), try to work out the rest of what I want little by little, fail miserable, and be back with more questions.

But in the meantime THANK YOU!!

pebcak
02-27-2021, 06:31 PM
You have to tell the macro which message myItem refers to. If it is a selected item then:

Sub FindMatterNumber()
Dim strSubject As String
Dim myItem As Outlook.MailItem
On Error Resume Next
Select Case Outlook.Application.ActiveWindow.Class
Case olInspector
Set myItem = ActiveInspector.currentItem
Case olExplorer
Set myItem = Application.ActiveExplorer.Selection.Item(1)
End Select
strSubject = myItem.Subject
MsgBox "Subject is: " & strSubject, vbInformation
lbl_Exit:
Exit Sub
End Sub


Fiddling around a bit in the VBE and running the macro a bunch of times - it seems like the Case is always olExplorer, so why the distinction?

Thought, to be blunt, I'm not sure what the difference between olInspector and olExplorer is (I read the Microsoft Docs article, still confused ... I really need a primer on this but not back to the basics, any recommendations? This OOP stuff is killing me.)