Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Chris Miller on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Drag & Drop Email

Status
Not open for further replies.

RonMcIntire

Technical User
Oct 12, 2002
166
US
All:

I found a post from JHaganJr dated March of 07 that discussed a method for dropping Outlook or Outlook Express email onto a memo field in Access. The discussion included what I assumed was VBA not VBA code from Remou and Bill6868. I am using Access 2003.

I put the code into a test app as described and dropped an email from Outlook Express onto the memofield but I get an error #429 "ActiveX component can't create object."

If I understand what was said and I've done it correctly, I should drop my Outlook Express email message from the upper pane of received messages onto the memo field in the Access app. I do and that's when I get the error.

My test table field types are txtClientID(AutoNumber), SvcNoteID(Text), EmailLocation(Text) and EmailMemo(Memo)

My references are set to: Visual Basic for Apps; Access Object 11.0 Library; OLE Automation; MS DAO 3.6 Object Library; MS ActiveX Data objects 2.5 Library; MS Outlook 11.0 Object Library; and MS Outlook View Control;

Can anyone shed a little light on what's going wrong?

Thanks,

Ron
 
Could you show us the code you've got?

HarleyQuinn
---------------------------------
The most overlooked advantage to owning a computer is that if they foul up there's no law against wacking them around a little. - Joe Martin

Get the most out of Tek-Tips, read FAQ222-2244 before posting.
 
Harley:

The entire thread is under thread181-1346884 if you want to look at it. The code I used is almost verbatum from this thread.

However, here is the code I'm using. Credit goes to jhaganjr.

Note my folder path beginning with "E:\Database. . . . " if you try to run it.

Code:
Option Compare Database

Private Sub EmailMemo_Click()
On Error GoTo Error_EmailMemo_Click

    Dim strMsg As String
    
    'To open an attached email if present.
    If Me.EmailMemo = "EMAIL ATTACHED: Click Here To View" Then
        'Make sure the EmailLocation field contains a value.
        If IsNull(Me![EmailLocation]) Then
            strMsg = "WARNING! PRINT SCREEN THIS ERROR MESSAGE FOR THE SYSTEM ADMINISTRATOR!" & vbCr & vbCr
            strMsg = strMsg & "Note ID " & Me.SvcNoteID & " indicates an e-mail is attached. However, "
            strMsg = strMsg & "the EmailLocation field is null." & vbCr & vbCr
            strMsg = strMsg & "The attached e-mail is missing."
            MsgBox strMsg
        Else
            Application.FollowHyperlink Me![EmailLocation]
        End If
    Else
        'Do nothing
    End If

Exit_EmailMemo_Click:
    Exit Sub
    
Error_EmailMemo_Click:
    If Err.Number = 16388 Then
        'Ignore it - the user selected Cancel on the popup
    ElseIf Err.Number = 490 Then
        'The file specified filename does not exist. Notify the user.
        strMsg = "WARNING! PRINT SCREEN THIS ERROR MESSAGE FOR THE SYSTEM ADMINISTRATOR!" & vbCr & vbCr
        strMsg = strMsg & "Note ID " & Me.SvcNoteID & " includes a value in EmailLocation of "
        strMsg = strMsg & Me![EmailLocation] & ", but the file does not exist." & vbCr & vbCr
        strMsg = strMsg & "The attached e-mail is missing."
        MsgBox strMsg
    Else
        MsgBox Err.Number & " " & Err.Description
    End If
    Resume Exit_EmailMemo_Click
    
End Sub

