Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Άνοιγμα συγκεκριμένου αρχείου Pdf (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/2690-anoigma-sygkekrimenoy-arxeioy-pdf.html)

Free_Ghost 17-09-13 20:42

Άνοιγμα συγκεκριμένου αρχείου Pdf
 
Φίλοι μου δοκίμασα πολλά που διάβασα μέσα στο site, άλλα δεν κατάφερα να κάνω συγκεκριμένο αρχείο pdf να ανοίγη με το πάτημα ενός πλήκτρου.

Ένα πεδίο (Protokollo) της φόρμας (F_KENTRIKH) παίρνει αυτόματη αρίθμηση, και εγώ ζητάω να βλέπει αυτή την τιμή και να ανοίγει το αρχείο pdf με το ίδιο όνομα που υπάρχει στον φάκελο (C:\Office Files\Pdfiles2013).

Χρησιμοποίησα τον παρακάτω κώδικα σε ένα πλήκτρο, άλλα δεν μου βγήκε.

Dim OpenFile As String
OpenFile = ShellExecute(0, "open", "C:\Office Files\Pdfiles2013" & Forms![F_KENTRIKH]![Protokollo] & ".pdf", "", "C:\", SW_SHOWNORMAL)
End Sub

Πάντα μου χτυπάει στο [Protokollo] εάν λέει κάτι αυτό.

Μήπως μπορεί κάποιος να βοηθήσει.:039:

Tasos 18-09-13 00:09

Καλημέρα!

Χρήστο δοκίμασε:

OpenFile = ShellExecute(0, "open", "C:\Office Files\Pdfiles2013\" & Forms![F_KENTRIKH]![Protokollo] & ".pdf", "", "C:\", SW_SHOWNORMAL)

Τάσος

Free_Ghost 18-09-13 18:56

Δυστυχώς Τάσο δεν δουλεύει.

Υπάρχει κάποιος άλλος τρόπος ? :confused1:

Meteora 18-09-13 19:58

Καλησπέρα

Δουλεύω μια εφαρμογή και χρησιμοποιώ τον κώδικα που βλέπεις για να εμφανίζω αρχεία *.pdf και όχι μόνο...
Κώδικας:

Dim path$
    path = "C:\MailMerge\" & DLookup("[Onoma_arxeiou]", "tbl_name_arxeia", "[info_arxeiou] = '" & Me.Cbox_arxeio & "'")
    Shell "Explorer.exe " & path, vbNormalFocus

Φτιάξε σωστά τη δική σου διαδρομή, δοκίμασε την εκεί στον editor και τα ...ξαναλέμε αν χρειαστεί.

Με εκτίμηση

Νίκος Δ.

Free_Ghost 19-09-13 06:32

Νίκο καλημέρα, δυστυχώς δεν μπορώ να τα αντιστοιχίσω, δεν ξέρω τι ακριβώς είναι τα δικά σου στοιχεία.


Dim path$
path = "C:\MailMerge\" & DLookup("[Onoma_arxeiou]", "tbl_name_arxeia", "[info_arxeiou] = '" & Me.Cbox_arxeio & "'")
Shell "Explorer.exe " & path, vbNormalFocus

Μπορείς να δώσεις διευκρινιστικές πληροφορίες, (το αναζητάς και στον πίνακα ?).

Tasos 19-09-13 08:20

Καλημέρα!

Χρήστο, κάτι δεν κάνεις σωστά.

Δώσε μας ένα δείγμα της βάσης σου για να σε βοηθήσουμε.

Φιλικά

Τάσος

Free_Ghost 19-09-13 10:05

1 Συνημμένο(α)
Τάσο ανέβασα ένα δείγμα όπου κάνω Test.

Βασικά θέλω να αποθηκεύω αρχεία pdf σε έναν φάκελο με τον αριθμό του πρωτοκόλλου, και εφόσον θέλω να το δω να πατάω το πλήκτρο (Εντολή 152) και να ανοίγει το συγκεκριμένο αρχείο που δείχνη στο πεδίο [Protokollo] και εάν δεν υπάρχει να προειδοπειή και να μην ανοίγει τίποτα.

Tasos 19-09-13 10:46

Στην κορυφή της λειτουργικής μονάδας δεν έχεις βάλει τον παρακάτω κώδικα:

Κώδικας:

Option Compare Database
Option Explicit

Private Const SW_SHOWNORMAL = 1

Private Declare 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

Ο κώδικας αυτός υπάρχει στον παρακάτω σύνδεσμο: http://www.ms-office.gr/forum/11189-post2.html

Στον κώδικα που αντιστοιχεί στο κουμπί χρησιμοποίησε:

Κώδικας:

Private Sub Εντολή152_Click()
    Dim strFile As String
    If Not IsNull(Me.Protokollo) Then
        strFile = "C:\Office Files\Pdfiles2013\" & Me.Protokollo & ".pdf"
        If Dir(strFile, vbDirectory) <> vbNullString Then
            ShellExecute 0, "open", strFile, "", "C:\", SW_SHOWNORMAL
        Else
            MsgBox "File not Found!"
        End If
    Else
        MsgBox "Το πεδίο είναι κενό"
    End If
End Sub

Καλή συνέχεια!

Τάσος

Free_Ghost 19-09-13 19:20

Τελικά μετά τις τελευταίες οδηγίες που μου έδωσες Τάσο δούλεψε Κανονικότατα.

Τάσο, Νίκο σας Ευχαριστώ ολόψυχα για άλλη μια φορά.:bye:

Free_Ghost 25-09-13 16:25

Συγνώμη που επανέρχομαι στο ίδιο ερώτημα, αλλά θα ήθελα να το ολοκληρώσω εάν γίνεται.

Στο παρακάτω κώδικα που έγραψε ο Τάσος

Private Sub Εντολή152_Click()
Dim strFile As String
If Not IsNull(Me.Protokollo) Then
strFile = "C:\Office Files\Pdfiles2013\" & Me.Protokollo & ".pdf"
If Dir(strFile, vbDirectory) <> vbNullString Then
ShellExecute 0, "open", strFile, "", "C:\", SW_SHOWNORMAL
Else
MsgBox "File not Found!"
End If
Else
MsgBox "Το πεδίο είναι κενό"
End If
End Sub


Θα ήθελα να κάνω δύο ερωτήσεις.

1) Εάν τα αρχεία τα έχω αποθηκευμένα σε δύο φακέλους (π.χ. τα μισά στο D:\files και τα άλλα μισά στο Ε:\files) πώς μπορώ να το κάνω να ελέγχει και τους δύο φακέλλους και κατόπιν να βγάζει το ανάλογο μήνυμα όπως βγάζει ήδη.:plaf:

2) Υπάρχει τρόπος η εφαρμογή όταν βρίσκομαι στο ανάλογο αρχείο να ελέγχει εάν υπάρχει αρχείο και εφόσον υπάρχει να αλλάζει χρώμα το πλήκτρο ώστε να γνωρίζω εκ των προτέρων εάν έχει η όχι αρχείο πίσω από το κουμπί.:plaf:

