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

  • 4

    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.

  • 5

    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.

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

  • 6

    Sub Button7_Click[] Dim OutApp As Object Dim OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String Dim sPath As String Dim i As Long printFrom = Sheets["Sheet3"].Range["I8"] printTo = Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo Sheets["Sheet3"].Range["I5"] = i ThisWorkbook.Sheets["Sheet3"].Range["A133"].Select Range["A133"].Copy Workbooks.Add[xlWBATWorksheet].Sheets["Sheet1"].Select Range["A133"].Select ActiveWorkbook.ActiveSheet.PasteSpecial Columns["A"].AutoFit ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'HAM NAY CHI DC DUNG TRONG RANGE sFile = ActiveWorkbook.Path & "\" & "Payslip Oct 2020 - " & Sheets["Sheet3"].Range["B11"] & ".xlsx" ActiveWorkbook.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True _ , CreateBackup:=False Workbooks.Add.Close Savechanges:=False 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"] & "

Kindly find attachment payslip of October 2020.
" & _ "
Should you have any questions, do not hestitate to contact us." & _ "

Thanks & regards
" & _ "" .Attachments.Add [sFile] .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success"

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ã:

Dim wbNew As Workbook, wbThis As Workbook

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ã:

Sub Button7_Click[]
Dim OutApp As Object, OutMail As Object
Dim printFrom As Variant, printTo As Variant
Dim sFile As String, sPath As String
Dim i As Long
Dim wbNew As Workbook, wbThis As Workbook
    Set wbThis = ThisWorkbook
    printFrom = wbThis.Sheets["Sheet3"].Range["I8"]
    printTo = wbThis.Sheets["Sheet3"].Range["I9"]
    Set OutApp = CreateObject["Outlook.Application"]
    For i = printFrom To printTo
        wbThis.Sheets["Sheet3"].Range["I5"] = i
        Set wbNew = Workbooks.Add[xlWBATWorksheet]
        wbThis.Sheets["Sheet3"].Range["A1:D33"].Copy
        With wbNew.Sheets["Sheet1"]
            .Range["A1:D33"].PasteSpecial xlPasteValues
            .Range["A1:D33"].PasteSpecial xlPasteFormats
            .Columns["A:D"].AutoFit
        End With
        Application.CutCopyMode = False
        sFile = wbThis.Path & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx"
        wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False
        wbNew.Close False
        Set wbNew = Nothing
        Set OutMail = OutApp.CreateItem[0]
        With OutMail
            .To = wbThis.Sheets["Sheet3"].Range["B12"]
            .cc = ""
            .BCC = ""
            .Subject = wbThis.Sheets["Sheet3"].Range["B9"]
            .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & " 

Kindly find attachment payslip of October 2020.
" & _ "
Should you have any questions, do not hestitate to contact us." & _ "

Thanks & regards
" & _ "" .Attachments.Add [sFile] .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

  • 7

    Sub Button7_Click[] Dim OutApp As Object Dim OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String Dim sPath As String Dim i As Long printFrom = Sheets["Sheet3"].Range["I8"] printTo = Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo Sheets["Sheet3"].Range["I5"] = i ThisWorkbook.Sheets["Sheet3"].Range["A133"].Select Range["A133"].Copy Workbooks.Add[xlWBATWorksheet].Sheets["Sheet1"].Select Range["A133"].Select ActiveWorkbook.ActiveSheet.PasteSpecial Columns["A"].AutoFit ActiveSheet.UsedRange.Value = ActiveSheet.UsedRange.Value 'HAM NAY CHI DC DUNG TRONG RANGE sFile = ActiveWorkbook.Path & "\" & "Payslip Oct 2020 - " & Sheets["Sheet3"].Range["B11"] & ".xlsx" ActiveWorkbook.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True _ , CreateBackup:=False Workbooks.Add.Close Savechanges:=False 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"] & "

Kindly find attachment payslip of October 2020.
" & _ "
Should you have any questions, do not hestitate to contact us." & _ "

Thanks & regards
" & _ "" .Attachments.Add [sFile] .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success"

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

  • 8

    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

  • 9

    Để tránh thì nên viết cách ra 1 khoảng trắng như : D

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 ạ?

  • 10

    Đó 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

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....

  • 11

    Đó 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

Ah, ý là nhắc người hỏi nên đặt vào trong tab [ code] ... [ /code]

  • 12

    Đó 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

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:

Mã:

Dim wbNew As Workbook, wbThis As Workbook

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ã:

