Avatar billede per2edb Ekspert
14. august 2023 - 11:12 Der er 7 kommentarer og
1 løsning

åbne en pdf fil beliggende i en mappe

Jeg skal åbne en pdf fil beliggende i en mappe
Jeg vil helst undgå at benytte adobe
Koderne nedenfor fejler
Har i en løsning

Dim stAppName As String, strPath As String

  strPath = CurrentProject.Path
  stAppName = strPath & "\Dokumenter\Salg.pdf"
 
    Dim shell As Object
    Set shell = CreateObject("WScript.Shell")

    shell.Run stAppName
Avatar billede Gustav Ekspert
14. august 2023 - 11:28 #1
Vi bruger ShellExecute, som også kan åbne andet end PDF:
Option Compare Database
Option Explicit

' API declarations for OpenDocumentFile.
' Documentation:
https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea
'
Private Declare PtrSafe Function ShellExecute 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

Private Declare PtrSafe Function GetDesktopWindow Lib "user32" () _
    As Long
   
' Enum for ShowWindow constants (selection).
' Documentation:
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
'
Public Enum SwShowCommand
    swShowNormal = 1
    swShowMinimized = 2
    swShowMaximized = 3
End Enum
 
' Open a document file using its default viewer application.
' Optionally, the document can be opened minimised or maximised.
'
' Returns True if success, False if not.
' Will not raise an error if the path or file is not found.
'
' 2022-03-12. Gustav Brock, Cactus Data ApS, CPH.
'
Public Function OpenDocumentFile( _
    ByVal File As String, _
    Optional ByVal ShowCommand As SwShowCommand = swShowNormal) _
    As Boolean

    Const OperationOpen    As String = "open"
    Const MinimumSuccess    As Long = 32
    ' Shall not have a value for opening a document.
    Const Parameters        As String = ""
   
    Dim Handle      As Long
    Dim Directory  As String
    Dim Instance    As Long
    Dim Success    As Boolean
   
    Handle = GetDesktopWindow
    Directory = Environ("Temp")

    Instance = ShellExecute(Handle, OperationOpen, File, Parameters, Directory, ShowCommand)
    ' If the function succeeds, it returns a value greater than MinimumSuccess.
    Success = (Instance > MinimumSuccess)
   
    OpenDocumentFile = Success

End Function
Avatar billede per2edb Ekspert
14. august 2023 - 11:45 #2
Hej Gustav
Tak

Har du også et eks på kald Call....
Avatar billede Gustav Ekspert
14. august 2023 - 12:03 #3
Det kunne være:
Dim stAppName As String, strPath As String

strPath = CurrentProject.Path
stAppName = strPath & "\Dokumenter\Salg.pdf"
OpenDocumentFile stAppName
Avatar billede per2edb Ekspert
14. august 2023 - 13:41 #4
Melder fejl

Jeg har dine koder i et modul

Kalder er fra en form sub med en klik command
Private Sub Salg_Click()
    Dim stAppName As String, strPath As String
    strPath = CurrentProject.Path
    stAppName = strPath & "\Dokumenter\Salg.pdf"
    OpenDocumentFile stAppName  <======= Melder fejl
End Sub
Avatar billede Gustav Ekspert
14. august 2023 - 14:07 #5
Men hvilken fejl?

Indsæt en linje før den sidste:
Debug.Print stAppName
og se, om filnavnet er det, du forventer.
Avatar billede per2edb Ekspert
14. august 2023 - 14:21 #6
Allerede ved compile
Expected variable or procedure, not module
Avatar billede Gustav Ekspert
14. august 2023 - 14:56 #7
Det er nok, fordi du også har givet modulet navnet OpenDocumentFile.

Så må du enten omdøbe det eller foranstille modulnavnet:
OpenDocumentFile.OpenDocumentFile stAppName
Avatar billede per2edb Ekspert
14. august 2023 - 15:14 #8
Så virker det
Tak for hjælpen
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
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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