Tasos 25-09-13 17:42

Χρήστο, βάλε τον παρακάτω κώδικα σε μια λειτουργική μονάδα (αντικατέστησε τον προηγούμενο αν χρειαστεί):

Κώδικας:


'Πηγή: Microsoft (με κάποιες τροποποιήσεις)

Option Compare Database
Option Explicit

Public Enum SWConstants
    SW_HIDE = 0
    SW_MAXIMIZE = 3
    SW_MINIMIZE = 6
    SW_SHOWMAXIMIZED = 3
    SW_SHOWMINIMIZED = 2
    SW_SHOWNORMAL = 1
    SW_SHOWNOACTIVATE = 4
    SW_SHOWNA = 8
    SW_SHOWMINNOACTIVE = 7
    SW_SHOWDEFAULT = 10
    SW_RESTORE = 9
    SW_SHOW = 5
End Enum

Private Declare 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 Const ERROR_FILE_NOT_FOUND = 2&
Private Const ERROR_PATH_NOT_FOUND = 3&
Private Const ERROR_BAD_FORMAT = 11&
Private Const SE_ERR_ACCESSDENIED = 5&
Private Const SE_ERR_ASSOCINCOMPLETE = 27&
Private Const SE_ERR_DDEBUSY = 30&
Private Const SE_ERR_DDEFAIL = 29&
Private Const SE_ERR_DDETIMEOUT = 28&
Private Const SE_ERR_DLLNOTFOUND = 32&
Private Const SE_ERR_FNF = 2&
Private Const SE_ERR_NOASSOC = 31&
Private Const SE_ERR_PNF = 3&
Private Const SE_ERR_OOM = 8&
Private Const SE_ERR_SHARE = 26&


