*Αυτή είναι μια ανάρτηση επισκέπτη από τον Ryan Wells, έναν συνεργάτη blogger και έναν λαμπρό προγραμματιστή VBA.*
Εάν εργάζεστε με το Excel, αναμφίβολα σας ζητήθηκε να δημιουργήσετε περιλήψεις της εργασίας σας.
Αναφορές πωλήσεων, τιμολόγια, προβλέψεις, χρονοδιαγράμματα, το ονομάζετε.
Ξέρετε τι κοινό έχουν όλα αυτά τα έγγραφα; Φαίνονται υπέροχα σε μορφή PDF. Ξέρεις τι άλλο; Η διοίκηση λατρεύει τα PDF!
Μετατρέψτε το Excel σε PDF
Σε αυτό το σεμινάριο, θα σας δείξω πώς να χρησιμοποιήσετε το Excel VBA για τη μετατροπή όλων των ειδών των αντικειμένων του Excel σε PDF:
Θα παρουσιάσω καθεμία από τις μακροεντολές με κάποιο σχόλιο. Με αυτόν τον τρόπο, θα μπορείτε να τα βρείτε γρήγορα, να τα αντιγράψετε στον επεξεργαστή VBA και να τα χρησιμοποιήσετε.
Όταν εκτελείτε οποιαδήποτε από αυτές τις μακροεντολές, θα εμφανιστεί ένα παράθυρο διαλόγου Αποθήκευση ως που σας ρωτάει πού θέλετε να αποθηκεύσετε το PDF σας. Το προεπιλεγμένο όνομα περιλαμβάνει την ημερομηνία και τη χρονική σήμανση κατά την εκτέλεση της μακροεντολής σε μορφή yyyymmdd_hhmmss.
Ας το πάρουμε σωστά.
Εδώ είναι οι μακροεντολές:
Εκτύπωση επιλογής σε PDF
Αυτό είναι το προσωπικό μου αγαπημένο. Αυτή η μακροεντολή θα μετατρέψει τα κελιά που έχετε επιλέξει ενεργά σε PDF.
Εάν έχετε επιλέξει μόνο ένα κελί, η μακροεντολή VBA είναι αρκετά έξυπνη για να συνειδητοποιήσει ότι πιθανότατα δεν θέλετε να μετατρέψετε μόνο ένα κελί, οπότε σας ζητά να επιλέξετε το εύρος που θέλετε να μετατρέψετε:
Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' DEVELOPER: Ryan Wells 'ΠΕΡΙΓΡΑΦΗ: Εκτυπώστε το τρέχον επιλεγμένο εύρος σε PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Στη συνέχεια ορίστε ThisRng = Εφαρμογή InputBox ( "Επιλογή εύρους", "Λήψη εύρους", Τύπος: = 8) Άλλο Ρύθμιση ThisRng = Τερματισμός επιλογής Αν "Ερώτηση για αποθήκευση τοποθεσίας strfile =" Επιλογή "&" _ "_ & Μορφή (Τώρα ()," yyyymmdd_hhmmss ") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Αρχεία PDF ( *.pdf), *.pdf", _ Τίτλος: = "Επιλογή φακέλου και ονόματος αρχείου για αποθήκευση ως PDF") Εάν το αρχείο "Λάθος" Στη συνέχεια 'αποθηκεύστε ως PDF ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Όνομα αρχείου: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = True, _ IgnorePrintAreas: False, OpenAfterPublish: = True Else MsgBox "Δεν έχει επιλεγεί αρχείο. Το PDF δεν θα αποθηκευτεί", vbOKOnly, "No File Selected" End If End Sub
Μόλις επιλέξετε το εύρος και κάντε κλικ στο OK, θα εμφανιστεί ένα παράθυρο διαλόγου όπου μπορείτε να επιλέξετε πού θέλετε να αποθηκεύσετε το PDF.
Θα επιλέξει αυτόματα την ημερομηνία και την ώρα από το ρολόι του συστήματός σας και θα τα προσθέσει στο όνομα του αρχείου.
Εκτύπωση ενός πίνακα σε PDF
Πολλοί ισχυροί χρήστες Excel αποθηκεύουν τα δεδομένα τους σε οργανωμένους πίνακες. Στην πραγματικότητα, ο ίδιος ο Sumit Bansal αρέσει στους πίνακες Excel τόσο πολύ που τους αποκαλεί κρυμμένο θησαυρό στο Excel.
Αυτή η μακροεντολή εκτυπώνει έναν πίνακα της επιλογής σας σε PDF. Όταν εκτελείτε τη μακροεντολή, θα σας ζητηθεί το όνομα του πίνακα που θέλετε να αποθηκεύσετε.
Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' DEVELOPER: Ryan Wells 'ΠΕΡΙΓΡΑΦΗ: Εκτυπώστε έναν πίνακα της επιλογής σας σε PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False' Εισάγετε τον πίνακα όνομα που θέλετε να αποθηκεύσετε strTable = InputBox ("Πώς λέγεται ο πίνακας που θέλετε να αποθηκεύσετε;", "Εισαγάγετε όνομα πίνακα") 'Πίνακας που θέλετε να αποθηκεύσετε If Trim (strTable) = "" Τότε Έξοδος από το Sub' Prompt για αποθήκευση location strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Αρχεία PDF ( *.pdf), *.pdf", _ Title: = "Επιλέξτε φάκελο και όνομα αρχείου για αποθήκευση ως PDF") Εάν το αρχείο "ψευδές" τότε αποθηκεύστε ως εύρος PDF (strTable) .ExportAsFixedFormat Type : = xlTypePDF, Όνομα αρχείου: = myfile, Ποιότητα: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No File Selected. PDF δεν θα είναι αποθηκευμένο ", vbOKOnly," No File Selected "End If Application.DisplayAlerts = False LetsΣυνέχεια: Με εφαρμογή .ScreenUpdating = True .DisplayAlerts = True End with Exit Sub End Sub
Μόλις εισαγάγετε το όνομα του πίνακα και κάντε κλικ στο κουμπί OK, θα εμφανιστεί ένα παράθυρο διαλόγου όπου μπορείτε να επιλέξετε πού θέλετε να αποθηκεύσετε το PDF.
Θα επιλέξει αυτόματα την ημερομηνία και την ώρα από το ρολόι του συστήματός σας και θα τα προσθέσει στο όνομα του αρχείου.
Εκτύπωση όλων των πινάκων για διαχωρισμό PDF
Εάν το υπολογιστικό φύλλο σας έχει πολλούς πίνακες και πρέπει να αποθηκεύσετε τον καθένα σε ξεχωριστό PDF, μπορείτε να εκτελέσετε αυτόν τον κώδικα VBA.
Όταν εκτελείτε αυτήν τη μακροεντολή, θα εμφανιστεί ένα παράθυρο διαλόγου που θα σας ζητά να επιλέξετε το φάκελο στον οποίο θέλετε να αποθηκεύσετε τα PDF σας.
Μόλις επιλέξετε το φάκελό σας, η μακροεντολή θα αποθηκεύσει κάθε πίνακα σε PDF με το όνομα του πίνακα να εμφανίζεται βολικά στον τίτλο του PDF.
Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' DEVELOPER: Ryan Wells 'ΠΕΡΙΓΡΑΦΗ: Εκτυπώστε κάθε πίνακα στο υπολογιστικό φύλλο σας σε διαφορετικό PDF Dim strTables () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim my dimfile As Integer As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog (msoFileDialogFolderPicker) .Title = "Πού θέλετε να αποθηκεύσετε το PDF σας;" .ButtonName = "Αποθήκευση εδώ" .InitialFileName = ThisWorkbook.Path If .Show = -1 Στη συνέχεια "εάν OK πατηθεί sfolder = .SelectedItems (1) Else End End If End with For Every sht In ThisWorkbook.Worksheets For Every tbl In sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Now ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Όνομα αρχείου: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Next tbl Next sht End Sub
Εκτύπωση όλων των φύλλων σε ένα PDF
Δεν ξέρω για εσάς, αλλά στη δουλειά μου, πρέπει να διατηρήσουμε αντίγραφα PDF σχεδόν όλων των υπολογιστικών φύλλων μας. Προσθέτουμε τα αντίγραφα PDF των υπολογιστικών φύλλων μας στους υπολογισμούς σχεδιασμού. Αυτά τα αρχεία PDF μετατρέπονταν σε μικροφίκα και ήταν θολωτά για μακροχρόνια διατήρηση. Ξέρετε, σε περίπτωση που συνέβαινε η αποκάλυψη.
Εάν βρεθείτε σε παρόμοια κατάσταση, είναι ωραίο να μπορείτε να μετατρέψετε αυτόματα όλα τα φύλλα στο υπολογιστικό φύλλο σας σε ένα PDF. Ακολουθεί μια μακροεντολή VBA που θα κάνει ακριβώς αυτό:
Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' DEVELOPER: Ryan Wells 'ΠΕΡΙΓΡΑΦΗ: Συνδυάστε όλα τα φύλλα εργασίας σας σε ένα PDF Dim strSheets () As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile σε έναν πίνακα για κάθε sh Στο ActiveWorkbook.Wheksheets If sh.Visible = xlSheetVisible then ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Τότε 'Δεν βρέθηκαν γραφήματα Σφάλμα διάτρησης MsgBox "Ένα PDF δεν μπορεί να δημιουργηθεί επειδή δεν βρέθηκαν φύλλα.",, "Δεν βρέθηκαν φύλλα" Έξοδος από το τερματισμό εάν "Ερώτηση για αποθήκευση τοποθεσίας strfile =" Φύλλα "&" _ "_ & Μορφή (Τώρα ()," yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" Αρχεία PDF ( *.pdf), *.pdf ", _ Title: = "Select Folder and File Name to Save as PDF") If myfile "False" then 'save as PDF ThisWorkbook.Sheets (strSheets) .Select ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No File Selected. PDF will not save", vbOKOnly, "No File Selected" End If End Sub
Εκτύπωση φύλλων γραφημάτων σε PDF
Αυτή η μακροεντολή μετατρέπει όλα τα φύλλα γραφήματος σε ένα PDF - αλλά όχι τα αντικείμενα γραφήματος! Με τα φύλλα γραφημάτων, εννοώ τα γραφήματα που έχουν τη δική τους καρτέλα στη λίστα καρτελών υπολογιστικών φύλλων:
Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' DEVELOPER: Ryan Wells 'ΠΕΡΙΓΡΑΦΗ: Συνδυάστε όλα τα φύλλα γραφημάτων σε ένα PDF Dim strSheets () As String Dim strfile As String Dim ch As Object, sh As Worksheet Dimffifant my icount As Integer Αποθήκευση ονομάτων φύλλων γραφήματος σε πίνακα για κάθε ch Στο ActiveWorkbook.Charts ReDim Preserve strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Next ch If icount = 0 Τότε 'Δεν βρέθηκαν γραφήματα Σφάλμα διάτρησης MsgBox "Ένα PDF δεν μπορεί να δημιουργηθεί επειδή δεν βρέθηκαν φύλλα γραφήματος.",, "Δεν βρέθηκαν φύλλα γραφημάτων" Έξοδος από το τέλος αν "Ερώτηση για αποθήκευση τοποθεσίας strfile =" Charts "&" _ "_ & Format (Now () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Αρχεία PDF ( *.pdf), *.pdf ", _ Title: =" Επιλέξτε φάκελο και όνομα αρχείου για αποθήκευση ως PDF ") Εάν το αρχείο μου είναι" seευδές "Στη συνέχεια 'αποθηκεύστε ως PDF ThisWorkbook.Sheets (strSheets). Επιλέξτε ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Όνομα αρχείου: = _ myfile, Ποιότητα: = xlQualityStandard, IncludeDocProperties: = True, _ IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "No File Selected. PDF will not save", vbOKOnly, "No File Selected" End If End Sub
Εκτύπωση αντικειμένων γραφήματος σε PDF
Αυτή η μακροεντολή αποθηκεύει όλα τα κανονικά γραφήματα - αντικείμενα γραφημάτων - σε ένα μόνο PDF. Ανεξάρτητα από το φύλλο εργασίας που βρίσκεται το γράφημα, θα αρπαχτεί και θα αποθηκευτεί σε PDF.
Θα υπάρχει μόνο ένα γράφημα ανά σελίδα στο τελικό PDF.
Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' DEVELOPER: Ryan Wells 'DESCRIPTION: Συνδυάστε όλα τα αντικείμενα γραφήματος σε ένα PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As AsrtObject Dimp = False Set wsTemp = Sheets.Προσθέστε tp = 10 Με wsTemp Για κάθε ws στο ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Then GoTo nextws: For Every chrt In ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row> 1 Στη συνέχεια ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End If tp = tp + Selection.Βάρος + 50 Επόμενα επόμενα: ws Λήξη με 'Προτροπή για αποθήκευση τοποθεσίας strfile = "Διαγράμματα" & "_" _ & Μορφή (Τώρα (), "yyyymmdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "Αρχεία PDF ( *.pdf), *.pdf", _ Title: = "Select Fol der and Name File to Save as PDF ") If myfile False then 'save as PDF wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, True 'Else' MsgBox "Δεν έχει επιλεγεί αρχείο. Το PDF δεν θα αποθηκευτεί ", vbOKOnly," No File Selected "End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub
Εάν έχετε οποιεσδήποτε ερωτήσεις, αφήστε τις στην ενότητα σχολίων, όπου ο Ryan και εγώ θα σας περιμένουμε εκεί.
Μπορεί επίσης να σας αρέσουν τα ακόλουθα σεμινάρια Excel:
- Πώς να ενσωματώσετε ένα αρχείο PDF σε ένα φύλλο εργασίας του Excel.
- Excel VBA Loops: For Next, Do while, Do Until, For καθένα (με παραδείγματα).
- Πώς να καταγράψετε μια μακροεντολή στο Excel
- Πώς να συνδυάσετε πολλά βιβλία εργασίας σε ένα βιβλίο εργασίας Excel.
- Πώς να εκτελέσετε μια μακροεντολή στο Excel.
- Πώς να δημιουργήσετε και να χρησιμοποιήσετε ένα πρόσθετο Excel.
- Χειρισμός σφαλμάτων Excel VBA
- Διαχωρίστε κάθε φύλλο Excel σε ξεχωριστά αρχεία
- Τρόπος εισαγωγής αρχείου XML στο Excel | Μετατροπή XML σε Excel
Σχετικά με τον Συγγραφέα: Ο Ryan Wells είναι πυρηνικός μηχανικός και επαγγελματίας προγραμματιστής VBA. Δημοσιεύει τα εύκολα κατανοητά μαθήματα του Excel VBA για να βοηθήσει άλλους να γράψουν καλύτερες μακροεντολές. Εκτός από τη διδασκαλία VBA, ο Ryan είναι ο κύριος προγραμματιστής αρκετών πρόσθετων του Excel. Μπορείτε να βρείτε τα μαθήματα του στο WellsR.com.