Att öppna en fil från Access med det associerade programmet kan göras med lite VBA.
[blue]'**************************
'***App Window Constants***
'**************************[/blue]
Public Const WIN_NORMAL = 1 'Open Normal
Public Const WIN_MAX = 3 'Open Maximized
Public Const WIN_MIN = 2 'Open Minimized
[blue]'**************************
'***FileOpen Error Codes***
'**************************[/blue]
Public Const ERROR_OUT_OF_MEM = 0&
Public Const ERROR_FILE_NOT_FOUND = 2&
Public Const ERROR_PATH_NOT_FOUND = 3&
Public Const ERROR_ACCESS_DENIED = 5&
Public Const ERROR_BAD_FORMAT = 11&
Public Const ERROR_SUCCESS = 32&
Public Const ERROR_NO_ASSOC = 31&
[blue]'*******************
'***Windows API's***
'*******************[/blue]
Private 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
Public Function OpenFileByType(strFileName As String, lngWindowMode As Long) As Long
Dim lngRet As Long
Dim varTaskID As Variant
'Testa om filtypen har ett registrerat program
lngRet = apiShellExecute(hWndAccessApp, vbNullString, strFileName, vbNullString, vbNullString, lngWindowMode)
If lngRet > ERROR_SUCCESS Then
lngRet = -1
Else
If lngRet = ERROR_NO_ASSOC Then
'Inget program associerat med filtypen. Testa via Öppna med...
varTaskID = Shell("rundll32.exe shell32.dll,OpenAs_RunDLL " & strFileName, WIN_NORMAL)
lngRet = (varTaskID <> 0)
End If
End If
OpenFileByType = lngRet
End Function
Lägg ovanstående i en modul och sedan när du vill öppna filen med hjälp av en sökväg kallar du bara på funktionen OpenFileByType
If OpenFileByType(strFileName, WIN_NORMAL) = ERROR_FILE_NOT_FOUND Then
MsgBox "Filen hittades inte." & vbCrLf & vbCrLf & strFileName, vbExclamation + vbOKOnly, "Fel"
End If
Så gör jag för att öppna Autocadritningar från Access och det fungerar väldigt smidigt måste jag säga :)
