Huỳnh hoài bảo
Huỳnh hoài bảo
Thảo luận 4 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 263 lượt xem

Gởi giáo viên Trong phần bài tập chương; mục tổng hợp dữ liệu tiền lương

Gởi giáo viên: Trong phần bài tập chương; mục tổng hợp dữ liệu tiền lương từ các file tiền lương hàng tháng - sao đến đoạn code tìm dòng cuối của file nguồn thì VBA báo lỗi "run tiem '9' - subcript out of range nhờ GV giải thích và chỉnh dùm:

Sub chep_DL_tongquat()

        'mo thu muc chon fiel

    With Application.FileDialog(msoFileDialogFilePicker)

            .AllowMultiSelect = True

            .Show

        ' xac dinh file

                    Dim i As Long

                For i = 1 To .SelectedItems.Count

        'gan bien cho workbook

                    Dim wb_KQ As Workbook

                    Dim wb_select As Workbook

                    Set wb_KQ = ThisWorkbook

                    Set wb_select = Workbooks.Open(.SelectedItems(i))

                    Dim dongcuoi As Long

                    dongcuoi = wb_select.Sheets("sheet1").Range("D" & Rows.Count).End(xlUp).Row

                    Dim dongdau As Long

                    dongdau = 6

                    Dim khoangcach

                    khoangcach = dongcuoi - dongdau + 1

                      'ghep du lieu wb vao

                    Dim dongcuoi_wbkq As Long

                    dongcuoi_wbkq = wb_KQ.Sheets("data").Range("D" & Rows.Count).End(xlUp).Row  ' vị trí báo lỗi

                    wb_KQ.Sheets("data_tienluong").Range("A" & dongcuoi_wbkq + 1 & ":BM" & dongcuoi_wbkq + khoangcach).Value = _

                    wb_select.Sheets("sheet1").Range("A" & dongdau & ":BM" & dongcuoi).Value

                    wb_select.Close Savechanges:=False

            Next i

    End With

End Sub

Thảo luận 4 câu trả lời
Lượt xem 263 lượt xem
Vỗ tay vỗ tay
Huỳnh hoài bảo 09:09 - Sep 12, 2020

vị trí code dòng cuối này lỗi thì bạn kiểm tra bạn cần xem tại workbook này (thisworkbook) có sheet tên là data hay không. Vì bạn đang viết theo tên sheet nên nếu tên này không tồn tại thì code sẽ lỗi.


Vỗ tay vỗ tay
Huỳnh hoài bảo 11:09 - Sep 12, 2020

sorry thầy ơi - nó báo lỗi ở dòng trên 

Dim dongcuoi As Long

                    dongcuoi = wb_select.Sheets("sheet1").Range("D" & Rows.Count).End(xlUp).Row

Mỗi workbook mở lên thì sheet bảng lương hàng tháng đều là sheet1 mà.

Vỗ tay vỗ tay
Huỳnh hoài bảo 11:09 - Sep 14, 2020

Sheets("sheet1") là cách viết tên sheet theo tên, tức là phải đúng tên là chữ sheet1 thì mới đúng.

Cách viết này dễ sai khi viết code với đối tượng dạng này, bạn nên dùng phương pháp viết theo code name:

dongcuoi = wb_select.Sheet1.Range("D" & Rows.Count).End(xlUp).Row

hoặc viết theo số thứ tự của sheet

dongcuoi = wb_select.Sheets(1).Range("D" & Rows.Count).End(xlUp).Row
2 cách viết này hạn chế sai sót hơn, vì viết đích danh theo tên chỉ nên áp dụng khi bạn chắc chắn tất cả các sheet đó đều có cùng 1 tên. Mà VBA đã báo lỗi ở đó thì chắc chắn là có 1 workbook bị sai tên sheet.

Vỗ tay vỗ tay
Huỳnh hoài bảo 19:09 - Sep 14, 2020

Cám ơn thầy

Vỗ tay vỗ tay
Câu hỏi liên quan
© 2020 - Bản quyền của Công Ty Cổ Phần Công Nghệ Giáo Dục Gitiho Việt Nam
Giấy chứng nhận Đăng ký doanh nghiệp số: 0109077145, cấp bởi Sở Kế hoạch và Đầu tư TP. Hà Nội
Giấy phép mạng xã hội số: 588, cấp bởi Bộ Thông tin và Truyền thông