*Ez a vendég bejegyzés Ryan Wells blogtársától és egy ragyogó VBA -fejlesztőtől.*
Ha Excel -sel dolgozik, akkor kétségtelenül felkérték, hogy készítsen összefoglalót a munkájáról.
Értékesítési jelentések, számlák, előrejelzések, ütemtervek, nevezze meg.
Tudod, mi a közös ezekben a dokumentumokban? PDF formátumban jól néznek ki. Tudod mi mást? A menedzsment szereti a PDF -eket!
Az Excel konvertálása PDF -be
Ebben az oktatóanyagban megmutatom, hogyan használhatja az Excel VBA -t mindenféle Excel objektum PDF formátumba való konvertálásához:
Mindegyik makrót bemutatom néhány kommentárral. Így gyorsan megtalálhatja őket, átmásolhatja őket a VBA szerkesztőjébe, és használhatja őket.
Ezen makrók bármelyikének futtatásakor megjelenik a Mentés másként párbeszédpanel, amely megkérdezi, hogy hova szeretné menteni a PDF -fájlt. Az alapértelmezett név tartalmazza a dátumot és az időbélyeget, amikor a makrót yyyymmdd_hhmmss formátumban hajtotta végre.
Térjünk rá rögtön.
Itt vannak a makrók:
Nyomtatás kiválasztása PDF formátumba
Ez a személyes kedvencem. Ez a makró az aktívan kiválasztott cellákat PDF formátumba konvertálja.
Ha csak egy cella van kijelölve, a VBA makró elég okos ahhoz, hogy felismerje, hogy valószínűleg nem csak egy cellát szeretne konvertálni, ezért kéri, hogy válassza ki a konvertálni kívánt tartományt:
Sub PrintSelectionToPDF () 'SUBROUTINE: PrintSelectionToPDF' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Nyomtassa ki a kiválasztott tartományt PDF formátumba. "Válasszon egy tartományt", "Tartomány lekérése", Írja be: = 8) Másként állítsa be eztRng = Kiválasztás vége Ha a "Mentési hely kérése" strfile = "Kiválasztás" & "_" _ & Formátum (Most (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF fájlok ( *.pdf), *.pdf", _ Cím: = "Válassza ki a PDF -ben mentendő mappát és fájlnevet") Ha a "False" fájl, akkor mentse PDF formátumban ThisRng.ExportAsFixedFormat Type: = xlTypePDF, Fájlnév: = _fájl, Minőség: = xlQualityStandard, IncludeDocProperties: = Igaz, _ IgnorePrintAreas: = Hamis, OpenAfterPublish: = Igaz Else MsgBox "Nincs fájl kijelölve. A PDF nem lesz mentve", vbOKOnly, "Nincs fájl kijelölve" End If End Sub
Miután kiválasztotta a tartományt, és kattintson az OK gombra, megjelenik egy párbeszédpanel, ahol kiválaszthatja, hogy hova szeretné menteni a PDF -fájlt.
Automatikusan kiválasztja a dátumot és az időt a rendszer órájából, és hozzáadja a fájlnévhez.
Nyomtasson ki egy táblázatot PDF -be
Sok Excel -felhasználó tárolja adatait rendszerezett táblázatokban. Valójában Sumit Bansalnak annyira tetszenek az Excel táblázatok, hogy az Excel rejtett kincsének nevezi őket.
Ez a makró kinyomtatja az Ön által választott táblázatot PDF -be. A makró futtatásakor a rendszer kéri a menteni kívánt tábla nevét.
Sub PrintTableToPDF () 'SUBROUTINE: PrintTableToPDF' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Nyomtasson egy táblázatot az Ön által választott PDF Dim strfile -hoz String Dim myfile -ként Variant Dim strTable Mint String, r Mint Range Application.ScreenUpdating = False' Írja be a táblázatot név, amelyet menteni szeretne location strfile = strTable & "_" _ & Format (Now (), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF fájlok ( *.pdf), *.pdf", _ Title: = "Válassza ki a mappát és a fájlnevet a PDF -be mentéshez") Ha a "hamis" fájl, akkor "mentse PDF tartományként (strTable) .ExportAsFixedFormat Type : = xlTypePDF, Fájlnév: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfterPublish: = True Else MsgBox "Nincs fájl kiválasztva. PDF nem lesz mentve ", vbOKOnly," Nincs fájl kijelölve "Vége, ha Application.DisplayAlerts = False LetsContinue: Application .ScreenUpdating = True .DisplayAlerts = True End Exit Sub End Sub
Miután beírta a táblázat nevét, és rákattint az OK gombra, megjelenik egy párbeszédpanel, ahol kiválaszthatja, hogy hova szeretné menteni a PDF -fájlt.
Automatikusan kiválasztja a dátumot és az időt a rendszer órájából, és hozzáadja a fájlnévhez.
Nyomtassa ki az összes táblázatot a PDF -ek szétválasztásához
Ha a táblázat több táblából áll, és mindegyiket külön PDF -be kell mentenie, futtathatja ezt a VBA -kódot.
Ennek a makrónak a futtatásakor megjelenik egy párbeszédpanel, amely arra kéri, hogy válassza ki azt a mappát, ahová el szeretné menteni a PDF fájlokat.
Miután kiválasztotta a mappát, a makró minden táblát PDF -be menti, és a táblázat címe kényelmesen megjelenik a PDF címében.
Sub PrintAllTablesToPDFs () 'SUBROUTINE: PrintAllTablesToPDFs' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Nyomtassa ki a táblázat minden táblázatát egy másik PDF Dim strTables () String Dim strfile -ként String Dim ch objektumként, sh mint munkalap Dim icile mint Integer Dimf Változatként Dim tbl ListObject Dim sht munkalapként Application.FileDialog (msoFileDialogFolderPicker) .Title = "Hová szeretné menteni a PDF fájlt?" .ButtonName = "Mentés" .InitialFileName = ThisWorkbook.Path If .Show = -1 Majd 'ha az OK le van nyomva sfolder = .SelectedItems (1) Egyéb Vége Vége Ha Vége Vége Minden sht -hoz a ThisWorkbook.Worksheets For each tbl In sht .ListObjects myfile = ThisWorkbook.Name & ""& tbl.Name &""_ & Format (Most ()," yyyymmdd_hhmmss ") _ &" .pdf "myfile = sfolder &" \ "& myfile sht.Range (tbl.Name) .ExportAsFixedFormat Type: = xlTypePDF, Filename: = _ myfile, Quality : = xlQualityStandard, IncludeDocProperties: = Igaz, _ IgnorePrintAreas: = Hamis, OpenAfterPublish: = Igaz Következő tbl Következő sht End Sub
Nyomtasson ki minden lapot egy PDF -be
Nem tudom, ti hogy vagytok vele, de a munkám során szinte minden táblázatunk PDF -példányát meg kell őriznünk. A táblázatok PDF másolatait csatoljuk tervezési számításainkhoz. Ezeket a PDF-eket korábban mikrofiche-vé alakították át, és boltozták a hosszú távú megőrzés érdekében. Tudod, hátha megtörténik az apokalipszis.
Ha hasonló helyzetben találja magát, jó, ha a táblázat összes lapját automatikusan egy PDF -be tudja konvertálni. Itt van egy VBA makró, amely ezt teszi:
Sub PrintAllSheetsToPDF () 'SUBROUTINE: PrintAllSheetsToPDF' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Kombinálja az összes munkalapot egy PDF Dim strSheets () Mint String Dim strfile Mint String Dim sh Mint Munkalap Dim icount Mint Integer Dim Myfile As Variant' minden tömbhöz az ActiveWorkbook.Worksheets Ha sh.Visible = xlSheetVisible, akkor a ReDim Preserve strSheets (icount) strSheets (icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Akkor 'Nincsenek diagramok. Lyukasztási hiba MsgBox "A PDF nem hozható létre, mert nem találhatók lapok.", "Nem találhatók táblázatok" Kilépés az alvégből, ha a "Mentési hely kérése" strfile = "Sheets" & "_" _ & Format (Now (), " yyyymmdd_hhmmss ") _ &" .pdf "strfile = ThisWorkbook.Path &" \ "& strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: =" PDF fájlok ( *.pdf), *.pdf ", _ Title: = "Válassza ki a PDF -ben mentendő mappát és fájlnevet") Ha a "False" fájl, akkor mentse PDF -ként ThisWorkbook.Sheets (strSheets). Válassza ki az ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Fájlnév: = _ saját fájl, Minőség: = xlQualityStandard, IncludeDocProperties: = Igaz, _ IgnorePrintAreas: = Hamis, OpenAfterPublish: = Igaz Egyéb MsgBox "Nincs fájl kijelölve. A PDF nem lesz mentve", vbOKOnly, "Nincs fájl kiválasztva" Vége, ha vége al
Diagramlapok nyomtatása PDF formátumba
Ez a makró az összes diagramlapját egy PDF -be konvertálja - de nem a diagramobjektumokat! Diagramlapok alatt azokat a diagramokat értem, amelyeknek saját lapja van a táblázatlapok listájában:
Sub PrintChartSheetsToPDF () 'SUBROUTINE: PrintChartSheetsToPDF' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Az összes diagramlap egyesítése egyetlen PDF Dim strSheets () String Dim strfileként String Dim ch mint Object, sh As Munkalap Dim icount As Integer Dimfile Mentse a diagramlapneveket egy tömbhöz minden egyes ch -hez az ActiveWorkbookban. Diagramok ReDim Preserve strSheets (icount) strSheets (icount) = ch.Name icount = icount + 1 Következő ch If icount = 0 Akkor 'Nincsenek diagramok. Lyukasztási hiba MsgBox "A PDF nem hozható létre, mert nem találhatók diagramlapok.", "Nem találhatók diagramlapok" Kilépés az alvégből Ha a "Prompt for save save location" strfile = "Charts" & "_" _ & Format (Now () , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF fájlok ( *.pdf), *.pdf ", _ Title: =" Válassza ki a PDF -ben mentendő mappa és fájlnevet ") Ha a" False "fájl, akkor mentse PDF -ként ThisWorkbook.Sheets (strSheets). Válassza ki az ActiveSheet.ExportAsFixedFormat Type: = xlTypePDF, Fájlnév: = _fájl, Minőség: = xlQualityStandard, IncludeDocProperties: = Igaz, _ IgnorePrintAreas: = False, OpenAfterPublish: = Igaz Else MsgBox "Nincs fájl kijelölve. A PDF nem lesz mentve", vbOKOnly, "Nincs kiválasztva fájl" Vége, ha vége al
Diagramobjektumok nyomtatása PDF -be
Ez a makró az összes normál diagramot - diagramobjektumot - egyetlen PDF -be menti. Függetlenül attól, hogy a diagram melyik munkalapon található, a rendszer megfogja és PDF -be menti.
A végső PDF -ben oldalanként csak egy diagram lesz.
Sub PrintChartsObjectsToPDF () 'SUBROUTINE: PrintChartsObjectsToPDF' FEJLESZTŐ: Ryan Wells 'LEÍRÁS: Kombinálja az összes diagramobjektumot egyetlen PDF Dim ws -ként munkalapként, wsTemp mint munkalap Dim chrt mint ChartObject Dim tp As Long Dim strfile As Stingd Dimf = False Set wsTemp = Sheets.Add tp = 10 WsTemp Minden ws -hez az ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Majd GoTo nextws: For each chrt In ws.ChartObjects chrt.Copy wsTemp.Range ("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row> 1 Majd ActiveSheet.Rows (Selection.TopLeftCell.Row) .PageBreak = xlPageBreakManual End Ha tp = tp + Selection.Height + 50 Következő: Következő ws véget ér a 'Prompt for save location strfile = "Charts" & "_" _ & Format (Now (), "yyyymmdd \ _hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName: = strfile, _ FileFilter: = "PDF fájlok ( *.pdf), *.pdf", _ Title: = "Fol kiválasztása der és a fájlnév PDF -be mentendő ") Ha a Myfile False, akkor" mentse PDF -ként wsTemp.ExportAsFixedFormat Type: = xlTypePDF, Filename: = myfile, Quality: = xlQualityStandard, _ IncludeDocProperties: = True, IgnorePrintAreas: = False, OpenAfter Igaz "más" MsgBox "Nincs fájl kiválasztva. A PDF nem lesz mentve ", vbOKOnly," Nincs fájl kijelölve "Vége, ha Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End Exit Sub End Sub Sub
Ha bármilyen kérdése van, tegye fel őket a megjegyzések rovatba, ahol Ryan és én ott várunk rád.
A következő Excel oktatóanyagok is tetszhetnek:
- PDF fájl beágyazása Excel munkalapba.
- Excel VBA hurkok: Következő, csináld amíg, addig, mindegyikhez (példákkal).
- Makró rögzítése Excelben
- Több munkafüzet egyesítése egyetlen Excel munkafüzetbe.
- Makró futtatása Excelben.
- Excel-bővítmény létrehozása és használata.
- Excel VBA hibakezelés
- Ossza fel az egyes Excel -lapokat külön fájlokba
- XML fájl importálása Excelbe | Konvertálja az XML -t Excel -be
A szerzőről: Ryan Wells nukleáris mérnök és professzionális VBA -fejlesztő. Közzéteszi könnyen érthető Excel VBA oktatóanyagait, hogy segítsen másoknak jobb makrókat írni. A VBA oktatása mellett Ryan számos Excel-bővítmény vezető fejlesztője. Oktatóanyagait megtalálhatja a WellsR.com webhelyen.