Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [Εκτύπωση] Εκτύπωση φύλλου excel σε pdf (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/4986-ektiposi-filloy-excel-se-pdf.html)

skomat 24-08-18 15:29

Εκτύπωση φύλλου excel σε pdf
 
Καλησπέρα ομάδα. Ένα φύλλο excel (η καλυτερα μια περιοχη ενος φυλλου), μπορεί να εκτυπωθεί- αποθηκευτεί σε μορφή pdf μέσω μακροεντολης, σε ενα προκαθορισμενο σημείο??

kapetang 24-08-18 15:54

Αλέξανδρε δοκίμασε τον κώδικα:

Κώδικας:

Sub SaveAsPDF()
    'Αποθηκεύει σε Pdf το ενεργό φύλλο
    Dim rng As Range, sPath As String
    On Error GoTo errHandler
    Set rng = ActiveSheet.UsedRange
   
    ' Η αποθήκευση γίνεται στο φάκελο του βιβλίου εργασίας
    ' και το όνομα έχει τη μορφή: Sheet_20180824_150835
    sPath = ThisWorkbook.Path & "\Sheet_" & Format(Now(), "yyyymmdd\_hhmmss")

    rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:="" & sPath, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=True
    Exit Sub
errHandler:
    MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub

Υ.Γ Το βιβλίο πρέπει να έχει αποθηκευτεί πριν από τη χρήση του κώδικα

Spirosgr 24-08-18 15:55

Καλό είναι, να κάνουμε μια έρευνα στο forum, πριν ζητήσουμε κάτι.

Πολλά παραδείγματα pdf...ένα από αυτά (τυχαίο) εδώ:
http://www.ms-office.gr/forum/excel-...si-os-pdf.html

skomat 25-08-18 07:27

Καλημέρα. Οκ συγγνώμη για το ποστ που δεν έκανα αναζήτηση, ακόμα μαθαίνω. Για να αποθηκεύσουμε σε pdf μια περιοχή ενός φίλου σε συγκεκριμένο φάκελο? Δηλαδή έστω ότι έχουμε το βιβλίο test και το φύλλο test1, θέλω να αποθηκευσω την περιοχη A1 έως G7, του φύλλου test1, στον φάκελο c:/user/data/test1.pdf. Θα με βόλευε η μη προηγούμενη αποθήκευση του βιβλίου. Σας ευχαριστώ για την διάθεση του πολύτιμου χρόνου σας.

Spirosgr 25-08-18 08:14

Καλημέρα
Ναι είναι ακριβώς αυτό που ζητάς, σε αντίθεση με τον κώδικα που πρότεινε ο Γιώργος
ο οποίος εκτυπώνει όλη την UsedRange, και όχι συγκεκριμένη περιοχή...
Κώδικας:

Sub SaveFileAsPDF()
    Dim SavePath As String, FolderName As String
    Dim UName As String, WhereToSave As String
    Dim PrintRange As Range, FileName As Range

    Set PrintRange = Sheet1.Range("myPrintRange")'Όνομα περιοχής που θα εκτυπωθεί
    Set FileName = Sheet1.Range("myInvNumber")'Όνομα περιοχής που περιέχει Αρ. Τιμολογίου
   
    UName = "Spirosgr"'Όνομα χρήστη
    WhereToSave = "Desktop"'Σημείο υπολογιστή που θα αποθηκευθεί
    FolderName = "INVBackUp"'Όνομα φακέλου αποθήκευσης
   
    SavePath = "C:\Users\" & UName & "\" & WhereToSave & "\" & FolderName
   
    PrintRange.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
                                  SavePath & "\" & FileName & ".pdf", Quality:= _
                                  xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                  OpenAfterPublish:=False
End Sub

Στον κώδικα αρκεί να αλλάξουμε τις παραμέτρους του παραδείγματος,
με αυτά που θέλουμε στο βιβλίο μας
*Όπου έχει πράσινη γραμματοσειρά

Set PrintRange = Sheet1.Range("myPrintRange") ονόμασε την περιοχή σε myPrintRange ή πληκτρολόγησε
Set PrintRange = Sheet1.Range("a1:g7")

Set FileName = Sheet1.Range("myInvNumber") ονόμασε ένα κελί σε myInvNumber ή όπως θέλεις και βάλε μέσα τον τίτλο pdf ή
άλλαξέ το με μεταβλητή τίτλου

UName = "Spirosgr" άλλαξε με το δικό σου όνομα χρήστη
WhereToSave = "Desktop" κράτησέ το ή άλλαξε με ότι θέλεις πχ Documents

