Jim Lawrence
accessd at shaw.ca
Mon May 11 00:37:57 CDT 2009
Hi Lonnie: The piece of code is a little complex but will allow you to run a application on the system... from Excel to Outlook <Code> Given in Public module: ' Code for handling the shell API code Public Declare Function apiShellExecute Lib "shell32.dll" _ Alias "ShellExecuteA" _ (ByVal hWnd As Long, _ ByVal lpOperation As String, _ ByVal lpFile As String, _ ByVal lpParameters As String, _ ByVal lpDirectory As String, _ ByVal nShowCmd As Long) _ As Long '***App Window Constants*** Public Const WIN_NORMAL = 1 'Open Normal Public Const WIN_MAX = 3 'Open Maximized Public Const WIN_MIN = 2 'Open Minimized '***Error Codes*** Public Const ERROR_SUCCESS = 32& Public Const ERROR_NO_ASSOC = 31& Public Const ERROR_OUT_OF_MEM = 0& Public Const ERROR_FILE_NOT_FOUND = 2& Public Const ERROR_PATH_NOT_FOUND = 3& Public Const ERROR_BAD_FORMAT = 11& '...and a collection as follows: Private Type ProjectDocument DefaultDir As String RawCodeGroup As String ID As Long Placement As String SubCategory As String CodeGroup As String FileName As String FileLocation As String End Type Dim tmpPD As ProjectDocument '----------------------------------------------------------- ' a sample of how tmpPD the collection is filled Private Sub Form_Open(Cancel As Integer) With tmpPD .RawCodeGroup = Forms![frm_Project]![txtFileFlag] If Len(.RawCodeGroup) > 0 Then ' set the default start search directory .DefaultDir = "\\bolt\S8627\S8627_SG_GPE_Share\\SYSTEMS+" ' get/set current record and potential new record ' defining code .CodeGroup = Trim(Forms![frm_Project]![txtFileFlag]) ' Setup up access to database and recordset ' and get the criteria for the listbox If Initialize(.CodeGroup) = False Then Cancel = True ' repopulate list display lstFileNames.Requery setTitle 'Just sets header of form depending on option Else MsgBox "Form Project must currently" & vbCr & _ "active to supply seed information.", vbExclamation, "Error..." Cancel = True End If End With End Sub '---------------------------------------------------------- Private Sub ViewCurrentFile() With tmpPD If Len(Dir(tmpPD.FileLocation)) > 0 Then DoCmd.Hourglass True ' View file and ignore any errors LoadFile tmpPD.FileLocation, WIN_NORMAL DoCmd.Hourglass False Else MsgBox "File " & .FileName & " could not be found in directory" & vbCr & _ .DefaultDir & "." & vbCr & _ "File may have been moved or is otherwise unavailable from this location.", vbInformation, "File not found" End If End With End Sub '------------------------------------------------------ Public Function LoadFile(stFile As String, lngShowHow As Long) As String Dim lRet As Long, varTaskID As Variant Dim stRet As String LoadFile = "" 'First try ShellExecute lRet = apiShellExecute(hWndAccessApp, vbNullString, stFile, vbNullString, vbNullString, lngShowHow) If lRet > ERROR_SUCCESS Then stRet = vbNullString lRet = -1 Else Select Case lRet Case ERROR_NO_ASSOC: 'Try the OpenWith dialog varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " _ & stFile, WIN_NORMAL) lRet = (varTaskID <> 0) Case ERROR_OUT_OF_MEM: stRet = "Error: Out of Memory/Resources. Couldn't Execute!" Case ERROR_FILE_NOT_FOUND: stRet = "Error: File not found. Couldn't Execute!" Case ERROR_PATH_NOT_FOUND: stRet = "Error: Path not found. Couldn't Execute!" Case ERROR_BAD_FORMAT: stRet = "Error: Bad File Format. Couldn't Execute!" Case Else: End Select End If LoadFile = lRet & IIf(stRet = "", vbNullString, ", " & stRet) End Function </code> It might be over kill but it can be used to receive a variety of extensions. This code was used in an accounting project where each account and invoice item was lited in a sub form. By clicking on each entry listed in each row the particular file would open with the associated application. Adobe for PDF, Word for a document or Outlook if an email was selected. I hope there is enough here to help you out. Jim -----Original Message----- From: accessd-bounces at databaseadvisors.com [mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Lonnie Johnson Sent: Sunday, May 10, 2009 6:49 PM To: AccessD solving' Subject: [AccessD] Can I open outlook messages from Access? I am creating an app for a friend. He wants to see his task, emails and appointments in an Access form. I was able to do that. What he wants to do now is double click on one of the emails in a continuous form I build and the email actually opens. Does anyone have code for that? May God bless you beyond your imagination! Lonnie Johnson ProDev, Professional Development of MS Access Databases Visit me at ==> http://www.prodev.us -- AccessD mailing list AccessD at databaseadvisors.com http://databaseadvisors.com/mailman/listinfo/accessd Website: http://www.databaseadvisors.com