Sub Button7_Click[] Dim OutApp As Object, OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String, sPath As String Dim i As Long Dim wbNew As Workbook, wbThis As Workbook Set wbThis = ThisWorkbook printFrom = wbThis.Sheets["Sheet3"].Range["I8"] printTo = wbThis.Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo wbThis.Sheets["Sheet3"].Range["I5"] = i Set wbNew = Workbooks.Add[xlWBATWorksheet] wbThis.Sheets["Sheet3"].Range["A1:D33"].Copy With wbNew.Sheets["Sheet1"] .Range["A1:D33"].PasteSpecial xlPasteValues .Range["A1:D33"].PasteSpecial xlPasteFormats .Columns["A:D"].AutoFit End With Application.CutCopyMode = False sFile = wbThis.Path & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx" wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False wbNew.Close False Set wbNew = Nothing Set OutMail = OutApp.CreateItem[0] With OutMail .To = wbThis.Sheets["Sheet3"].Range["B12"] .cc = "" .BCC = "" .Subject = wbThis.Sheets["Sheet3"].Range["B9"] .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & "

Kindly find attachment payslip of October 2020.
" & "
Should you have any questions, do not hestitate to contact us." &

"

Thanks & regards
" & _ "" .Attachments.Add [sFile] .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

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

  • 13

    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.

Để 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.

  • 14

    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ã:

Dim wbNew As Workbook, wbThis As Workbook

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ã:

Sub Button7_Click[] Dim OutApp As Object, OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String, sPath As String Dim i As Long Dim wbNew As Workbook, wbThis As Workbook Set wbThis = ThisWorkbook printFrom = wbThis.Sheets["Sheet3"].Range["I8"] printTo = wbThis.Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo wbThis.Sheets["Sheet3"].Range["I5"] = i Set wbNew = Workbooks.Add[xlWBATWorksheet] wbThis.Sheets["Sheet3"].Range["A1:D33"].Copy With wbNew.Sheets["Sheet1"] .Range["A1:D33"].PasteSpecial xlPasteValues .Range["A1:D33"].PasteSpecial xlPasteFormats .Columns["A:D"].AutoFit End With Application.CutCopyMode = False sFile = wbThis.Path & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx" wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False wbNew.Close False Set wbNew = Nothing Set OutMail = OutApp.CreateItem[0] With OutMail .To = wbThis.Sheets["Sheet3"].Range["B12"] .cc = "" .BCC = "" .Subject = wbThis.Sheets["Sheet3"].Range["B9"] .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & "

Kindly find attachment payslip of October 2020.
" & "
Should you have any questions, do not hestitate to contact us." &

"

Thanks & regards
" & _ "" .Attachments.Add [sFile] .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

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ã :

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 ạ.

Lỗi sai : wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False

  • 15

    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ạ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]

  • 16

    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]

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ã:

Sub Button7_Click[]
Dim OutApp As Object, OutMail As Object
Dim printFrom As Variant, printTo As Variant
Dim sFile As String, sPath As String
Dim i As Long
Dim FName As String
Dim fso As Object
Dim wbNew As Workbook, wbThis As Workbook
    FName = ThisWorkbook.Path & "\PhieuLuong - " & Format[Now, "MMM DD YY"]
     Const DeleteReadOnly = True
    Set fso = CreateObject["Scripting.FileSystemObject"]
    If fso.FolderExists[FName] Then
        fso.DeleteFolder [FName], DeleteReadOnly
        fso.CreateFolder [FName]
    End If
    If Not fso.FolderExists[FName] Then
        fso.CreateFolder [FName]
    End If
    Set wbThis = ThisWorkbook
    printFrom = wbThis.Sheets["Sheet3"].Range["I8"]
    printTo = wbThis.Sheets["Sheet3"].Range["I9"]
    Set OutApp = CreateObject["Outlook.Application"]
    For i = printFrom To printTo
        wbThis.Sheets["Sheet3"].Range["I5"] = i
        Set wbNew = Workbooks.Add[xlWBATWorksheet]
        wbThis.Sheets["Sheet3"].Range["A1: D33"].Copy
        With wbNew.Sheets["Sheet1"]
            .Range["A1: D33"].PasteSpecial xlPasteValues
            .Range["A1: D33"].PasteSpecial xlPasteFormats
            .Columns["A:D"].AutoFit
        End With
        Application.CutCopyMode = False
        sFile = FName & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx"
        wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False
        wbNew.Close False
        Set wbNew = Nothing
        Set OutMail = OutApp.CreateItem[0]
        With OutMail
            .To = wbThis.Sheets["Sheet3"].Range["B12"]
            .cc = ""
            .BCC = ""
            .Subject = wbThis.Sheets["Sheet3"].Range["B9"]
            .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & " 

Kindly find attachment payslip of October 2020.
" & _ "
Should you have any questions, do not hestitate to contact us." & _ "

Thanks & regards
" & _ "" .Attachments.Add [sFile] 'ActiveWorkbook.FullName .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

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...