FolderName = "INVBackUp" άλλαξέ το με όνομα φακέλου των pdf σου πχ MyPdf
*Στο σημείο που θα αποθηκεύσεις πχ Desktop, βάλε φάκελο με το όνομα αυτό

Τέλος το OpenAfterPublish:=False ή True εμφανίζει ή όχι το pdf, μετά την αποθήκευση...

Σημείωση
Το path αποθήκευσης, μπορεί να μετατραπεί στο ίδιο path με το αρχείο excel
Ο κώδικας αφορά το παράδειγμα του link και μόνο (post #2)

skomat 25-08-18 08:27

Σε ευχαριστώ πάρα πολύ, θα το δοκιμάσω και θα ενημερώσω σχετικά το forum, σε ευχαριστώ!!!

Spirosgr 25-08-18 08:29

1 Συνημμένο(α)
Ρίξε μια ματιά και στην πιο κάτω εικόνα

skomat 25-08-18 09:10

1 Συνημμένο(α)
Σπύρο καλημέρα (μου επιτρέπεις φυσικά να σου μιλάω στον ενικο), εκανα καποιες αλλαγες στον κωδικα, σχετικα με την περιοχη εκτυπωσης, το αρχειο να σημειωσω δεν είναι τιμολογιο, απλα είναι ένα αρχειο καταγραφης αποτελεσματων ενός σωματειου, εσβησα μια γραμμη κωδικα, και μου βγαζει το ακολουθω μυνημα που σου επισυναπτω. Τι κανω λαθος?? Tο φυλλο ονομάζετε Apografi, και η περιοχη εκτυπωσης είναι από το A1 εως το AA69. Γιατι θα πρεπει να ονομασω ένα κελι που μου εστειλες στο τελευταιο παράδειγμα σου?? Σε ευχαριστω πολύ εκ των προτερων.!!!

Spirosgr 25-08-18 09:30

Η εικόνα δεν φαίνεται καλά, στο τι πρόβλημα υπάρχει...

Όμως εκεί που λες Set PrintRange = Apografi.Range("....
το Apografi είναι λάθος...
Θα βάλεις, το κωδικό όνομα του φύλλου, πχ Sheet1
ή θα ονομάσεις το κωδικό όνομα του φύλλου, Apografi.

Spirosgr 25-08-18 09:32

Για την ονομασία του κελιού...

Δεν είναι απαραίτητο, εκτός αν μπορείς (όπως σου είπα) να βάλεις μεταβλητή με τίτλο .pdf

kapetang 25-08-18 09:45

Καλημέρα
Αλέξανδρε προσάρμοσα τον κώδικα στο ζητούμενο

Κώδικας:

Sub SaveAsPDF()
    Dim rng As Range, sPath As String
    On Error GoTo errHandler
    Set rng = Me.Range("a1:aa69")
   
  sPath = "c:\users\data\test1.pdf" 'βάλε αυτό που θέλεις

    rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:="" & sPath, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, OpenAfterPublish:=True
    Exit Sub
errHandler:
    MsgBox Err.Description, vbCritical, "Error #" & Err.Number
End Sub

Θα τον βάλεις ανάμεσα στις γραμμές

Private Sub…..

End Sub

Αφού του αφαιρέσεις τις γραμμές του Sub….και End Sub.

skomat 25-08-18 10:04

1 Συνημμένο(α)
Σπυρο αυτά με το κωδικο ονομα φυλλου δεν το καταλαβαίνω, το φυλλο από το βιβλιο το εχω μετονομασει σε Apografi, και δεν είναι πλεον το Φυλλο1 (εχω Ελληνικο office), σου επισυναπτω μεγαλυτερη φωτο!

Spirosgr 25-08-18 10:21

2 Συνημμένο(α)
Φίλε, μαθήματα «δι' αλληλογραφίας» δεν μπορούμε να κάνουμε...
Από την αρχή, θα έπρεπε να ανεβάσεις ένα δείγμα,
για να μην κουραζόμαστε με άσκοπα posts...

Το φύλλο Apografi (εικόνα 1), καλώς είναι ότι είναι.
Θα πρέπει να του αλλάξεις το κωδικό όνομα σε κάτι άλλο ή σε Apografi (εικόνα 2).
Στην εικόνα έχει γίνει SH_1, και αυτό το όνομα πάει στον κώδικα...

skomat 25-08-18 10:46

1 Συνημμένο(α)
Παιδια συγνωμη ναι θα επρεπε να ειχα ανεβασει ένα φυλλο για το τι θελω να κανω (Το ανεβαζω τωρα). Οκ ο κωδικας του Γιωργου, δουλεψε, αποθηκευσε, απλα όταν κλεισω το αρχειο και το ξανανοίξω, και παω να κανω παλι αποθηκευση, επειδή εχω ένα εκτυπωτή ορισμενο σαν πρωτο (master), παει και μου χαλαει ολη την διαταξη της σελίδας, και από εκει που είναι μια σελιδα, μου αποθηκευει 2. Θα πρεπει να παω να αλλαξω εκτυπωτή από Αρχειο>εκτυπωση>εκτυπωτες, να το γυρισω σε adobe pdf, για να μου το αποθηκευσει σωστα.
Στην συνεχεια στο συγκεκριμενο φυλλο, εχω σε σειρα και άλλες "σελιδες" που όταν παταω το πρωτο κουμπι (Αποθηκευση σε pdf, σελιδα1 ), θελω να μου αποθηκευει το αρχειο σε pdf την πρωτη… "σελιδα" όταν παταω το δευτερο κουμπι (Αποθηκευση σε pdf, σελιδα1+2) στο ιδιο αρχειο αλλα με δυο σελιδες κ.ο.κ.!!!!

Spirosgr 25-08-18 11:22

Για όλους όσους μας διαβάζουν...

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

Συνδέουμε τον κώδικα (τον οποίο βάζουμε σε μια module), με το κουμπί του φύλλου54
Κώδικας:

Sub SaveFileAsPDF()
    Dim SavePath As String, FolderName As String
    Dim UName As String, WhereToSave As String
    Dim PrintRange As Range, pdfFileName As String

    Set PrintRange = Φύλλο54.Range("a1:aa69") 'περιοχή που θα εκτυπωθεί
    pdfFileName = "Το pdf μου" 'τίτλος pdf
   
    UName = "Όνομα χρήστη" 'Όνομα χρήστη
    WhereToSave = "Desktop" 'Σημείο υπολογιστή που θα αποθηκευθεί
    FolderName = "Ο φάκελός μου" 'Όνομα φακέλου αποθήκευσης
   
    SavePath = "C:\Users\" & UName & "\" & WhereToSave & "\" & FolderName
   
    PrintRange.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
                                  SavePath & "\" & pdfFileName & ".pdf", Quality:= _
                                  xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
                                  OpenAfterPublish:=False 'True
End Sub

Σημειώσεις:
*Στο μπλε σημείο, το όνομα χρήστη

Στο σημείο αποθήκευσης, θα πρέπει να δημιουργήσεις ένα φάκελο, με όνομα: «Ο φάκελός μου».
*χωρίς εισαγωγικά
Θα μπορούσε ο κώδικας να ελέγχει αν υπάρχει ο φάκελος, και να τον δημιουργεί αυτόματα...

Ο κώδικας, θα μπορούσε να αποθηκεύει (με αλλαγές) το pdf, στο ίδιο σημείο με το excel,
χωρίς να χρειάζονται χρήστης και σημείο αποθήκευσης.
Ακόμα και σε άλλη τοποθεσία αποθήκευσης (όχι μαζί με excel), με μια προσθήκη μπορεί να μην χρειάζεται ο χρήστης (Get Uname...)

Με την παρούσα μορφή, κάθε νέο pdf, αντικαθιστά το παλιό.
*Στο κόκκινο σημείο, μπορούμε να προσθέσουμε ημερομηνία ή και ώρα
ή και μια αυτόματη αρίθμηση (προσθήκη κώδικα)
για να μην διαγράφονται τα προηγούμενα αρχεία .pdf

kapetang 25-08-18 11:31

1 Συνημμένο(α)
Με το ίδιο κουμπί θα αντιμετωπίζεις όλες τις περιπτώσεις.

Πατώντας το πρώτο κουμπί και στο παράθυρο που θα εμφανιστεί δώσε 1, ή 2, ή 3.

Αν έχεις και άλλες θα πρέπει να τις συμπληρώσεις.

skomat 25-08-18 11:40

Παράθεση:

Αρχική Δημοσίευση από kapetang (Μήνυμα 28129)
Με το ίδιο κουμπί θα αντιμετωπίζεις όλες τις περιπτώσεις.

Πατώντας το πρώτο κουμπί και στο παράθυρο που θα εμφανιστεί δώσε 1, ή 2, ή 3.

Αν έχεις και άλλες θα πρέπει να τις συμπληρώσεις.

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

kapetang 25-08-18 11:55

1 Συνημμένο(α)
Αλέξανδρε δοκίμασε το συνημμένο.

Τον εκτυπωτή άφησέ τον εκεί που είναι συνήθως.

Στον κώδικα θα οριστεί σε "Adobe PDF" (έλεγξε το όνομα) και μετά την αποθήκευση θα ξαναβάλει τον αρχικό.

Ελπίζω να δουλέψει.

skomat 25-08-18 12:02

Παράθεση:

Αρχική Δημοσίευση από skomat (Μήνυμα 28130)
ok Σε ευχαριστω πολύ, αυτό ακριβψς ηθελα, και σε ευχαριστω παρα πολύ για τον χρονο που διαθεσες. Το προβλημμα που με γυρναει στον μαστερ εκτυπωτή αν κλεισω το αρχειο και μου χαλαει την διαταξη σελίδας???

οκ το εφτιαξα, ρυθμισα τις στειλες και όλα οκ. Σας ευχαριστω πολύ για τον πολυτιμο χρονο που διαθέσατε για το θεμα μου.!!!

kapetang 25-08-18 12:07

Να είσαι καλά και καλή συνέχεια.

Spirosgr 25-08-18 12:14

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

skomat 28-08-18 09:23

Καλημέρα Ομάδα. Σχετικά με την αποθήκευση ενός φύλλου excel σε pdf, γιατί όταν το κάνω αποθήκευση με την παλιά μέθοδο, δηλαδή Αρχείο > εκτύπωση > επιλογή εκτυπωτή Adobe Pdf> εκτύπωση, το αρχείο που μου παράγει είναι 64kb, ενώ όταν το κάνω με την μακροεντολή το ίδιο αρχείο πάντα ανεβαίνει στα...….. 237kb??????

Spirosgr 28-08-18 11:18

Ο κώδικας του Γιώργου (που πιθανό χρησιμοποιείς) έχει:
Κώδικας:

Quality:=xlQualityStandard
Η μορφή αυτή, δίνει μεγάλα αρχεία...

Προτείνω
Κώδικας:

Quality:=xlQualityMinimum
που είναι «ελαφριά» και χρησιμοποιείται για να ανεβάζουμε αρχεία στο internet
(πχ emails) με το μικρότερο δυνατό όγκο, χωρίς να αλλοιώνει την εμφάνιση των .pdf

skomat 28-08-18 11:39

Παράθεση:

Αρχική Δημοσίευση από Spirosgr (Μήνυμα 28146)
Ο κώδικας του Γιώργου (που πιθανό χρησιμοποιείς) έχει:
Κώδικας:

Quality:=xlQualityStandard
Η μορφή αυτή, δίνει μεγάλα αρχεία...

Προτείνω
Κώδικας:

Quality:=xlQualityMinimum
που είναι «ελαφριά» και χρησιμοποιείται για να ανεβάζουμε αρχεία στο internet
(πχ emails) με το μικρότερο δυνατό όγκο, χωρίς να αλλοιώνει την εμφάνιση των .pdf

Σε ευχαριστω πολύ για την απαωτηση σου, ναι χρησιμοποιώ την λυση του Γιωργου γιατι ηταν πιο βατη για εμενα που δεν εχω πολλες….. γνωσεις σε vba. Με minimum quality το μέγεθος επεσε στα 148kb, αλλα και παλι γιατι αυτή η διαφορα, από τα 64kb στα 148kb??

Spirosgr 28-08-18 11:52

Κοίτα...
Επί της ουσίας, μιλάμε για ελάχιστα Kb...
Τα αρχεία αυτά, δεν έχουν προβλήματα και κανονικά,
ούτε ο κώδικας του Γιώργου θα έπρεπε να σε απασχολεί, γιατί κατά τα άλλα
βασίζεται στο σύστημα και είναι σωστός.

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

skomat 28-08-18 16:26

Παράθεση:

Αρχική Δημοσίευση από Spirosgr (Μήνυμα 28149)
Κοίτα...
Επί της ουσίας, μιλάμε για ελάχιστα Kb...
Τα αρχεία αυτά, δεν έχουν προβλήματα και κανονικά,
ούτε ο κώδικας του Γιώργου θα έπρεπε να σε απασχολεί, γιατί κατά τα άλλα
βασίζεται στο σύστημα και είναι σωστός.

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

Όλες οι παράμετροι εκτυπώσης ποιες είναι δηλαδη?? Δεν είμαι και super duper power user!! Δεν με απασχολεί τίποτα εφόσον Όπως είναι κάνω την δουλειά μου απλά αναρωτιέμαι γιατί υπάρχει αυτή η διαφορά μεγέθους! Σε ευχαριστώ πολύ.


Η ώρα είναι 10:01.

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


Search Engine Optimization by vBSEO 3.3.2