Cách chuyển file Excel sang PDF sử dụng VBA
Trong bài viết này, chúng tôi sẽ hướng dẫn bạn cách sử dụng VBA Excel - viết tắt của Visual Basic for Applications, một ngôn ngữ lập trình tích hợp trong Excel - để chuyển đổi tất cả nội dung trong file Excel sang định dạng PDF. Bài hướng dẫn chuyển Excel sang PDF bao gồm: Chuyển ô tùy chọn sang PDF, Chuyển một bảng (Table) sang PDF, Chuyển tất cả bảng sang file PDF riêng biệt, Chuyển tất cả bảng tính (Spreadsheet) sang một file PDF, Chuyển bảng tính biểu đồ sang PDF và Chuyển đối tượng biểu đồ sang PDF.
Dưới đây, chúng tôi sẽ trình bày từng macro kèm theo một số chú thích, từ đó bạn có thể tìm chúng nhanh chóng, sao chép vào trình chỉnh sửa VBA của mình và sử dụng.
Khi bạn chạy một macro bất kỳ, hộp thoại Save As sẽ xuất hiện và hỏi bạn muốn lưu file PDF vào thư mục nào trong máy. Tên mặc định bao gồm ngày tháng và dấu thời gian (time stamp) khi bạn thực thi macro ở định dạng yyyymmdd_hhmmss (lần lượt là ngày tháng năm_giờ phút giây)
Dưới đây là các macro:
Macro này sẽ chuyển đổi các ô bạn đã chọn thành PDF. Nếu bạn chỉ chọn một ô, macro VBA đủ thông mình để nhận ra rằng có lẽ bạn không muốn chuyển một ô duy nhất vì thế nó sẽ đề nghị bạn lựa chọn phạm vi ô muốn chuyển đổi:
Sub PrintSelectionToPDF()
'SUBROUTINE: PrintSelectionToPDF
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Chuyển các ô được chọn sang PDF
Dim ThisRng As Range
Dim strfile As String
Dim myfile As Variant
If Selection.Count = 1 Then
Set ThisRng = Application.InputBox("Select a range", "Get Range", Type:=8)
Else
Set ThisRng = Selection
End If
'Dấu nhắc thư mục lưu
strfile = "Selection" & "_" _
& Format(Now(), "yyyymmdd_hhmmss") _
& ".pdf"
strfile = ThisWorkbook.Path & "\" & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Lựa chọn thư mục và tên file lưu thành PDF")
If myfile <> "False" Then 'save as PDF
ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
Else
MsgBox "Không có file được chọn. Không thể lưu file PDF", vbOKOnly, "Không có file được chọn"
End If
End Sub
Sau khi chọn phạm vi ô và nhấn OK, trên màn hình sẽ xuất hiện hộp thoại để bạn chọn thư mục muốn lưu file PDF. Chương trình sẽ tự động chọn thời gian và ngày tháng từ đồng hồ hệ thống và chèn vào tên file.
Rất nhiều người dùng Excel chuyên nghiệp lựa chọn lưu dữ liệu của họ vào bảng. Macro này được sử dụng để chuyển đổi bảng bạn đã chọn sang file PDF. Khi bạn chạy marco, chương trình sẽ yêu cầu bạn đặt tên cho bảng muốn lưu.
Sub PrintTableToPDF()
'SUBROUTINE: PrintTableToPDF
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Chuyển đổi bảng bạn chọn sang file PDF
Dim strfile As String
Dim myfile As Variant
Dim strTable As String, r As Range
Application.ScreenUpdating = False
'Nhập tên bảng muốn lưu
strTable = InputBox("Tên bảng bạn muốn lưu là gì?", "'Nhập tên bảng") 'Bảng muốn lưu
If Trim(strTable) = "" Then Exit Sub
'Dấu nhắc thư mục lưu
strfile = strTable & "_" _
& Format(Now(), "yyyymmdd_hhmmss") _
& ".pdf"
strfile = ThisWorkbook.Path & "\" & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Lựa chọn thư mục và tên file lưu thành PDF")
If myfile <> "False" Thì 'lưu thành PDF
Range(strTable).ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Else
MsgBox "Không có file được chọn. Không thể lưu file PDF", vbOKOnly, "Không có file được chọn"
End If
Application.DisplayAlerts = False
LetsContinue:
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
Exit Sub
End Sub
Sau khi bạn nhập tên bảng và nhấn OK, hộp thoại sẽ xuất hiện để bạn lựa chọn thư mục muốn lưu file PDF. Chương trình sẽ tự động chọn thời gian và ngày tháng từ đồng hồ hệ thống và chèn vào tên file.
Nếu bảng tính bao gồm nhiều bảng trong khi bạn cần lưu từng bảng thành một file PDF riêng, bạn có thể chạy mã VBA này.
Khi bạn chạy marco này, màn hình sẽ xuất hiện hộp thoại yêu cầu bạn lựa chọn thư mục muốn lưu file PDF.
Sau khi bạn chọn xong thư mục, macro sẽ lưu từng bảng vào một file PDF riêng bằng tên bảng xuất hiện trong tiêu đề file PDF.
Sub PrintAllTablesToPDFs()
'SUBROUTINE: PrintAllTablesToPDFs
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Chuyển từng bảng trong bảng tính thành một file PDF riêng
Dim strTables() As String
Dim strfile As String
Dim ch As Object, sh As Worksheet
Dim icount As Integer
Dim myfile As Variant
Dim tbl As ListObject
Dim sht As Worksheet
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Bạn muốn lưu file PDF ở thư mục nào?"
.ButtonName = "Lưu ở đây"
.InitialFileName = ThisWorkbook.Path
If .Show = -1 Then ' if OK is pressed
sfolder = .SelectedItems(1)
Else
End
End If
End With
For Each sht In ThisWorkbook.Worksheets
For Each tbl In sht.ListObjects
myfile = ThisWorkbook.Name & "" & tbl.Name & "" _
& Format(Now(), "yyyymmdd_hhmmss") _
& ".pdf"
myfile = sfolder & "\" & myfile
sht.Range(tbl.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
Next tbl
Next sht
End Sub
Trong nhiều trường hợp, người dùng Excel cần sao chép hầu hết bảng tính vào file PDF. File PDF này được chuyển đổi để lưu trữ trên vi phim microfiche. Nếu bạn cũng rơi vào tình huống tương tự, macro VBA này sẽ giúp bạn tự động chuyển tất cả bảng tính sang một file PDF.
Sub PrintAllSheetsToPDF()
'SUBROUTINE: PrintAllSheetsToPDF
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Kết hợp tất cả bảng tính vào một file PDF
Dim strSheets() As String
Dim strfile As String
Dim sh As Worksheet
Dim icount As Integer
Dim myfile As Variant
'Save Chart Sheet names to an Array
For Each sh In ActiveWorkbook.Worksheets
If sh.Visible = xlSheetVisible Then
ReDim Preserve strSheets(icount)
strSheets(icount) = sh.Name
icount = icount + 1
End If
Next sh
If icount = 0 Then 'No charts found. Punch error
MsgBox "Không thể tạo file PDF vì không tìm thấy bảng tính.", , "Không tìm thấy bảng tính"
Exit Sub
End If
'Dấu nhắc thư mục lưu
strfile = "Sheets" & "_" _
& Format(Now(), "yyyymmdd_hhmmss") _
& ".pdf"
strfile = ThisWorkbook.Path & "\" & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Lựa chọn thư mục và tên file lưu thành 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 "Không có file được chọn. Không thể lưu file PDF", vbOKOnly, "Không có file được chọn"
End If
End Sub
Macro này chuyển đổi tất cả bảng tính biểu đồ thành sang file PDF - nhưng không chuyển các đối tượng (object) biểu đồ, có nghĩa là chỉ chuyển đổi biểu đồ có tab riêng trong danh sách tab bảng tính:
Sub PrintChartSheetsToPDF()
'SUBROUTINE: PrintChartSheetsToPDF
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Kết hợp tất cả sheet biểu đồ vào một file PDF
Dim strSheets() As String
Dim strfile As String
Dim ch As Object, sh As Worksheet
Dim icount As Integer
Dim myfile As Variant
'Save Chart Sheet names to an Array
For Each ch In ActiveWorkbook.Charts
ReDim Preserve strSheets(icount)
strSheets(icount) = ch.Name
icount = icount + 1
Next ch
If icount = 0 Then 'No charts found. Punch error
MsgBox "Không thể tạo file PDF vì không tìm thấy sheet biểu đồ.", , "Không tìm thấy sheet biểu đồ"
Exit Sub
End If
'Dấu nhắc thư mục lưu
strfile = "Charts" & "_" _
& Format(Now(), "yyyymmdd_hhmmss") _
& ".pdf"
strfile = ThisWorkbook.Path & "\" & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Lựa chọn thư mục và tên file lưu thành 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 "Không có file được chọn. Không thể lưu file PDF", vbOKOnly, "Không có file được chọn"
End If
End Sub
Macro này sẽ lưu tất cả biểu đồ thông thường - đối tượng biểu đồ - vào một file PDF riêng. Bất kể biểu đồ nằm ở bảng tính (worksheet) nào đều được lưu vào file PDF. Mỗi biểu đồ sẽ nằm ở một trang riêng trong file PDF .
Sub PrintChartsObjectsToPDF()
'SUBROUTINE: PrintChartsObjectsToPDF
'DEVELOPER: Taimienphi.vn
'DESCRIPTION: Kết hợp tất cả đối tượng biểu đồ vào một file PDF
Dim ws As Worksheet, wsTemp As Worksheet
Dim chrt As ChartObject
Dim tp As Long
Dim strfile As String
Dim myfile As Variant
Application.ScreenUpdating = False
Set wsTemp = Sheets.Add
tp = 10
With wsTemp
For Each ws In ActiveWorkbook.Worksheets
If ws.Name = wsTemp.Name Then 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 Then
ActiveSheet.Rows(Selection.TopLeftCell.Row).PageBreak = xlPageBreakManual
End If
tp = tp + Selection.Height + 50
Next
nextws:
Next ws
End With
'Dấu nhắc thư mục lưu
strfile = "Charts" & "_" _
& Format(Now(), "yyyymmdd\_hhmmss") _
& ".pdf"
strfile = ActiveWorkbook.Path & "\" & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Lựa chọn thư mục và tên file lưu thành PDF")
If myfile <> False Then 'save as PDF
wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
'Else
' MsgBox "Không có file được chọn. Không thể lưu file PDF", vbOKOnly, "Không có file được chọn"
End If
Application.DisplayAlerts = False
wsTemp.Delete
With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With
Exit Sub
End Sub
Ngoài ra, bạn cũng nên tìm hiểu thêm cách lưu vba để sử dụng trong trường hợp cần thiết, xem chi tiết hướng dẫn lưu vba, lưu Macro trong Excel trên Taimienphi.vn.