Anh nào giúp em với được không ạ! trả là em đã xuất tự động lưu được PDF nhưng có lúc em in 1 phiếu 2 lần cùng tên thì toàn phiếu sau đè mất phiếu trước ! vậy có cách nào để phiếu sau có (1) hoặc (2) được không ạ. hay 1,2,3,4,5,6... cũng đc chỉ cần giữ được tên là đc ạ! Dưới là code của em để xuất File PDF ! mong anh chị giúp đỡ
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Anh nào giúp em với được không ạ! trả là em đã xuất tự động lưu được PDF nhưng có lúc em in 1 phiếu 2 lần cùng tên thì toàn phiếu sau đè mất phiếu trước ! vậy có cách nào để phiếu sau có (1) hoặc (2) được không ạ. hay 1,2,3,4,5,6... cũng đc chỉ cần giữ được tên là đc ạ! Dưới là code của em để xuất File PDF ! mong anh chị giúp đỡ
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Anh nào giúp em với được không ạ! trả là em đã xuất tự động lưu được PDF nhưng có lúc em in 1 phiếu 2 lần cùng tên thì toàn phiếu sau đè mất phiếu trước ! vậy có cách nào để phiếu sau có (1) hoặc (2) được không ạ. hay 1,2,3,4,5,6... cũng đc chỉ cần giữ được tên là đc ạ! Dưới là code của em để xuất File PDF ! mong anh chị giúp đỡ
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Bạn viết 1 hàm tự tạo để làm việc này là được rồi. Ví dụ:
- Bạn có đường dẫn file ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
- Bạn không biết đường dẫn này có tồn tại hay không
- Vậy bạn viết 1 hàm tự tạo, chẳng hạn tên là CreateSaveFileName có tác dụng kiểm tra đường dẫn trên, nếu chưa tồn tại thì để nguyên, tồn tại rồi thì bằng cách gì đó thêm các hậu tố (1)... (2)... (3) vào đến khi nào tạo ra được đường dẫn khả dụng thì thôi
Mã:
Private Function CreateSaveFileName(ByVal FileName As String) As String
Dim n As Long
Dim sFolder As String, sFile As String, sExt As String, sTmpFile As String
sTmpFile = FileName
With CreateObject("Scripting.FileSystemObject")
sExt = .GetExtensionName(FileName)
sFolder = .GetParentFolderName(FileName)
sFile = .GetBaseName(FileName)
Do While .FileExists(sTmpFile) = True
n = n + 1
sTmpFile = .BuildPath(sFolder, sFile & "(" & n & ")." & sExt)
Loop
CreateSaveFileName = sTmpFile
End With
End Function
Giờ áp dụng bạn chỉ cần thế này:
Mã:
Dim filepdf as string
filepdf = CreateSaveFileName(ThisWorkbook.Path & "\" & Range("G10") & ".pdf")
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Vậy là xong thôi!
---------------------- (code viết sơ qua, không biết có xuất hiện lỗi tào lao nào không? Mời kiểm tra thử nhé)
Bạn viết 1 hàm tự tạo để làm việc này là được rồi. Ví dụ:
- Bạn có đường dẫn file ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
- Bạn không biết đường dẫn này có tồn tại hay không
- Vậy bạn viết 1 hàm tự tạo, chẳng hạn tên là CreateSaveFileName có tác dụng kiểm tra đường dẫn trên, nếu chưa tồn tại thì để nguyên, tồn tại rồi thì bằng cách gì đó thêm các hậu tố (1)... (2)... (3) vào đến khi nào tạo ra được đường dẫn khả dụng thì thôi
Mã:
Private Function CreateSaveFileName(ByVal FileName As String) As String
Dim n As Long
Dim sFolder As String, sFile As String, sExt As String, sTmpFile As String
sTmpFile = FileName
With CreateObject("Scripting.FileSystemObject")
sExt = .GetExtensionName(FileName)
sFolder = .GetParentFolderName(FileName)
sFile = .GetBaseName(FileName)
Do While .FileExists(sTmpFile) = True
n = n + 1
sTmpFile = .BuildPath(sFolder, sFile & "(" & n & ")." & sExt)
Loop
CreateSaveFileName = sTmpFile
End With
End Function
Giờ áp dụng bạn chỉ cần thế này:
Mã:
Dim filepdf as string
filepdf = CreateSaveFileName(ThisWorkbook.Path & "\" & Range("G10") & ".pdf")
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Vậy là xong thôi!
---------------------- (code viết sơ qua, không biết có xuất hiện lỗi tào lao nào không? Mời kiểm tra thử nhé)
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
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
- Tôi không quan trọng bạn trả lời nhanh chậm
- Tôi không quan trọng việc xưng hô hay văn chương cầu kỳ
...... vân.. vân...
Tôi chỉ quan tâm đến kỹ thuật nên cái tôi cần là mọi thứ phải RÕ RÀNG. Một câu "không ổn" thì giúp gì được cho bạn? Nếu code bị lỗi hoặc ra kết quả sai thì bạn phải cho tôi biết nó lỗi chỗ nào? Sai chỗ nào? Kết quả nếu đúng thì phải ra làm sao?...
Phản hồi ý kiến rất quan trọng! Bạn cần chú ý điểm này.
Em xin phép nhờ thêm 1 ý ngoài lề. Xin nhờ các anh chị trong diễn dàn chỉ dùm!
Em muốn khóa toàn bộ các kiểu in của excel sẵn có như (ctrl+p) bấm trên bouuton....
mà chỉ sử dụng nút lệnh VBA mới in được thì phải làm cách nào.
Mong các anh giúp đỡ.
- Tôi không quan trọng bạn trả lời nhanh chậm
- Tôi không quan trọng việc xưng hô hay văn chương cầu kỳ
...... vân.. vân...
Tôi chỉ quan tâm đến kỹ thuật nên cái tôi cần là mọi thứ phải RÕ RÀNG. Một câu "không ổn" thì giúp gì được cho bạn? Nếu code bị lỗi hoặc ra kết quả sai thì bạn phải cho tôi biết nó lỗi chỗ nào? Sai chỗ nào? Kết quả nếu đúng thì phải ra làm sao?...
Phản hồi ý kiến rất quan trọng! Bạn cần chú ý điểm này.
em đã tìm hiểu điều chỉnh cóp nhặt từ nhiều anh chị trong diễn dàn
filepdf = "C:\Users" & "\" & Range("i4") & "-" & Minute(Now()) & Second(Now())
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Đây là đoạn mã em sử dụng và thấy chạy ổn định! Chỉ có điều việc copy file pdf đó sang chỗ chỗ khác là không làm đc! (Vì e chưa cần phải di chuyển file nên cũng ko gây khó khăn cho em)
hi cảm ơn anh đã nhiệt tình giúp đỡ. và em còn muốn khóa các kiểu in mặc định của excel để chỉ cho phép in bằng nút lệnh VBA !
Anh có cách gì không mách nước hộ e với ạ!
em đã tìm hiểu điều chỉnh cóp nhặt từ nhiều anh chị trong diễn dàn
filepdf = "C:\Users" & "\" & Range("i4") & "-" & Minute(Now()) & Second(Now())
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Đây là đoạn mã em sử dụng và thấy chạy ổn định!
Bạn dùng số giây gán vào tên file để tạo sự phân biệt, vậy trong trường hợp bạn bấm lưu 2 phát liên tiếp trong cùng 1 thời điểm (tức bấm khi số giây chưa kịp nhảy sang số mới) thì tên file vẫn... trùng. Đương nhiên xác xuất xảy ra tình huống này rất thấp nhưng không phải là không thể
Bạn dùng số giây gán vào tên file để tạo sự phân biệt, vậy trong trường hợp bạn bấm lưu 2 phát liên tiếp trong cùng 1 thời điểm (tức bấm khi số giây chưa kịp nhảy sang số mới) thì tên file vẫn... trùng. Đương nhiên xác xuất xảy ra tình huống này rất thấp nhưng không phải là không thể
Tôi chỉ có cách như ở bài 3 và tôi cho là ổn nhất. Tuy nhiên nếu bạn thấy cách của bạn ổn hơn thì cứ dùng, không có vấn đề gì cả
Vì do mục đích sử dụng của em chỉ cần xem được in lần 2 và lần 1 nội dung có khác nhau không nên đành dùng thời gian để đánh dấu! hi không bị chèn mất file cũ là ok rùi
Mà đoạn code của 1 nút của em quá dài rùi
A có cách nòa chỉ cho phép file excel đó được in bằng nút Pint tự tạo không? Đại ý là chỉ ấn nút đó mới in được! do e còn đặt 1 số code nhập liệu nên muốn khóa in của excel. tránh trường hợp tự do in phiếu mà không có dữ liệu nhập
dùng sự kiện Before Print sợ không đc vì em vẫn cần in! code:
Private Sub workbook_BeforePrint(Cancel As Boolean)
Cancel = True
MsgBox "Sorry, you cannot Print from this workbook", vbInformation
End Sub
Bạn dùng số giây gán vào tên file để tạo sự phân biệt, vậy trong trường hợp bạn bấm lưu 2 phát liên tiếp trong cùng 1 thời điểm (tức bấm khi số giây chưa kịp nhảy sang số mới) thì tên file vẫn... trùng. Đương nhiên xác xuất xảy ra tình huống này rất thấp nhưng không phải là không thể
Tôi chỉ có cách như ở bài 3 và tôi cho là ổn nhất. Tuy nhiên nếu bạn thấy cách của bạn ổn hơn thì cứ dùng, không có vấn đề gì cả
Anh ndu, Em đã thử tạo 1 vòng lặp với 10 lần lặp, nhưng nó vẫn không trùng tên File. 10 lần lặp, nhưng File nó tạo được có 3,4 File à.Vẫn đúng số giây, nó mới tạo File.
Anh ndu, Em đã thử tạo 1 vòng lặp với 10 lần lặp, nhưng nó vẫn không trùng tên File. 10 lần lặp, nhưng File nó tạo được có 3,4 File à.Vẫn đúng số giây, nó mới tạo File.
Vậy trong trường hợp máy bạn cực mạnh, save file trong nháy mắt thì xác xuất này sẽ cao ngay!
Lập trình phải nói đến tính chính xác, không thể trong chờ chuyện hên xui!
Mọi người ơi giúp em với sao em làm theo câu lệnh này không ra vậy. nó chạy không được không à
Em muốn thêm ngày tháng vào câu lệnh này nè:
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Mọi người ơi giúp em với sao em làm theo câu lệnh này không ra vậy. nó chạy không được không à
Em muốn thêm ngày tháng vào câu lệnh này nè:
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Sub LUUDONTHUOC()
Dim filepdf
filepdf = ThisWorkbook.Path & "\" & Range("C5") & "_" & Date & ".pdf"
With CreateObject("scripting.filesystemobject")
If .FileExists(filepdf) Then Kill filepdf
End With
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
End Sub
Sub LUUDONTHUOC()
Dim filepdf
filepdf = ThisWorkbook.Path & "\" & Range("C5") & "_" & Date & ".pdf"
With CreateObject("scripting.filesystemobject")
If .FileExists(filepdf) Then Kill filepdf
End With
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
End Sub
Mọi người ơi giúp em với sao em làm theo câu lệnh này không ra vậy. nó chạy không được không à
Em muốn thêm ngày tháng vào câu lệnh này nè:
filepdf = ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Bạn viết 1 hàm tự tạo để làm việc này là được rồi. Ví dụ:
- Bạn có đường dẫn file ThisWorkbook.Path & "\" & Range("G10") & ".pdf"
- Bạn không biết đường dẫn này có tồn tại hay không
- Vậy bạn viết 1 hàm tự tạo, chẳng hạn tên là CreateSaveFileName có tác dụng kiểm tra đường dẫn trên, nếu chưa tồn tại thì để nguyên, tồn tại rồi thì bằng cách gì đó thêm các hậu tố (1)... (2)... (3) vào đến khi nào tạo ra được đường dẫn khả dụng thì thôi
Mã:
Private Function CreateSaveFileName(ByVal FileName As String) As String
Dim n As Long
Dim sFolder As String, sFile As String, sExt As String, sTmpFile As String
sTmpFile = FileName
With CreateObject("Scripting.FileSystemObject")
sExt = .GetExtensionName(FileName)
sFolder = .GetParentFolderName(FileName)
sFile = .GetBaseName(FileName)
Do While .FileExists(sTmpFile) = True
n = n + 1
sTmpFile = .BuildPath(sFolder, sFile & "(" & n & ")." & sExt)
Loop
CreateSaveFileName = sTmpFile
End With
End Function
Giờ áp dụng bạn chỉ cần thế này:
Mã:
Dim filepdf as string
filepdf = CreateSaveFileName(ThisWorkbook.Path & "\" & Range("G10") & ".pdf")
ActiveSheet.ExportAsFixedFormat xlTypePDF, filepdf
Vậy là xong thôi!
---------------------- (code viết sơ qua, không biết có xuất hiện lỗi tào lao nào không? Mời kiểm tra thử nhé)
Em chào các anh, chị!
- Mong được mọi người trên diễn đàn GPE vui lòng giúp em đoạn code VBA tự động xuất file báo cáo (sheet 3) ra PDF chi tiết theo tên từng mã số nhân viên tại ô F3 và xóa file pdf trong 5 ngày hoặc cho phép lưu trùng tên. Ví dụ: 0002.pdf, 0003.pdf
- Chi tiết trong file đính kèm.
Xin cảm ơn mọi người!
Em chào các anh, chị!
- Mong được mọi người trên diễn đàn GPE vui lòng giúp em đoạn code VBA tự động xuất file báo cáo (sheet 3) ra PDF chi tiết theo tên từng mã số nhân viên tại ô F3 và xóa file pdf trong 5 ngày hoặc cho phép lưu trùng tên. Ví dụ: 0002.pdf, 0003.pdf
- Chi tiết trong file đính kèm.
Xin cảm ơn mọi người!
File trên em đã thử làm 1 đoạn code nhưng vẫn bị lỗi là không xuất ra toàn bộ file pdf theo từng mã nhân viên mà chỉ xuất ra 1 file báo cáo mà còn bị sai email trên báo cáo và bị lỗi mất công thức ngay ô chứa email (nên em phải sử dụng data validation và ô trung gian).
Rất mong các anh chị giúp đỡ. Em cám ơn.
File trên em đã thử làm 1 đoạn code nhưng vẫn bị lỗi là không xuất ra toàn bộ file pdf theo từng mã nhân viên mà chỉ xuất ra 1 file báo cáo mà còn bị sai email trên báo cáo và bị lỗi mất công thức ngay ô chứa email (nên em phải sử dụng data validation và ô trung gian).
Rất mong các anh chị giúp đỡ. Em cám ơn.
Thử xem. Có phải thế này không?
Vẫn code của bạn Tôi thêm đoạn code của anh @ndu96081631.
Cứ khi nhấn nút Loc Du Lieu thì sheet BaoCao đã được xuất sang 1 file pdf có tên trùng với mã số của nhân viên đang có mặt trên Sheet Bao Cao.(file PDF này sẽ được lưu ở cùng Folder với file Excel). Nếu file pdf đã có tên (trùng tên) thì file pdf cũ sẽ bị xóa.
Thử xem. Có phải thế này không?
Vẫn code của bạn Tôi thêm đoạn code của anh @ndu96081631.
Cứ khi nhấn nút Loc Du Lieu thì sheet BaoCao đã được xuất sang 1 file pdf có tên trùng với mã số của nhân viên đang có mặt trên Sheet Bao Cao.(file PDF này sẽ được lưu ở cùng Folder với file Excel). Nếu file pdf đã có tên (trùng tên) thì file pdf cũ sẽ bị xóa.
File in ra 2 trang bạn có thể giúp in 1 trang từ cột B đến cột I không nếu lọc từng nhân viên và có thể tự động in hàng loạt theo mã nhân viên bằng 1 nút ấn. Cám ơn bạn rất nhiều.
1/File in ra 2 trang là do định dạng(căn lề của sheet BAO CAO). Bạn chỉnh lại lề sheet BAO CAO cho vừa 1 trang, thì khi ra file PDF cũng chỉ là 1 trang.
2/Tôi không biết viết code để in file PDF.
Tôi chỉ biết làm tự động tạo ra hàng loạt file PDF theo mã nhân viên.
Nhấn nút LỌC DỮ LIỆU để hiện form. Bạn hãy chọn mã số trong Combobox Từ và mã số đến trong combobox Den và nhấn nút Print và xem kết quả. hãy thử lại với mã số khác.
Khi chon dấu tich trong checkbox In toàn bộ và nhấn nút Print thì sẽ tạo ra hàng loạt file PDF theo mã nhân viên.
1/File in ra 2 trang là do định dạng(căn lề của sheet BAO CAO). Bạn chỉnh lại lề sheet BAO CAO cho vừa 1 trang, thì khi ra file PDF cũng chỉ là 1 trang.
2/Tôi không biết viết code để in file PDF.
Tôi chỉ biết làm tự động tạo ra hàng loạt file PDF theo mã nhân viên.
Nhấn nút LỌC DỮ LIỆU để hiện form. Bạn hãy chọn mã số trong Combobox Từ và mã số đến trong combobox Den và nhấn nút Print và xem kết quả. hãy thử lại với mã số khác.
Khi chon dấu tich trong checkbox In toàn bộ và nhấn nút Print thì sẽ tạo ra hàng loạt file PDF theo mã nhân viên.
File bị lỗi khi chọn mã số, còn khi in toàn bộ danh sách thì chỉ được 10 mã nhân viên khác nhau nhưng cùng 1 bảng báo cáo. Bạn có thể xem lại giúp mình. Cám ơn bạn rất nhiều.
View attachment 273116
File bị lỗi khi chọn mã số, còn khi in toàn bộ danh sách thì chỉ được 10 mã nhân viên khác nhau nhưng cùng 1 bảng báo cáo. Bạn có thể xem lại giúp mình. Cám ơn bạn rất nhiều.
Báo cáo khi in toàn bộ thì không bị lỗi và các báo cáo đã đúng với từng mã nhân viên, nhưng in từ mã số đến mã số lại bị lỗi. Bạn xem lại giúp mình phần dữ liệu có email bên cột A sheet 2 mới chạy qua báo cáo (cell không có email thì không báo cáo).
Mình gửi lại file, file bạn gửi đã xóa công thức tại cột A sheet 2.
Cám ơn bạn nhiều.
View attachment 273163
Báo cáo khi in toàn bộ thì không bị lỗi và các báo cáo đã đúng với từng mã nhân viên, nhưng in từ mã số đến mã số lại bị lỗi. Bạn xem lại giúp mình phần dữ liệu có email bên cột A sheet 2 mới chạy qua báo cáo (cell không có email thì không báo cáo).
Mình gửi lại file, file bạn gửi đã xóa công thức tại cột A sheet 2.
Cám ơn bạn nhiều.