Public Function ShellExec( _
      ByVal sFile As String, _
      Optional ByVal eShowCmd As SWConstants = SW_SHOWDEFAULT, _
      Optional ByVal sParameters As String = "", _
      Optional ByVal sDefaultDir As String = "", _
      Optional sOperation As String = "open", _
      Optional Owner As Long = 0 _
      ) As Integer
    Dim result As Long
    Dim lngError As Long
    Dim sError As String
   
    If Right(UCase(sFile), 4) = ".EXE" Then eShowCmd = 0
   
    On Error Resume Next
        result = ShellExecute(Owner, sOperation, sFile, sParameters, sDefaultDir, eShowCmd)
    If result < 0 Or result > 32 Then
        ShellExec = True
    Else
        lngError = 1048 + result + vbObjectError

        Select Case result
            Case 0
                lngError = 7: sError = "Δεν υπάρχει διαθέσιμη μνήμη."
            Case ERROR_FILE_NOT_FOUND
                lngError = 53
                sError = "Το αρχείο δεν βρέθηκε."
            Case ERROR_PATH_NOT_FOUND
                lngError = 76
                sError = "Η διαδρομή δεν βρέθηκε."
            Case ERROR_BAD_FORMAT
                lngError = 11
                sError = "Το εκτελέσιμο αρχείο δεν είναι έγκυρο ή είναι κατεστραμμένο."
            Case SE_ERR_ACCESSDENIED
                lngError = 75
                sError = "Σφάλμα πρόσβασης στη διαδρομή ή στο αρχείο."
            Case SE_ERR_ASSOCINCOMPLETE
                lngError = 27
                sError = "Αυτός ο τύπος αρχείου δεν έχει έγκυρη συσχέτιση αρχείου."
            Case SE_ERR_DDEBUSY
                lngError = 285
                sError = "Το αρχείο δεν θα μπορούσε να ανοίξει, διότι η εφαρμογή είναι απασχολημένη. Παρακαλώ δοκιμάστε ξανά σε λίγο."
            Case SE_ERR_DDEFAIL
                lngError = 285
                sError = "Το αρχείο δεν μπορεί να ανοίξει, διότι η συναλλαγή DDE απέτυχε. Παρακαλώ δοκιμάστε ξανά σε λίγο."
            Case SE_ERR_DDETIMEOUT
                lngError = 286
                sError = "Το αρχείο δεν μπορεί να ανοίξει, διότι η συναλλαγή DDE απέτυχε. Παρακαλώ δοκιμάστε ξανά σε λίγο."
            Case SE_ERR_DLLNOTFOUND
                lngError = 48
                sError = "Η συγκεκριμένη βιβλιοθήκη δυναμικής σύνδεσης δεν βρέθηκε."
            Case SE_ERR_FNF
                lngError = 53
                sError = "Το αρχείο δεν βρέθηκε."
            Case SE_ERR_NOASSOC
                sError = "Καμία εφαρμογή δεν σχετίζεται με αυτόν τον τύπο αρχείου."
            Case SE_ERR_OOM
                lngError = 7
                sError = "Δεν υπάρχει διαθέσιμη μνήμη."
            Case SE_ERR_PNF
                lngError = 76
                sError = "Η διαδρομή δεν βρέθηκε."
            Case SE_ERR_SHARE
                lngError = 75
                sError = "Σφάλμα πρόσβασης στη διαδρομή ή στο αρχείο."
            Case Else
                sError = "Προκλήθηκε σφάλμα κατά το άνοιγμα ή την εκτύπωση του επιλεγμένου αρχείου."
        End Select

        Err.Raise lngError, , sError

    End If
End Function

Κατόπιν μετονόμασε το κουμπί της φόρμας "Εντολή152" σε "CmdOpenPdf" και πέρασε του τον παρακάτω κώδικα και δοκίμασε:

Κώδικας:

Private Sub CmdOpenPdf_Click()
    Dim ret As Integer, pdfPath As String

    If Not IsNull(Me.Protokollo) Then
      ' Προσάρμοσε τη διαδρομή φακέλου του αρχείου.
        pdfPath = "D:\files\" & Me.Protokollo & ".pdf"

        If Dir(pdfPath, vbDirectory) = vbNullString Then
          'εναλλακτική διαδρομή φακέλου.
            pdfPath = "E:\files\" & Me.Protokollo & ".pdf"
        End If

      ' Άνοιγμα φακέλου και επιλογή ενός αρχείου
        ' ret = ShellExec("explorer", SW_SHOWNORMAL, "/select, pdfPath)


      ' Εκτέλεση ενός αρχείου
        ret = ShellExec(pdfPath)

        If Not ret Then
            Beep
            MsgBox "Σφάλμα: " & Err & vbLf & Err.Description, , "Ms-Office.gr"
        End If
    Else
        MsgBox "Το πεδίο είναι κενό"
    End If
End Sub

Φιλικά

Τάσος

Free_Ghost 25-09-13 19:29

Καλά στην αρχή που είδα αυτό το κατεβατό τρόμαξα και δεν έβγαζα (βγάζω) τίποτα....

Τελικά όμως πέταξα το προηγούμενο κώδικα που είχα βάλει στην Λειτουργική μονάδα και έβαλα αυτόν, στη συνέχεια άλλαξα και τον κώδικα του πλήκτρου και δούλεψε κατευθείαν χωρίς κανένα πρόβλημα...

Από ότι κατάλαβα με αυτήν την μέθοδο μπορείς να βάλεις και τρίτη διαδρομή και πάνω....

Εγώ πάντως με τον τρόπο που προσπαθούσα (και χωρίς όλα αυτά στην Λειτουργική μονάδα) δεν θα το κατάφερνα ποτέ, απέχω πάρα πολύ...

Δεν ξέρω εάν μπορούμε να πετύχουμε και κάποια ένδειξη για το αν υπάρχει η όχι αρχείο, αλλά δεν με ενοχλεί ιδιαίτερα διότι είναι δευτερεύων...

Τώρα τη να ξαναπώ πλέον Τάσο, δεν ξέρω πια πώς να σε Ευχαριστήσω εσένα και τα παιδιά του forum..

:thanks: :respect: :respect: :thanks:


Η ώρα είναι 17:24.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2