Quí Hảo La
Quí Hảo La
Thảo luận 13 thảo luận
Vỗ tay 0 vỗ tay
Lượt xem 232 lượt xem

hỗ trợ giúp tôi Tôi đang gặp vấn đề ở autofill nếu tôi cho Run Sub F5 thì

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

Thảo luận 13 câu trả lời
Lượt xem 232 lượt xem
Vỗ tay vỗ tay
Quí Hảo La 15:08 - Aug 20, 2021

Trân trọng cảm ơn!

Vỗ tay vỗ tay
Quí Hảo La 17:08 - Aug 20, 2021

Chào bạn trong đó có 4 file bạn đang muốn hỏi file nào nhỉ?

Vỗ tay vỗ tay
Quí Hảo La 18:08 - Aug 20, 2021

file Can_Dong_Bo.xlsm đó thầy. Em tổng hợp dữ liệu từ 3 file kia

Vỗ tay vỗ tay
Quí Hảo La 10:08 - Aug 21, 2021

Chào bạn bạn xem file mẫu phần gộp file nhé

https://drive.google.com/file/d/1ZfKQ...


Vỗ tay vỗ tay
Quí Hảo La 10:08 - Aug 21, 2021

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

Vỗ tay vỗ tay
Quí Hảo La 11:08 - Aug 22, 2021

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)

Vỗ tay vỗ tay
Quí Hảo La 09:08 - Aug 23, 2021

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

Vỗ tay vỗ tay
Quí Hảo La 09:08 - Aug 23, 2021

Dạ tôi cảm ơn thầy

Vỗ tay vỗ tay
Quí Hảo La 10:08 - Aug 23, 2021
Tôi hiểu như vậy đúng chưa thầy, nhưng vẫn còn 1 lỗi là 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 thầy chỉ giúp tôi cái này cái ạ
 For Each i In PO
        Dim a As Single
        For a = 6 To 26
            Dim sum_range_nhap As Range, criteria_range_nhap As Range
            Set sum_range_nhap = WB_Nhap.Sheets("NHAP MU").Range(Cells(10, a + 4), Cells(DC_Nhap, a + 4))
            Set criteria_range_nhap = WB_Nhap.Sheets("NHAP MU").Range(Cells(10, 2), Cells(DC_Nhap, 2))
            
            Dim sum_range_xuat As Range, criteria_range_xuat As Range
            Set sum_range_xuat = WB_Xuat.Sheets("XUAT MU").Range(Cells(8, a + 3), Cells(DC_Xuat, a + 3))
            Set criteria_range_xuat = WB_Xuat.Sheets("XUAT MU").Range(Cells(8, 2), Cells(DC_Xuat, 2))
            
            i.Offset(0, a) = Application.WorksheetFunction.SumIfs(sum_range_nhap, criteria_range_nhap, i.Value) - Application.WorksheetFunction.SumIfs(sum_range_xuat, criteria_range_xuat, i.Value)
        Next a
    Next i
Xin cảm ơn!
Vỗ tay vỗ tay
Quí Hảo La 10:08 - Aug 23, 2021

hoặc có cách làm nào khác hay hơn nhờ thầy chỉ giúp tôi

Vỗ tay vỗ tay
Quí Hảo La 16:08 - Aug 23, 2021

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

Vỗ tay vỗ tay
Quí Hảo La 21:08 - Aug 23, 2021

Cảm ơn thầy rất nhiều

Vỗ tay vỗ tay
Quí Hảo La 22:08 - Aug 23, 2021
Toàn bộ code tôi viết nhờ thầy xem qua giúp vẫn bị lỗi 1004 đoạn tôi tô đậm in nghiêng
Dưới đây là file, code tôi viết trong file Can_Dong_Bo tông hợp dữ liệu từ file trong thư mục NHAP - XUAT KHO  BTP:  https://drive.google.com/drive/folder..., https://drive.google.com/file/d/1hPOg...
Option Explicit
Sub Ton_Mu() 'Dien so luong ton tung size theo tung don hang

