Hai Nguyen Son
Hai Nguyen Son
Thảo luận 14 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 211 lượt xem

Em muốn code lưu dữ liệu từ sheet DAILY_REPORT sang sheet DATA_WCREPORT nhưng không

Hi Thầy,


Em muốn code lưu dữ liệu từ sheet DAILY_REPORT sang sheet DATA_WCREPORT nhưng không code được, thầy có thể hướng dẫn file demo giúp em,


Thanks thầy,



File demo



Thảo luận 14 câu trả lời
Lượt xem 211 lượt xem
Vỗ tay vỗ tay
Hai Nguyen Son 18:12 - Dec 20, 2020
Vỗ tay vỗ tay
Hai Nguyen Son 18:12 - Dec 20, 2020
Hai Nguyen Son 18:12 - Dec 20, 2020
Hai Nguyen Son 08:12 - Dec 21, 2020

Bạn vui lòng đặt lại quyền truy cập cho link Drive nhé, hiện mình không truy cập vào file được do bị chặn quyền truy cập.

Vỗ tay vỗ tay
Hai Nguyen Son 09:12 - Dec 21, 2020

Thầy cho em xin địa chỉ gmail để em add share. 

Vỗ tay vỗ tay
Hai Nguyen Son 09:12 - Dec 21, 2020

Khi chia sẻ link trong drive, bạn chọn mục "nhận đường liên kết" => trong phần này bạn đặt quyền truy cập cho "bất kỳ ai có đường liên kết này".

(các tài liệu bạn có thể đặt dưới dạng file mẫu, thông tin mang tính chất minh họa, không cần thông tin gốc và chia sẻ dạng Public)

Vỗ tay vỗ tay
Hai Nguyen Son 10:12 - Dec 21, 2020

Thanks thầy, em đã sửa quyền truy cập.

https://drive.google.com/drive/u/0/fo...

Vỗ tay vỗ tay
Hai Nguyen Son 10:12 - Dec 21, 2020

Mình hướng dẫn như sau nhé:

1. Vùng cần lấy dữ liệu (nơi cho): Sheet Daily, vùng B6:G & Dòng cuối

- Tạo biến lr xác định dòng cuối có dữ liệu trong Sheet Daily

2. Nơi nhận dữ liệu (nơi nhận): Sheet Data

- Dòng bắt đầu: là dòng cuối + 1 (dùng 1 biến dòng cuối khác để xác định dòng cuối có dữ liệu trong Sheet Data)

- Dòng kết thúc: là dòng bắt đầu + khoảng cách lưu

- Khoảng cách lưu = Dòng cuối sheet Daily - Dòng đầu sheet Daily (là dòng 6)

- Cột nhận kết quả: tính từ cột C tới cột H

Nội dung này trong chương 7 mình có hướng dẫn khá đầy đủ, bạn có thể xem lại.

Bạn xem code mẫu bên dưới:

Sub Test_GetData()
    'Bien ten Sheet
    Dim sh_daily As Worksheet, sh_data As Worksheet
        Set sh_daily = Sheets("Daily_Report")
        Set sh_data = Sheets("Data_WCReport")
        
    'Bien dong cuoi trong cac Sheet
    Dim lr_daily As Long, lr_data As Long
        lr_daily = sh_daily.Range("B" & Rows.Count).End(xlUp).Row
        lr_data = sh_data.Range("C" & Rows.Count).End(xlUp).Row
    Dim KhoangCach As Long
        KhoangCach = lr_daily - 6
        
    'Lay du lieu
    sh_data.Range("C" & lr_data + 1 & ":H" & lr_data + 1 + KhoangCach).Value = sh_daily.Range("B6:G" & lr_daily).Value
End Sub
Vỗ tay vỗ tay
Hai Nguyen Son 11:12 - Dec 21, 2020

Cảm ơn thấy, em đã chạy được code, thầy cho em hỏi  " trong hình ảnh bên dưới", em muốn dựa vào cột A, nếu cột A có dữ liệu nhập bị trùng thì phải xóa nó đi và thay vào đó bằng bản ghi mới nhất, thầy giúp em code này với. Em còn đoạn này nữa là hoàn thành file phục vụ cho công việc.

Thanks thầy.


Vỗ tay vỗ tay
Hai Nguyen Son 12:12 - Dec 21, 2020

Code trên có tính chất lưu hàng ngày, sau khi lưu thì dữ liệu được bổ sung thêm (chứ không đè lên dữ liệu cũ).

Ở đây bạn cần làm rõ 1 vấn đề: việc xét trùng lặp có cần thiết không?

Bởi về nguyên tắc lưu: dữ liệu đã có thì lưu theo dữ liệu mới, dữ liệu chưa có thì lưu thêm vào => Như thế nội dung trong bảng Data sẽ luôn là lần lưu gần nhất, và nó sẽ ghi đè lên dữ liệu cũ.

Vậy thì đoạn lệnh nơi nhận:

sh_data.Range("C" & lr_data + 1 & ":H" & lr_data + 1 + KhoangCach).Value  =

sẽ cần sửa lại thành 1 vùng cố định, thay vì 1 vùng nối thêm bên dưới.

Vùng này sẽ tính từ dòng 4 , và có độ lớn bằng khoảng cách:

sh_data.Range("C4:H" & lr_data + 1 + KhoangCach).Value  =
Vỗ tay vỗ tay
Hai Nguyen Son 15:12 - Dec 21, 2020

Em lại mắc vấn đề, khi xây dựng thêm dữ liệu bên dưới bảng nhập liệu thì nó bị đưa tự động sang sheet data, thấy có cách nào khắc phục nó không ạ.


Vỗ tay vỗ tay
Hai Nguyen Son 09:12 - Dec 22, 2020

Vì phần dữ liệu thêm vào bạn đặt ở phía dưới dòng cuối.

Bạn nên đặt phần này ở phía trên của bảng để không làm ảnh hưởng tới vị trí dòng cuối. Vì dòng cuối là 1 yếu tố quan trọng trong lập trình giúp xác định phạm vi dữ liệu một cách tự động.

Nếu bắt buộc phải đặt phần này ở dưới thì bạn không dùng biến dòng cuối nữa, mà phải xác định trực tiếp giá trị này (dưới dạng hằng số, không phải biến). Như thế phạm vi lưu sẽ là 1 vùng cố định (không phải vùng co dãn).

Bất kỳ thay đổi nào trong cấu trúc bảng dữ liệu sẽ làm thay đổi phương pháp lập trình (đôi khi phải code lại từ đầu rất vất vả chỉ vì thay đổi nhỏ), nên bạn phải thật cân nhắc về điều này nhé. Đây là vấn đề thường gặp khi chúng ta mới học về lập trình.

Vỗ tay vỗ tay
Hai Nguyen Son 10:12 - Dec 22, 2020

thanks thầy,

Vỗ tay vỗ tay
Hai Nguyen Son 13:12 - Dec 22, 2020

chúc bạn học tốt cùng Gitiho!

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