Cách xử lý lỗi run-time erro 9
Hình như đã có, vì bên trên các câu lệnh bên trên liên quan đến nó chưa lỗi: printFrom, printTo, Select
Lúc nãy em không xem các dòng code khác, giờ xem kỹ lại thì lỗi vẫn là do file hiện hành không có Sheet3. File chứa code thì có Sheet3 nhưng file mới tạo bằng lệnh Workbooks.Add thì không có. Code trỏ đến Sheet3 (bằng SheetName) mà không xác định workbook nên mặc định trỏ đến workbook hiện hành. Khi thêm workbook mới thì workbook mới thành workbook hiện hành, code trỏ đến Sheet3 của workbook hiện hành nhưng không có -> lỗi. Nếu muốn trỏ đến Sheet3 của workbook chứa code thì viết rõ ThisWorkbook.Sheets("Sheet3"). Ngoài ra, ActiveWorkbook.Path trong dòng lệnh đó luôn trả về.chuỗi rỗng do ActiveWorkbook là workbook chưa được save. @Chủ topic: Nên tạo thói quen khi trỏ đến đối tượng bằng tên thì chỉ rõ đối tượng cha. Thói quen này giúp code rõ ràng hơn và hạn chế lỗi hoặc code thực thi không đúng ý đồ của người viết code. Lỗi còn biết để mà sửa chứ chạy sai mà không phát hiện được thì hậu quả khôn lường.
Như vậy phải sửa ActiveWokbook thành ThisWorkbook ở câu này: sFile = ActiveWorkbook.Path & "\" & "Payslip Oct 2020 - " & Sheets("Sheet3").Range("B11") & ".xlsx" Ngoài ra câu này cũng sẽ lỗi vì vừa Add vừa Close (2 phương thức) Workbooks.Add.Close Savechanges:=False Và câu này cũng có nguy cơ lỗi vì không biết workbook nào ActiveWorkbook.Close False
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("Sheet3").Range("B12")
.cc = ""
.BCC = ""
.Subject = Sheets("Sheet3").Range("B9")
.HTMLBody = " Dear " & Sheets("Sheet3").Range("B11") & " End Sub Mình lại dính lỗi nãy, mình có xem xét lại từ đầu đến cuối mà vẫn báo lỗi sFile = ActiveWorkbook.Path & "\" & "Payslip Oct 2020 - " & Sheets("Sheet3").Range("B11") & ".xlsx" Mấy anh giúp em với ạ, em không hiểu sai chổ nào cả.Mình nghĩ rằng để không bị lẫn lộn giữa cái workbook hiện tại với workbook tạo mới thì bạn nên tạo ra 2 biến: Mã:
Với cái này thì mình viết lại cái code (viết theo mình suy nghĩ là vậy, có thể code không đúng ý đồ của bạn chỗ nào thì bạn chỉnh lại chỗ đó giúp nha...) Mã:
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = Sheets("Sheet3").Range("B12")
.cc = ""
.BCC = ""
.Subject = Sheets("Sheet3").Range("B9")
.HTMLBody = " Dear " & Sheets("Sheet3").Range("B11") & " End Sub Mình lại dính lỗi nãy, mình có xem xét lại từ đầu đến cuối mà vẫn báo lỗi sFile = ActiveWorkbook.Path & "\" & "Payslip Oct 2020 - " & Sheets("Sheet3").Range("B11") & ".xlsx" Mấy anh giúp em với ạ, em không hiểu sai chổ nào cả.Lỗi vì các mặt cười, như dòng này ThisWorkbook.Sheets("Sheet3").Range("A133").Select Chắc vậy, đoán đại vì nhìn thấy vậy
Đó là lỗi biến 2 hoặc 3 ký tự thành biểu tượng. Dấu hai chấm ":" và chữ "D" là biểu tượng mặt cười. Để tránh thì nên viết cách ra 1 khoảng trắng như : D, viết liền sẽ là Câu lệnh sẽ là Range("A1: D33").Select
Nên cho vào các thẻ [ code] chứ anh. Vụ này em nói nhiều lắm rồi á. Ở diễn đàn chuyên môn thì cái này là luật bắt buộc, vi phạm là 'auto' xóa luôn. -- Hỏi thăm: Anh được 'cho' về chưa ạ?
Còn nếu là code thì các bạn nên cho vào thẻ code để tránh trường hợp này....
Ah, ý là nhắc người hỏi nên đặt vào trong tab [ code] ... [ /code]
cảm ơn bác nhiều nhé, hi Bài đã được tự động gộp: 2/10/20 Mình nghĩ rằng để không bị lẫn lộn giữa cái workbook hiện tại với workbook tạo mới thì bạn nên tạo ra 2 biến: Thanks bác nhé. đúng là ghi rõ ra thì dễ nhìn hơn và dễ phân biệt hơn hẳn Bài đã được tự động gộp: 2/10/20 Lúc nãy em không xem các dòng code khác, giờ xem kỹ lại thì lỗi vẫn là do file hiện hành không có Sheet3. File chứa code thì có Sheet3 nhưng file mới tạo bằng lệnh Workbooks.Add thì không có. Code trỏ đến Sheet3 (bằng SheetName) mà không xác định workbook nên mặc định trỏ đến workbook hiện hành. Khi thêm workbook mới thì workbook mới thành workbook hiện hành, code trỏ đến Sheet3 của workbook hiện hành nhưng không có -> lỗi. Nếu muốn trỏ đến Sheet3 của workbook chứa code thì viết rõ ThisWorkbook.Sheets("Sheet3"). Ngoài ra, ActiveWorkbook.Path trong dòng lệnh đó luôn trả về.chuỗi rỗng do ActiveWorkbook là workbook chưa được save. @Chủ topic: Nên tạo thói quen khi trỏ đến đối tượng bằng tên thì chỉ rõ đối tượng cha. Thói quen này giúp code rõ ràng hơn và hạn chế lỗi hoặc code thực thi không đúng ý đồ của người viết code. Lỗi còn biết để mà sửa chứ chạy sai mà không phát hiện được thì hậu quả khôn lường. Cảm ơn bạn đã đóng góp ý kiến, chân thành cảm ơn nha
Để giải thích cái mặt cười thôi, còn vụ thẻ [ code] thì mình xài thường nhưng không biết công dụng số 2. Thử cái coi Hỏi thăm: Anh được 'cho' về chưa ạ? May quá chỉ ở 4 ngày và về rồi, ở nhà ngồi máy tính mới viết được mấy bài dài dài hay hay chứ post bằng điện thoại chán lắm.
Mã:
Với cái này thì mình viết lại cái code (viết theo mình suy nghĩ là vậy, có thể code không đúng ý đồ của bạn chỗ nào thì bạn chỉnh lại chỗ đó giúp nha...) Mã:
Bạn ơi, cho mình hỏi mình có tạo một folder với mã : Set fso = CreateObject("Scripting.FileSystemObject") FName = ThisWorkbook.Path & "\PhieuLuong - " & Format(Now, "MMM DD YY") If fso.FolderExists(FName) Then fso.CreateFolder (FName) End If Và mình chỉnh sữa lệnh :sFile = FName & "\" & "Payslip Oct 2020 - " & wbThis.Sheets("Sheet3").Range("B11") & ".xlsx" Nó báo lỗi : run-time error '1004' Microsoft excel cannot access the file. Giải thích hộ mình với ạ. Bài đã được tự động gộp: 2/10/20 Bạn ơi, cho mình hỏi mình có tạo một folder với mã : Lỗi sai : wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False
bạn dưa lên hết code bạn viêt lên, chứ mà nói khơi khơi mình không biết sao nữa ah... NHẮC LẠI: nhớ khi đưa code lên thì phải đặt trong thẻ code nha (xem bài 10)
NHẮC LẠI: nhớ khi đưa code lên thì phải đặt trong thẻ code nha (xem bài 10)Mình có tạo một folder và muốn tạo file theo vòng lặp . lưu file vô folder đó lun. Mã:
Bài đã được tự động gộp: 2/10/20 bạn dưa lên hết code bạn viêt lên, chứ mà nói khơi khơi mình không biết sao nữa ah... sr bạn, mình chạy được code rùi, mà bạn ơi, có cách nào để tạo mật khẩu chạy theo bảng dữ liệu như to và from không bạn, Lần chỉnh sửa cuối: 2/10/20
Mã:
Ngộ vậy ta? mình chạy code này vèo vèo mà? không có bị gì hết ah.... Bài đã được tự động gộp: 2/10/20 Mình có tạo một folder và muốn tạo file theo vòng lặp . lưu file vô folder đó lun. xin lỗi mình hổng hiểu ý bạn là gì???? có thể nói rõ hơn đươc không?
Mã:
Đặt tên biến nếu viết tắt từ tiếng Anh thì phải theo văn phạm tiếng Anh, ThisWb (this workbook) và NewWb (new workbook) chứ sao lại ngược thế kia
Bài đã được tự động gộp: 2/10/20 xin lỗi mình hổng hiểu ý bạn là gì???? có thể nói rõ hơn đươc không?ý là mình có một bảng dữ liệu trong đó mình có cột dữ liệu chứa các mật khẩu, và mình muốn lấy mk để gán cho từng file , mình đã thử tuy nhiên chỉ hỉu được một mk dòng thui Bài đã được tự động gộp: 2/10/20 Đặt tên biến nếu viết tắt từ tiếng Anh thì phải theo văn phạm tiếng Anh, ThisWb (this workbook) và NewWb (new workbook) chứ sao lại ngược thế kia À sr bạn, mình sẽ sữa lại code.
Dạ, cái này là của em chứ không phải của bạn @duongvanminh33 ạ. tại em theo qui tắc riếng của em là tiếp đầu ngữ của biến là kiểu biến và tiếp theo là cái tên thể hiện. ví dụ: wbThis có nghĩa là: wb=> kiểu là Workbook và This có nghĩa là ThisWorkBook Bài đã được tự động gộp: 2/10/20 ý là mình có một bảng dữ liệu trong đó mình có cột dữ liệu chứa các mật khẩu, và mình muốn lấy mk để gán cho từng file , mình đã thử tuy nhiên chỉ hỉu được một mk dòng thui |