NHẮC LẠI: nhớ khi đưa code lên thì phải đặt trong thẻ code nha [xem bài

10]

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

  • 17

    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ã:

Sub Button7_Click[] Dim OutApp As Object, OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String, sPath As String Dim i As Long Dim FName As String Dim fso As Object Dim wbNew As Workbook, wbThis As Workbook FName = ThisWorkbook.Path & "\PhieuLuong - " & Format[Now, "MMM DD YY"] Const DeleteReadOnly = True Set fso = CreateObject["Scripting.FileSystemObject"] If fso.FolderExists[FName] Then fso.DeleteFolder [FName], DeleteReadOnly fso.CreateFolder [FName] End If If Not fso.FolderExists[FName] Then fso.CreateFolder [FName] End If Set wbThis = ThisWorkbook printFrom = wbThis.Sheets["Sheet3"].Range["I8"] printTo = wbThis.Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo wbThis.Sheets["Sheet3"].Range["I5"] = i Set wbNew = Workbooks.Add[xlWBATWorksheet] wbThis.Sheets["Sheet3"].Range["A1: D33"].Copy With wbNew.Sheets["Sheet1"] .Range["A1: D33"].PasteSpecial xlPasteValues .Range["A1: D33"].PasteSpecial xlPasteFormats .Columns["A:D"].AutoFit End With Application.CutCopyMode = False sFile = FName & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx" wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False wbNew.Close False Set wbNew = Nothing Set OutMail = OutApp.CreateItem[0] With OutMail .To = wbThis.Sheets["Sheet3"].Range["B12"] .cc = "" .BCC = "" .Subject = wbThis.Sheets["Sheet3"].Range["B9"] .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & "

Kindly find attachment payslip of October 2020.
" & "
Should you have any questions, do not hestitate to contact us." &

"

Thanks & regards
" & _ "" .Attachments.Add [sFile] 'ActiveWorkbook.FullName .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

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.

Mã:

Sub Button7_Click[] Dim OutApp As Object, OutMail As Object Dim printFrom As Variant, printTo As Variant Dim sFile As String, sPath As String Dim i As Long Dim FName As String Dim fso As Object Dim wbNew As Workbook, wbThis As Workbook FName = ThisWorkbook.Path & "\PhieuLuong - " & Format[Now, "MMM DD YY"] Const DeleteReadOnly = True Set fso = CreateObject["Scripting.FileSystemObject"] If fso.FolderExists[FName] Then fso.DeleteFolder [FName], DeleteReadOnly fso.CreateFolder [FName] End If If Not fso.FolderExists[FName] Then fso.CreateFolder [FName] End If Set wbThis = ThisWorkbook printFrom = wbThis.Sheets["Sheet3"].Range["I8"] printTo = wbThis.Sheets["Sheet3"].Range["I9"] Set OutApp = CreateObject["Outlook.Application"] For i = printFrom To printTo wbThis.Sheets["Sheet3"].Range["I5"] = i Set wbNew = Workbooks.Add[xlWBATWorksheet] wbThis.Sheets["Sheet3"].Range["A1: D33"].Copy With wbNew.Sheets["Sheet1"] .Range["A1: D33"].PasteSpecial xlPasteValues .Range["A1: D33"].PasteSpecial xlPasteFormats .Columns["A:D"].AutoFit End With Application.CutCopyMode = False sFile = FName & "\" & "Payslip Oct 2020 - " & wbThis.Sheets["Sheet3"].Range["B11"] & ".xlsx" wbNew.SaveAs Filename:=sFile, FileFormat:=51, WriteResPassword:="", ReadOnlyRecommended:=True, CreateBackup:=False wbNew.Close False Set wbNew = Nothing Set OutMail = OutApp.CreateItem[0] With OutMail .To = wbThis.Sheets["Sheet3"].Range["B12"] .cc = "" .BCC = "" .Subject = wbThis.Sheets["Sheet3"].Range["B9"] .HTMLBody = " Dear " & Sheets["Sheet3"].Range["B11"] & "

Kindly find attachment payslip of October 2020.
" & "
Should you have any questions, do not hestitate to contact us." &

"

Thanks & regards
" & _ "" .Attachments.Add [sFile] 'ActiveWorkbook.FullName .Send End With Set OutMail = Nothing Next i Set OutApp = Nothing Set OutMail = Nothing MsgBox "Success" End Sub

Bài đã được tự động gộp: 2/10/20

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,

xin lỗi mình hổng hiểu ý bạn là gì???? có thể nói rõ hơn đươc không?

  • 18

    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ã:

Set wbThis = ThisWorkbook Set wbNew = Workbooks.Add[xlWBATWorksheet]

Đặ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

  • 19

    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

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.

  • 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

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

Chủ Đề