Private Sub EmailMemo_Dirty(Cancel As Integer)

    'I got the guts of this sub from Remou on tek-tips.com. S/he told me I can drag and drop an
    'email to a memo field, then gave me the object control code to save the file.
    
    Dim olApp As Outlook.Application
    Dim olExp As Outlook.Explorer
    Dim olSel As Outlook.Selection
    Dim i, intCounter, intResponse As Integer
    Dim strFilename, strSQL, strFolderPath, strPathAndFile, strMsg As String
    Dim fs As Object
    Dim fsFolder As Object
    Dim blnFolderExists, blnFileExists As Boolean
    
    'This field is used to control attaching emails by dropping them on the field.
    'To allow this the field must be editable. This means the user could accidentally
    'type in the field and trigger the code to attach an email. Therefore, this user
    'verification makes sure the user intentionally dropped an email on the field.
    
    strMsg = "WARNING: You have triggered the E-mail Attachment Function. CHOOSE CAREFULLY ..." & vbCr & vbCr
    strMsg = strMsg & "If you intended to attach an e-mail to this note, answer Yes below. "
    strMsg = strMsg & "If you did not intend to attach an e-mail and don't know what's going on, "
    strMsg = strMsg & "answer No below." & vbCr & vbCr
    strMsg = strMsg & "Did you intentionally drag and drop an e-mail to attach it to this note?"
    
    intResponse = MsgBox(strMsg, vbYesNo)
    
    If intResponse = 7 Then 'No
        Cancel = True
        Exit Sub
    End If
    
    'My network consultant advises not putting too many files in a folder - like our Permanent Images.
    'Therefore, I will separate emails into a new folder each year. This code allows me
    'to never check on it, by creating the folder automatically when the year changes.
    
    Set fsFolder = CreateObject("Scripting.FileSystemObject")
    strFolderPath = "E:\Database\HOA\HOA Singing Valentines\2008 Singing Valentine " & Year(Date)
    
    If fsFolder.FolderExists(strFolderPath) = False Then
        fsFolder.CreateFolder (strFolderPath)
    End If

    'Create the filename as a message file from the ClientID and the NoteID - which will be unique
    strFilename = Me.TxtClientID & "_" & Me![SvcNoteID] & ".msg"
    
    'Combine for full path and file name
    strPathAndFile = strFolderPath & "\" & strFilename
    
    'Make sure this file does not already exist to avoid overwriting email files when there is a
    'system glitch.
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    blnFileExists = fs.FileExists(strPathAndFile)
    
    If blnFileExists = False Then
        'There's not already a file for this client and noteID.
        'This is the way it always should be.
        'But stuff happens. So, I'm checking.
        'Save the email to the filename just created as a message file.
        Set olApp = GetObject(, "Outlook.Application")  'First argument is blank to return the currently
                                                        'active Outlook object, otherwise runtime fails
        Set olExp = olApp.ActiveExplorer
        Set olSel = olExp.Selection
        For i = 1 To olSel.Count
            olSel.Item(1).SaveAs strPathAndFile, olMSG
        Next
    Else
        'There's already a file for this client and noteID. This should be impossible,
        'but stuff happens. In this case we notify the user and then re-establish the links
        'so the user can handle it.
        strMsg = "ATTENTION: The system detected an e-mail file already created for this note. "
        strMsg = strMsg & "That e-mail is now linked to this note ID. Please do the following:" & vbCr & vbCr
        strMsg = strMsg & "1. View the e-mail normally." & vbCr
        strMsg = strMsg & "2. If it is the correct e-mail, you don't need to do anything else." & vbCr
        strMsg = strMsg & "3. If it is the wrong e-mail, use the Un-Attach E-mail button to get rid of it. "
        strMsg = strMsg & "Then attach the correct e-mail."
        MsgBox strMsg
    End If
    
    'Update the location field with the location.
    Cancel = True   'To roll back changes caused by the drop.
    Me![EmailLocation] = strPathAndFile
    Me.EmailMemo = "EMAIL ATTACHED: Click Here To View"
    Me.EmailMemo.Locked = True
    Me.Dirty = False    'To save the changes.
    
    Set fsFolder = Nothing
    Set fs = Nothing
    Set olSel = Nothing
    Set olExp = Nothing
    Set olApp = Nothing
    
End Sub
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top