'Buoc 1: mo 2 file Nhap kho - Xuat kho
  'Buoc 1.1: mo file nhap kho
     'Kiem tra file co ton tai khong
     If Dir("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx") = "" Then _
    MsgBox " File D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx khong ton tai" & _
        vbCrLf & "Vui long kiem tra lai thu muc", vbInformation & vbOKOnly, "Thong bao": _
        Exit Sub
    'Mo file nhap kho BTP
    Workbooks.Open Filename:="D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\NHAP KHO BTP-SK GO KG.xlsx", UpdateLinks:=0 'Mo file nhap, khong cap nhat
    'Gan file nhap vua mo vao bien
    Dim WB_Nhap As Workbook
    Set WB_Nhap = Workbooks("NHAP KHO BTP-SK GO KG.xlsx")
    'Neu file nhap co loc thi xoa loc
    If WB_Nhap.Sheets("NHAP MU").AutoFilterMode Then WB_Nhap.Sheets("NHAP MU").AutoFilter.ShowAllData
    'Tim dong cuoi file nhap theo cot don hang
    Dim DC_Nhap As Single
    DC_Nhap = WB_Nhap.Sheets("NHAP MU").Cells(Rows.Count, 2).End(xlUp).Row
    'Vung don hang file nhap kho
    Dim PO_Nhap As Range
    Set PO_Nhap = WB_Nhap.Sheets("NHAP MU").Range("B10:B" & DC_Nhap)
    
    
  'Buoc 1.2: mo file xuat kho
    'Kiem tra file co ton tai khong
       If Dir("D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx") = "" Then _
    MsgBox " File D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx khong ton tai" & _
        vbCrLf & "Vui long kiem tra lai thu muc", vbInformation & vbOKOnly, "Thong bao": _
        Exit Sub
    'Mo file xuat kho
    Workbooks.Open Filename:="D:\NHAP - XUAT KHO BTP\NHAP - XUAT KHO BTP\XUAT KHO BTP-SK GO KG.xlsx", UpdateLinks:=0  'Mo file xuat, khong cap nhat
    'Gan file xuat vua mo vao bien
    Dim WB_Xuat As Workbook
    Set WB_Xuat = Workbooks("XUAT KHO BTP-SK GO KG.xlsx")
    'Neu file xuat co loc thi xoa loc
    If WB_Xuat.Sheets("XUAT MU").AutoFilterMode Then WB_Xuat.Sheets("XUAT MU").AutoFilter.ShowAllData
    'Tim dong cuoi file xuat theo cot don hang
    Dim DC_Xuat As Single
    DC_Xuat = WB_Xuat.Sheets("XUAT MU").Cells(Rows.Count, 2).End(xlUp).Row
    'Vung don hang file xuat kho
    Dim PO_Xuat As Range
    Set PO_Xuat = WB_Xuat.Sheets("XUAT MU").Range("B8:B" & DC_Xuat)

'Buoc 2: Tinh ton so luong tung size = tong nhap theo don hang - tong xuat theo don hang
   'Tim dong cuoi file ket qua theo don hang
   Dim DC_TM As Single
   DC_TM = WB_CDB.Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
   'Vung don hang file ket qua
   Dim i As Range, PO As Range
   Set PO = WB_CDB.Sheet1.Range("B2:B" & DC_TM)
   'Vong lap theo tung don hang trong vung don hang
    For Each i In PO
        Dim a As Single
        For a = 6 To 26 'Vong lap theo cot size tu size nho den size lon
            Dim sum_range_nhap As Range, criteria_range_nhap As Range
            Set sum_range_nhap = WB_Nhap.Sheets("NHAP MU").Range(Cells(10, a + 4), Cells(DC_Nhap, a + 4))
            
            Dim sum_range_xuat As Range, criteria_range_xuat As Range
            Set sum_range_xuat = WB_Xuat.Sheets("XUAT MU").Range(Cells(8, a + 3), Cells(DC_Xuat, a + 3))
            
            i.Offset(0, a) = Application.WorksheetFunction.SumIf(PO_Nhap, i.Value, sum_range_nhap) - Application.WorksheetFunction.SumIf(PO_Xuat, i.Value, sum_range_xuat)
        Next a
    Next i
    
    Range("G2").FormulaR1C1 = "=+SUMIF(RC[1]:RC[21],"">0"")"
    Range("G2").AutoFill Destination:=Range("G2:G" & DC_TM), Type:=xlFillDefault
    
    Range("G2:AB" & DC_TM) = Range("G2:AB" & DC_TM).Value
    
'Buoc 3: Dong file va loc
    'Dong file
    WB_Xuat.Close savechanges:=False
    WB_Nhap.Close savechanges:=False
    'Loc
    Range("A1:AB" & DC_TM).AutoFilter Field:=7, Criteria1:="<>"
End Sub
Xin cảm ơn!


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