Nhờ thầy hỗ trợ giúp tôi. Tôi đang gặp vấn đề ở autofill nếu tôi cho Run Sub F5 thì không ra kết quả củng không báo lỗi, nhưng khi tôi chạy từng câu lệnh F8 thì ra kết quả kiểu như macro bỏ lệnh. File trong link liên kết https://drive.google.com/drive/folder...
Trân trọng cảm ơn!
Chào bạn trong đó có 4 file bạn đang muốn hỏi file nào nhỉ?
file Can_Dong_Bo.xlsm đó thầy. Em tổng hợp dữ liệu từ 3 file kia
Chào bạn bạn xem file mẫu phần gộp file nhé
Vấn đề của tôi không phải là tổng hợp dữ liệu mà vấn đề là khi tôi cho chương trình chạy thì không ra kết quả củng không báo lỗi, nhưng khi tôi chạy macro từng cầu bằng phím F8 thì ra kết quả. Thầy xem giúp tôi trong macro của tôi
Cảm ơn
Sẵn thầy xem giúp tôi, đoạn code dưới đây bị sai mà tôi chưa biết sữa như thế nào nhờ thầy chỉ giúp tôi ạ. Trân trọng cảm ơn
i.Offset(0, a) = Application.WorksheetFunction.SumIfs(WB_Nhap.Sheets("NHAP MU").Range(Cells(10, a + 4), Cells(DC_Nhap, a + 4)), WB_Nhap.Sheets("NHAP MU").Range(Cells(10, 2), Cells(DC_Nhap, 2)), i.Value) - Application.WorksheetFunction.SumIfs(WB_Xuat.Sheets("XUAT MU").Range(Cells(8, a + 3), Cells(DC_Xuat, a + 3)), WB_Xuat.Sheets("XUAT MU").Range(Cells(8, 2), Cells(DC_Xuat, 2)), i.Value)
1. Mình có chạy thử sub của bạn, trong đó đoạn code:
Workbooks.Open Filename:="D:\CONG_VIEC\TIEN_DO_NHA_MAY_KG.xlsx"
đang ở 1 thư mục là CONG_VIEC trong ổ D
còn các file khác lại ở thư mục D:\NHAP_ XUAT_KHO_BTP
Khi mình đưa về cùng 1 thư mục có cả 3 file thì code chạy bình thường, ko gặp lỗi gì.
Bạn thử xem lại các file đã ở đúng vị trí các thư mục chưa.
2. với đoạn code về sử dụng hàm sumifs thì
bạn nên đặt các vùng theo 1 tên biến, ví dụ:
Dim cot_TinhTong1 as Range
Set cot_TinhTong1 = WB_Nhap.Sheets("NHAP MU").Range(Cells(10, a + 4), Cells(DC_Nhap, a + 4))
=> khi đó trong hàm SUMIFS bạn viết theo các tên biến như trên thì rà soát hàm sẽ dễ hơn. Việc viết 1 công thức dài gồm nhiều vùng như vậy dễ sai sót mà khó kiểm tra.
Về công thức của bạn thì mình chỉ kiểm tra được về cú pháp có đủ các thành phần không, chứ ko rõ từng vùng cụ thể như thế nào, bởi các biến i, a mình chưa rõ, và code này đang đặt trong hoàn cảnh nào (vòng lặp hay chạy đơn). Cú pháp thì viết đúng rồi nhé.
Dạ tôi cảm ơn thầy
hoặc có cách làm nào khác hay hơn nhờ thầy chỉ giúp tôi
Code bạn viết đúng rồi. Chú ý biến i bạn chưa khai báo, nên thêm cú pháp Dim i as ... vào trước dòng lệnh For i... (Bạn đang dùng vòng lặp For Each với biến i trong vùng PO nên cần xác định rõ vùng PO là vùng nào, biến i là biến gì)
Mình chưa rõ ý "khi thực hiện macro vùng set range phải active lệnh mới chạy tiếp không thì báo lỗi" là như thế nào? Đoạn code trên bạn đặt vào trong 1 Sub và chạy Sub này là được mà (toàn bộ cấu trúc For...next này đặt trong 1 sub, khi cần tính toán bạn gọi sub ra với cú pháp
Call TenSub
Phương pháp này là đơn giản và dễ hiểu nhất rồi. Còn 1 phương pháp khác là:
- Bước 1: bạn viết hàm sumifs vào excel như dùng excel bình thường, nhưng chỉ viết trên dòng đầu tiên của bảng.
- Bước 2: trong VBA viết lệnh Range(...).FillDown (giống thao tác kéo công thức trong excel, bạn xác định tính từ dòng đầu chứa công thức tới dòng cuối trong bảng rồi fill xuống.
- Bước 3: bạn gán kết quả công thức tại đúng vùng vừa fill down, không tính dòng đầu (giữ lại 1 dòng chứa công thức)
Range(...).Value = Range(...).Value
Như vậy bạn sẽ vẫn có kết quả hàm SUMIFS nhưng chỉ là kết quả dạng value thôi, ko còn công thức động (về kết quả giống cách làm trên nhưng phương pháp hoàn toàn khác. Xét tốc độ tính thì cách này có thể chậm hơn 1 chút).
Cảm ơn thầy rất nhiều