Hoan Nguyen Khac
Hoan Nguyen Khac
Thảo luận 4 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 310 lượt xem

Sub Dong_Cuoi()Dim Dongcuoi As LongDim WB As WorkbookSet WB = WorkbooksOpen("D\gia von\retxlsx")Dongcuoi

Sub Dong_Cuoi()
Dim Dongcuoi As Long
Dim WB As Workbook
Set WB = Workbooks.Open("D:\gia von\ret.xlsx")
Dongcuoi = WB2.Sheet1.Range("A" & Rows.Count).End(xlUp).Row
WB2.Sheet1.Range("H2").Value = Dongcuoi
End Sub
Thầy ơi em dùng code name như trên thì bị báo lỗi. dùng như phía dưới thì được là bị làm sao ạ.
Sub Dong_Cuoi()
Dim Dongcuoi As Long
Dim WB As Workbook
Set WB = Workbooks.Open("D:\gia von\ret.xlsx")
Dongcuoi = WB2.Worksheets("Data").Range("A" & Rows.Count).End(xlUp).Row
WB2.Worksheets("Data").Range("H2").Value = Dongcuoi
End Sub
Thảo luận 4 câu trả lời
Lượt xem 310 lượt xem
Vỗ tay vỗ tay
Hoan Nguyen Khac 21:04 - Apr 21, 2020
Bạn kiểm tra xem codeName của Sheets("Data") có đúng là Sheet1 không nhé.
Có thể do code name khác nên câu lệnh sai (nếu không có code name là Sheet1 trong WB2 thì sẽ báo lỗi)
Vỗ tay vỗ tay
Hoan Nguyen Khac 21:04 - Apr 21, 2020
em đã kiểm tra kỹ rồi ạ, với lại cho em hỏi rút gọi đoạn sau bằng with như thế nào ạ?
Set WB2 = Workbooks.Open("D:\gia von\ret.xlsx")
Dongcuoi4 = WB2.Worksheets("Exported_20200420-180620").Range("A" & Rows.Count).End(xlUp).Row
ThisWorkbook.Sheets("RET").Range("A2:A" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("BL2:BL" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("B2:C" & Dongcuoi4, "D2:D" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("D2:E" & Dongcuoi4, "BQ2:BQ" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("D2:D" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("BQ2:BQ" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("E2:E" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("BP2:BP" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("F2:F" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("M2:M" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("G2:G" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("N2:N" & Dongcuoi4).Value
ThisWorkbook.Sheets("RET").Range("H2:H" & Dongcuoi4).Value = _
WB2.Worksheets("Exported_20200420-180620").Range("P2:P" & Dongcuoi4).Value


WB2.Close SaveChanges:=False
Vỗ tay vỗ tay
Hoan Nguyen Khac 03:04 - Apr 22, 2020
Thứ 1: câu lệnh Set WB2 = Workbooks.Open("D:\gia von\ret.xlsx")
bạn nên tạo thư mục chọn file, thay vì chỉ đích danh file được mở như vậy. Bạn tham khảo thêm ở bài 5 chương 8
Thứ 2: bạn nên gán các biến cho đối tượng:
Dim RET as Worksheet
Set RET = ThisWorkbook.Sheets("RET")
Dim DuLieu as Worksheet
Set DuLieu = WB2.Worksheets("Exported_20200420-180620")
Khi đó câu lệnh lấy dữ liệu chỉ còn:
RET.Range("D2:D" & Dongcuoi4).Value = DuLieu.Range("BQ2:BQ" & Dongcuoi4).Value
như thế sẽ gọn hơn nhiều
Thứ 3: sau khi kết thúc lệnh lấy dữ liệu, bạn có thể thêm lệnh giải phóng biến (đặt ở cuối câu lệnh, sau dòng WB2.Close SaveChanges:=False
Set DuLieu as Nothing
Set RET as Nothing

---
Về phương pháp làm việc với nhiều workbook thì rất dễ nhầm lẫn, do đó việc gán biến càng chi tiết càng tốt sẽ giúp bạn tránh được các lỗi có thể gặp trong quá trình viết code (nên gán biến chi tiết đến đối tượng Worksheet thay vì chỉ gán biến cho Workbook)
Vỗ tay vỗ tay
Hoan Nguyen Khac 21:04 - Apr 22, 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