Phương Pháp Chuyển Đổi Tệp Excel thành PDF sử dụng VBA
Chuyển Đổi File Excel thành PDF với Sự Hỗ Trợ của VBA
Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách sử dụng VBA Excel - ngôn ngữ lập trình tích hợp trong Excel - để chuyển đổi toàn bộ nội dung trong tệp Excel thành định dạng PDF. Quá trình chuyển đổi bao gồm: Chuyển ô đang được chọn thành PDF, Chuyển một bảng (Table) thành PDF, Chuyển tất cả các bảng thành các tệp PDF riêng biệt, Chuyển toàn bộ bảng tính (Spreadsheet) thành một tệp PDF duy nhất, Chuyển bảng tính biểu đồ thành PDF và Chuyển đối tượng biểu đồ thành PDF.
Dưới đây, chúng tôi giới thiệu từng đoạn mã VBA cùng một số chú thích để bạn dễ dàng tìm và sao chép vào trình chỉnh sửa VBA của mình để sử dụng.
Khi bạn chạy một đoạn mã, hộp thoại Save As sẽ hiển thị, hỏi bạn nơi muốn lưu file PDF trong máy. Tên mặc định sẽ bao gồm ngày tháng và thời gian (time stamp) khi bạn thực thi mã theo đị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à danh sách các đoạn mã VBA:
Chuyển lựa chọn thành PDF (Print Selection To PDF)
Mã VBA này sẽ biến lựa chọn của bạn thành PDF. Nếu bạn chỉ chọn một ô, mácro sẽ tự động nhận diện và đề xuất bạn mở rộng phạm vi muốn chuyển đổi:
Sub InAnToanToanChon()
'SUBROUTINE: InAnToanToanChon
'DEVELOPER: Mytour
'DESCRIPTION: Chuyển lựa chọn thành PDF
Dim VungNay As Range
Dim TenTap As String
Dim DuongDan As Variant
If Selection.Count = 1 Then
Set VungNay = Application.InputBox('Chọn một phạm vi', 'Lấy Phạm Vi', Type:=8)
Else
Set VungNay = Selection
End If
'Nhắc chọn thư mục lưu
TenTap = 'Chon' & '_' _
& Format(Now(), 'yyyymmdd_hhmmss') _
& '.pdf'
TenTap = ThisWorkbook.Path & '\' & TenTap
DuongDan = Application.GetSaveAsFilename _
(InitialFileName:=TenTap, _
FileFilter:='PDF Files (*.pdf), *.pdf', _
Title:='Chọn thư mục và tên tập tin lưu thành PDF')
If DuongDan <> 'False' Then 'lưu thành PDF
VungNay.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
DuongDan, Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
Else
MsgBox 'Không có tập tin nào được chọn. Không thể lưu file PDF', vbOKOnly, 'Không có tập tin nào được chọn'
End If
End Sub
Sau khi bạn chọn phạm vi và nhấn OK, một hộp thoại sẽ xuất hiện để bạn chọn thư mục lưu tập tin PDF. Chương trình sẽ tự động tích hợp thời gian và ngày từ hệ thống và chèn vào tên tập tin.
Chuyển một bảng thành PDF (Print One Table To PDF)
Đối với nhiều chuyên gia Excel, lưu trữ dữ liệu trong bảng là lựa chọn thông thái. Mã macro này giúp chuyển đổi bảng bạn chọn thành file PDF. Khi bạn chạy macro, chương trình sẽ yêu cầu bạn đặt tên cho bảng muốn lưu.
Sub InBangToanToanPDF()
'SUBROUTINE: InBangToanToanPDF
'DEVELOPER: Mytour
'DESCRIPTION: Chuyển đổi bảng bạn chọn thành file PDF
Dim TenTap As String
Dim DuongDan As Variant
Dim TenBang As String, C As Range
Application.ScreenUpdating = False
'Nhập tên bảng muốn lưu
TenBang = 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(TenBang) = '' Then Exit Sub
'Nhắc chọn thư mục lưu
TenTap = TenBang & '_' _
& Format(Now(), 'yyyymmdd_hhmmss') _
& '.pdf'
TenTap = ThisWorkbook.Path & '\' & TenTap
DuongDan = Application.GetSaveAsFilename _
(InitialFileName:=TenTap, _
FileFilter:='PDF Files (*.pdf), *.pdf', _
Title:='Chọn thư mục và tên tập tin lưu thành PDF')
If DuongDan <> 'False' Thì 'lưu thành PDF
Range(TenBang).ExportAsFixedFormat Type:=xlTypePDF, Filename:=DuongDan, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
Else
MsgBox 'Không có tập tin nào được chọn. Không thể lưu file PDF', vbOKOnly, 'Không có tập tin nào đượ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 chọn thư mục muốn lưu file PDF. Chương trình sẽ tự động tích hợp thời gian và ngày tháng từ hệ thống và chèn vào tên tập tin.
Xuất mỗi bảng thành file PDF riêng (In Tất Cả Các Bảng Ra Tập Tin PDF Riêng)
Nếu bảng tính của bạn có nhiều bảng và bạn muốn lưu từng bảng vào một tập tin PDF riêng biệt, bạn có thể sử dụng đoạn mã VBA này.
Khi bạn chạy đoạn mã này, hộp thoại sẽ hiển thị, yêu cầu bạn chọn thư mục để lưu tập tin PDF.
Sau khi bạn đã chọn thư mục, macro sẽ tự động lưu từng bảng vào một tập tin PDF riêng với tên bảng được sử dụng trong tiêu đề của tập tin PDF.
Sub InTatCaCacBangRaPDFRieng()
'SUBROUTINE: InTatCaCacBangRaPDFRieng
'DEVELOPER: Mytour
'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 = 'Chọn thư mục để lưu file PDF'
.ButtonName = 'Lưu tại đây'
.InitialFileName = ThisWorkbook.Path
If .Show = -1 Then ' nếu nhấn OK
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
Chuyển tất cả bảng tính sang một file PDF (In Tất Cả Các Bảng Ra Một PDF)
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 InTatCaBảngTínhRaPDF()
'SUBROUTINE: InTatCaBảngTínhRaPDF
'DEVELOPER: Mytour
'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
'Lưu tên các Bảng Tính vào một Mảng
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 'Không tìm thấy bảng tính. Hiện thông báo lỗi
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 = 'BảngTính' & '_' _
& Format(Now(), 'yyyymmdd_hhmmss') _
& '.pdf'
strfile = ThisWorkbook.Path & '\' & strfile
myfile = Application.GetSaveAsFilename _
(InitialFileName:=strfile, _
FileFilter:='PDF Files (*.pdf), *.pdf', _
Title:='Chọn thư mục và tên file lưu thành PDF')
If myfile <> 'False' Then 'Lưu thành 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
In Các Trang Biểu Đồ Ra PDF (Print Chart Sheets To PDF)
Macro này sẽ chuyển đổi tất cả các trang biểu đồ trong bảng tính thành file PDF - nhưng không bao gồm các đối tượng biểu đồ, nghĩa là chỉ chuyển đổi các biểu đồ có tab riêng trong danh sách tab của bảng tính:
Sub InCacTrangBieuDoRaPDF()
'SUBROUTINE: InCacTrangBieuDoRaPDF
'DEVELOPER: Mytour
'DESCRIPTION: Kết hợp tất cả cá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
'Lưu tên các Trang Biểu Đồ vào Một Mảng
For Each ch In ActiveWorkbook.Charts
ReDim Preserve strSheets(icount)
strSheets(icount) = ch.Name
icount = icount + 1
Next ch
If icount = 0 Then 'Không tìm thấy biểu đồ. Hiện thông báo lỗi
MsgBox 'Không thể tạo file PDF vì không tìm thấy trang biểu đồ.', , 'Không tìm thấy trang biểu đồ'
Exit Sub
End If
'Dấu nhắc thư mục lưu
strfile = 'BieuDo' & '_' _
& 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 'Lưu thành 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
In Các Đối Tượng Biểu Đồ Ra PDF (Print Chart Objects To PDF)
Macro này tự động lưu tất cả đối tượng biểu đồ thông thường vào một file PDF riêng. Bất kỳ biểu đồ nào trong bảng tính cũng được kết hợp vào file PDF, với mỗi biểu đồ trên một trang riêng.
Sub InDoiTuongBieuDoRaPDF()
'SUBROUTINE: InDoiTuongBieuDoRaPDF
'DEVELOPER: Mytour
'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 = 'BieuDo' & '_' _
& 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 'Lưu thành 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
Hãy tìm hiểu thêm về cách lưu VBA để sử dụng khi cần thiết, chi tiết hướng dẫn lưu VBA được mô tả trên trang Mytour.