Avatar billede ms_2004 Nybegynder
20. september 2007 - 17:20 Der er 6 kommentarer og
2 løsninger

VBA i Access; brug af Shell kommando til at åbne program

Hej!

Jeg har følgende kode på en command-button:

---
Dim retVal As Variant

retVal = Shell("C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE " & DialogPresentation)
---

Ideen er at åbne powerpoint og automatisk få åbnet en ppt. fil der ligger i feltet DialogPresentation. Det burde ... kunne lade sig gøre, så ud fra eksempler jeg har set.

Jeg er sikker på, at stien ligger i 'Dialogpresentation' feltet - stien der ligger i feltet er: "C:\Documents and Settings\MS\Desktop\Test.ppt"

Når jeg kører ovenstående shell kommando, åbner Powerpoint, men jeg får følgende fejl: "The path or file name for C:\Document is invalid. Please check that the path and file name are correct"

Så det ser ud som om, at noget af stien (ved mellemrummet) er blevet kortet af..? Nogen der har en ide til en løsning på dette?
Avatar billede thesurfer Nybegynder
20. september 2007 - 18:07 #1
retVal = Shell("C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE " & Chr(34) & DialogPresentation & Chr(34))

Eller

retVal = Shell("C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE """ & DialogPresentation & """")
Avatar billede thesurfer Nybegynder
20. september 2007 - 18:09 #2
Med andre ord: Du skal putte "-tegn uden om stien.. altså, ikke så det bliver en streng, men putte "-tegn i selve strengen..

Uden ekstra "" eller Chr(34), ser kommandoen sådan ud:

"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE " C:\Documents and
Settings\MS\Desktop\Test.ppt

Med ekstra "" eller Chr(34), ser kommandoen sådan ud:

"C:\Program Files\Microsoft Office\OFFICE11\POWERPNT.EXE " "C:\Documents and
Settings\MS\Desktop\Test.ppt"

- Svar.
Avatar billede -anders- Juniormester
20. september 2007 - 18:33 #3
Hejsa,

Nedestående eks. åbner en fil i det korrekte værtsprogram. Hvis du feks. har et tekstfelt på din formular som indeholder hele stien til en fil (dette kunne sagtens være en .ppt-fil. Hvis du har mod på er alt kode med forklaring posten herunder:

1. Opret et nyt modul og paste nedenstående kode ind, gem modulet on navngiv modulet Shell Execute

'Kode start'
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

'***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***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&


Shell Execute

Call ShellExecute(Me!Filnavn, WIN_NORMAL)

'***************Usage Examples***********************
'Open a folder:    ?ShellExecute("C:\TEMP\",WIN_NORMAL)
'Call Email app:    ?ShellExecute("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL:          ?ShellExecute("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
'                  ?ShellExecute("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
'                  ?ShellExecute("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function ShellExecute(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
           
    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
    ShellExecute = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
End Function

2. Ved klik på din formular skal du blot skrive nedenstående kode, hvor Me!Feltnavn skal skiftes ud med dit eget feltnavn:

Call ShellExecute(Me!Feltnavn, WIN_NORMAL)

Nu åbnes din i værtsprogrammet.

Hilsen Anders
Avatar billede -anders- Juniormester
20. september 2007 - 18:34 #4
"Nu åbnes din i værtsprogrammet" = Nu åbnes din fil i værtsprogrammet.
Avatar billede -anders- Juniormester
20. september 2007 - 18:38 #5
Sorry, fik pastet noget vrøvl, nednestående skal pastet ind i modulet:

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

'***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***
Private Const ERROR_SUCCESS = 32&
Private Const ERROR_NO_ASSOC = 31&
Private Const ERROR_OUT_OF_MEM = 0&
Private Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&

'***************Usage Examples***********************
'Open a folder:    ?ShellExecute("C:\TEMP\",WIN_NORMAL)
'Call Email app:    ?ShellExecute("mailto:dash10@hotmail.com",WIN_NORMAL)
'Open URL:          ?ShellExecute("http://home.att.net/~dashish", WIN_NORMAL)
'Handle Unknown extensions (call Open With Dialog):
'                  ?ShellExecute("C:\TEMP\TestThis",Win_Normal)
'Start Access instance:
'                  ?ShellExecute("I:\mdbs\CodeNStuff.mdb", Win_NORMAL)
'****************************************************

Function ShellExecute(stFile As String, lShowHow As Long)
Dim lRet As Long, varTaskID As Variant
Dim stRet As String
    'First try ShellExecute
    lRet = apiShellExecute(hWndAccessApp, vbNullString, _
            stFile, vbNullString, vbNullString, lShowHow)
           
    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
    ShellExecute = lRet & _
                IIf(stRet = "", vbNullString, ", " & stRet)
End Function
Avatar billede ms_2004 Nybegynder
20. september 2007 - 19:42 #6
Tak for jeres svar - thesurfers svar lå tæt op ad min oprindelige kode og virkede perfekt, så derfor gik hovedparten af pointene denne vej...
Avatar billede -anders- Juniormester
20. september 2007 - 19:46 #7
Selv tak, og tak for point :o)

På denne hjemmeside www.makeiteasy.dk under menuen download er der et eks. der frit kan downloades, eks. hedder "Åbn Fil-dialogboks og åbning af vilkårlig fil fra Access"

Som inspiration er det bestemt et kik værd.
Avatar billede thesurfer Nybegynder
21. september 2007 - 10:52 #8
Man kunne vel også bare bruge START..

Dvs:

retVal = Shell("start " & Chr(34) & DialogPresentation & Chr(34))

Hvis man ikke kan bruge "start", kan man prøv med "explorer" (ikke Internet Explorer):

retVal = Shell("explorer " & Chr(34) & DialogPresentation & Chr(34))

Så åbnes filen i DialogPresentation automatisk med det program, som man har valgt i operativsystemet.

Det betyder, at hvis brugeren bruger et andet program, til at åbne PowerPoint filer, eller f.eks. PDF filer (end lige Acrobat Reader), vil det foretrukne program blive startet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester