Hỏi về code VBA chuyển file excel sang pdf

Liên hệ QC

sonick1988

Thành viên mới
Tham gia
27/12/11
Bài viết
3
Được thích
5
Chào các anh chị, do công việc yêu cầu nên em thường xuyên phải xuất file từ *.xls hoặc *.xlsx sang *.PDF
Ví dụ: Em đang làm việc với file ABC.xlsx (sử dụng Office 2010) trong thư mục D:\File (do yêu cầu công việc nên em thường xuyên phải copy folder này ra và đổi tên để theo dõi). Khi em viết code để chuyển 1 số sheet trong file ABC.xlsx này sang file ABC.pdf như sau:

Sub chuyenfile()
'
' chuyenfile Macro
'
'
Sheets(Array("A", "B", "C")).Select

Sheets("A").active

activesheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="D:\File\ABC.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub

Tuy nhiên, với đoạn code trên thì khi em copy folder này và đổi tên folder (ví dụ là folder XYZ) thì file ABC.xlsx trong folder XYZ khi chuyển thành file ABC.pdf trong folder D:\File (hoặc báo lỗi nếu tên folder File đã ko còn trong D:\),
Em nhờ các anh chị giúp em đoàn code thế nào cho khi xuất thành file .pdf thì file đó sẽ được lưu trong folder hiện hành đang làm việc. (trong ví dụ trên khi em copy và đổi tên folder File thành folder XYZ thì khi em thao tác trên file ABC.xlsx trong folder sẽ tự động xuất và lưu file ABC.pdf trong folder XYZ mà không cần phải vào chỉnh sửa trong code trong VBA).
Hoặc em nhờ các anh chị có thể giúp em đoạn code sau khi đã chọn các sheet trong file ABC.xlsx thì sẽ tự động hiện cửa sổ Save As không? (vì em sử dụng Office 2010, khi hiện cửa sổ Save As thì có hỗ trợ chuyển sang file PDF mà không cần phần mềm khác hỗ trợ như các phiên bản Office trước đây).
Chân thành cám ơn các anh chị.
 
Lần chỉnh sửa cuối:
Giờ còn đúng 1 việc cần nhờ ! là thêm giờ và phút thực tế vào tên file để không bị trùng nhau!
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf

Mã:
Ws.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "\" & NameFile & "-" & Minute(Now()) & "-" & Second(Now())

Thử thay như thế này xem.
 
Upvote 0
Em cũng viết Code như các anh hướng dẫn. File PDF đượcc tao.

Sub Xuat_file_PDF()

Dim n As Long, i As Long
n = Sheets("LOCAL").Range("B65000").End(xlUp).Row

For i = 11 To n
Sheets("Payslip").Range("c5") = Sheets("LOCAL").Range("B" & i)

Sheets("Payslip").ExportAsFixedFormat xlTypePDF, Range("o2") & "\" & Range("C5") & ".pdf"

Next

End Sub


Tuy nhiên sau đó xong VBA ra thông báo "Doccument not saved". Bác nào giúp em tắt cái thông báo đấy hoặc tối ưu code cho em với ạ
 
Upvote 0
Em cũng viết Code như các anh hướng dẫn. File PDF đượcc tao.

Sub Xuat_file_PDF()

Dim n As Long, i As Long
n = Sheets("LOCAL").Range("B65000").End(xlUp).Row

For i = 11 To n
Sheets("Payslip").Range("c5") = Sheets("LOCAL").Range("B" & i)

Sheets("Payslip").ExportAsFixedFormat xlTypePDF, Range("o2") & "\" & Range("C5") & ".pdf"

Next

End Sub


Tuy nhiên sau đó xong VBA ra thông báo "Doccument not saved". Bác nào giúp em tắt cái thông báo đấy hoặc tối ưu code cho em với ạ

Mã:
Sub Xuat_file_PDF()

Dim n As Long, i As Long, NameFile As String
n = Sheets("LOCAL").Range("B65000").End(xlUp).Row

For i = 11 To n
    NameFile = Sheets("Payslip").Range("O2") & "\" & Range("C5") & ".pdf"
    Sheets("Payslip").Range("c5").Value = Sheets("LOCAL").Range("B" & i)

    Sheets("Payslip").ExportAsFixedFormat xlTypePDF, NameFile

Next

End Sub

- Đoạn code của bạn, hoàn toàn bình thường, vấn đề còn lại là cai range("O2").value của bạn nó chứa cái gì?
- Và bạn đang đứng ở Sheet nào để chạy code, vì cái đoạn bạn khai báo không tuong minh, nên rất dễ bị nhầm lẫn Sheet.
 
Upvote 0
Mã:
Sub Xuat_file_PDF()

Dim n As Long, i As Long, NameFile As String
n = Sheets("LOCAL").Range("B65000").End(xlUp).Row

For i = 11 To n
    NameFile = Sheets("Payslip").Range("O2") & "\" & Range("C5") & ".pdf"
    Sheets("Payslip").Range("c5").Value = Sheets("LOCAL").Range("B" & i)

    Sheets("Payslip").ExportAsFixedFormat xlTypePDF, NameFile

Next

End Sub

- Đoạn code của bạn, hoàn toàn bình thường, vấn đề còn lại là cai range("O2").value của bạn nó chứa cái gì?
- Và bạn đang đứng ở Sheet nào để chạy code, vì cái đoạn bạn khai báo không tuong minh, nên rất dễ bị nhầm lẫn Sheet.

- Cái Range("O2") của mình chứa đường linh thư mục à file PDF sẽ xuất ra. Mỗi lần mình muốn thay đổi địa chỉ lưu file thì thay đổi ở ô O2.
- Ngoài ra, Khi mình chạy macro thì mình chạy ở sheets("payslip").
- Mình chỉ không hiểu vì sao chạy code này lại ra cái thông báo " Doccument not saved". Mặc dù files PDF vẫn save bình thường
 
Upvote 0
- Cái Range("O2") của mình chứa đường linh thư mục à file PDF sẽ xuất ra. Mỗi lần mình muốn thay đổi địa chỉ lưu file thì thay đổi ở ô O2.
- Ngoài ra, Khi mình chạy macro thì mình chạy ở sheets("payslip").
- Mình chỉ không hiểu vì sao chạy code này lại ra cái thông báo " Doccument not saved". Mặc dù files PDF vẫn save bình thường

Bạn upfile lên là rõ nhất. Không có File, nói ra ai cũng hiểu, mà sau cùng là mỗi ngưởi hiểu một hướng khác nhau.
 
Upvote 0
- Có 02 cách.
+ Cách 1: Bạn copy cái file bạn đang làm đó, ra ngoài desktop, thì khi bạn chạy code, nó sẽ lưu ngoài Desktop cho bạn.
+ Cách 2: Sửa lại đường dẫn lưu File từ ThisWorkbook.Path & "\" & Range("G10") & ".pdf" thành "C:\Users\ChungNguyenPC\Desktop" & "\" & Range("G10") & ".pdf"
Ví dụ thôi nhé, vì đường dẫn của bạn, đường dẫn của Folder phụ thuộc vào Windows, và User nữa.
Chào anh. cho em hỏi thế sau khi xuất sang file PDF thì mình viết code gì để nó mở file lên. xin cám ơn
 
Upvote 0
Chào anh. cho em hỏi thế sau khi xuất sang file PDF thì mình viết code gì để nó mở file lên. xin cám ơn
Bạn thêm câu lệnh:
Mã:
OpenAfterPublish:=True
phía sau đoạn:
Sheets("Payslip").ExportAsFixedFormat xlTypePDF, NameFile,
=> là được.

Đại khái thế này:
Mã:
Sub Xuat_file_PDF()

Dim n As Long, i As Long, NameFile As String
n = Sheets("LOCAL").Range("B65000").End(xlUp).Row

For i = 11 To n
    NameFile = Sheets("Payslip").Range("O2") & "\" & Range("C5") & ".pdf"
    Sheets("Payslip").Range("c5").Value = Sheets("LOCAL").Range("B" & i)

    Sheets("Payslip").ExportAsFixedFormat xlTypePDF, NameFile, OpenAfterPublish:=True

Next

End Sub
 
Upvote 0
Em chào các anh ạ! Cảm ơn các anh đã chia sẻ kiến thức cũng như kinh nghiệm trong bài này
em đang dùng đoạn code này rất OK. Nay do nhu cầu e cần lệnh in chuyển sang xuất ra file excel chứ không phải PDF nữa để gửi Gmail thì không biết làm sao!
Mong mọi người giúp đỡ! em xin cảm ơn!
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
 
Upvote 0
Mình muốn xuất ra 1 file pdf (nhiều trang) nhưng toàn bị ghi đè chỉ ra 1 trang cuối bạn nào chỉnh code hộ mình với, thanks!
sub chuyenpdf
dim i&
a1 = Sheet2.Range("M19").Value
a2 = Sheet2.Range("M20").Value
if a1<=a2 then
For i = a1 to a2
Sheet2.Range("L16").Value = (i - 1) * 10 + 1
Sheet2.ExportAsFixedFormat xlTypePDF, ThisWorkbook.FullName

next
end if
end sub
 
Lần chỉnh sửa cuối:
Upvote 0
em cũng chạy mà nó thé này đây ai giúp e với
 

File đính kèm

  • 111111111.PNG
    111111111.PNG
    23.7 KB · Đọc: 29
Upvote 0
Xin cho mình hỏi trong máy bạn có cài thêm chương trinh hỗ trợ xuất sang PDF không. Ví dụ CutePDF, ...v..vv
Hoặc trong Save, Save as của Office Excel, giống như hình này. Hinh đính kèm của em bị lỗi Mod sửa lại giúp. Cảm ơn
Bạn ơi, mh cũng muốn xuất 1 sheet bất kỳ hoặc tất cả sang PDF, tên file PDF là tên của sheet. mh cảm ơn!
 
Upvote 0
Chào các bác, em đang xuất file pdf như thế này: ( xuất file excel sang file pdf, chỉ lấy trang 1, với tên file ở ô H20 và để file đó vào folder pdf ở desktop)
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\HP\Desktop\pdf" & "\" & Range("H20") & ".pdf" _
, Quality:=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, From:=1, To:=1, OpenAfterPublish:=False


Bây giờ em muốn lấy dữ liệu H20 từ sheets khác thì sử dụng hàm for ( ý của em là ô H20 ở sheets 1 thì sẽ bằng lần lượt từ A2 đến A10 ở sheets 2 và xuất ra 9 file pdf như trên ) mà lệnh sau bị sai, các bác sửa giùm em với
for i=2 to 10
Sheets("Sheets 1").Range("H20")= Sheets("Sheet2").Range("Ai")

Cảm ơm
 
Upvote 0
Chào các bác, em đang xuất file pdf như thế này: ( xuất file excel sang file pdf, chỉ lấy trang 1, với tên file ở ô H20 và để file đó vào folder pdf ở desktop)
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
"C:\Users\HP\Desktop\pdf" & "\" & Range("H20") & ".pdf" _
, Quality:=xlQualityMinimum, IncludeDocProperties:=True, IgnorePrintAreas _
:=False, From:=1, To:=1, OpenAfterPublish:=False


Bây giờ em muốn lấy dữ liệu H20 từ sheets khác thì sử dụng hàm for ( ý của em là ô H20 ở sheets 1 thì sẽ bằng lần lượt từ A2 đến A10 ở sheets 2 và xuất ra 9 file pdf như trên ) mà lệnh sau bị sai, các bác sửa giùm em với
for i=2 to 10
Sheets("Sheets 1").Range("H20")= Sheets("Sheet2").Range("Ai")

Cảm ơm
Chổ này Range("Ai") sửa lại là Range("A" & i)
 
Upvote 0
Web KT
Back
Top Bottom