Nhờ viết code cho bảng tổng hợp nhập xuất tồn có nhiều nhóm hàng. (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

tranthanhktt

Thành viên chính thức
Tham gia
7/9/10
Bài viết
55
Được thích
20
Chào các bạn ! mình đang gặp chút vấn đề trong file nhập xuất tồn kho, vì file có rất nhiều công thức nên rất nặng, mình đang chuyển qua sử dụng bằng vba nhưng mà chưa biết viết code cho bảng tổng hợp NXT cónhiềunhómhàng như thế nào. Rất mong các bạn giúp đỡ . Cám ơn nhiều.
 

File đính kèm

Bạn xem trong file kèm theo

Vì file có rất nhiều công thức nên rất nặng,
mình chưa biết viết code cho bảng tổng hợp NXT cónhiềunhómhàng như thế nào. Rất mong các bạn giúp đỡ . Cám ơn nhiều.

Tạm vậy để kiểm kết quả đã nha; Có thể hoàn chỉnh tiếp, một khi kết quả mĩ mãn.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn bạn! nhưng mà nó chưa hoàn toàn đúng ýcủa mình, bạn có thể giúp thì giúp cho chótkhông? ý mình là khi mình muốnthêm mã mới nó sẽ ghi ở dòng tiếp theo mà không theo nhóm hàng ,khi tổnghợp nó sẽ tfm và nằmđúng với nhóm đó căn cứ vào 3 kýtự đầu . đồngthời ở bảng tổnghợp những nhóm hàngcấp 1 sẽ tô màu đồng thời có gạchliền ,nhóm hàng cấp 2 có gạchđứt.dòngtổng cộng là tổng củanhóm hàngcấp 2. làm coppy dữliệu từ sheet ma như của bạn ta phảithiết kế 1 form thêm mặt hàng và khi ghi nó phải dò tìm đến hàng cuối cùngcủanhóm tương ứng và Isert them một dòng, như vậy không biết có làm được không nhỉ?. rất mong đươc sự giúp đỡ của bạn.
 
Upvote 0
/-(ình như bạn chưa kịp đọc các dòng lệnh trong macro thì fải?!

Trong đó có dòng:
Mã:
 RgS.Copy Destination:=[A7]

Là macro sẽ chép dữ liệu có ở trang 'Ma' sang trang 'TgHop' trước khi xem xét & xử lí dữ liệu từ trang 'Data'

Giờ bạn muốn thêm các loại hàng hoá khác nữa, ta chỉ việc đến trang 'Ma' & thêm dòng vô chỗ thích hợp & nhập nội dung mới vô thôi.

Chỉ xin chú í 1 điều: Khi hơn 45 mặt hàng thì fải thiết chế lại trang 'TgHop' cho có đủ số dòng để nó đảm bảo chứa hết dữ liệu.

(Xin gởi file mới đây)
 

File đính kèm

Upvote 0
Trong đó có dòng:
Mã:
 RgS.Copy Destination:=[A7]

Là macro sẽ chép dữ liệu có ở trang 'Ma' sang trang 'TgHop' trước khi xem xét & xử lí dữ liệu từ trang 'Data'

Giờ bạn muốn thêm các loại hàng hoá khác nữa, ta chỉ việc đến trang 'Ma' & thêm dòng vô chỗ thích hợp & nhập nội dung mới vô thôi.

Chỉ xin chú í 1 điều: Khi hơn 45 mặt hàng thì fải thiết chế lại trang 'TgHop' cho có đủ số dòng để nó đảm bảo chứa hết dữ liệu.

(Xin gởi file mới đây)
Xin anh nói rõ hơn về
Destination:=[A7] (lý thuyết)
Cảm ơn anh.
 
Upvote 0
Xin anh nói rõ hơn về
Destination:=[A7] (lý thuyết)
Cảm ơn anh.
Khi sử dụng các phương thức Cut hay Copy thì Destination là tham số. Tham số này sẽ chỉ đến địa chỉ ( 1 ô hoặc khối ô ) mà bạn muốn di chuyển ( khi dùng Cut) hoặc sao chép (khi dùng Copy) đến
Đơn giản như mình "đang giỡn" vậy mà
+-+-+-+:=\++-+-+-+Híc
 
Upvote 0
cảm ơn bạn! nhưng như vậy rất bất tiện mỗi khi thêm mã mình lại phải insert thêm một dòng ngay cuối mỗi nhóm, và nếu nhiều hơn 49 mã lại phải insert ở sheet tong hop. bảng mã trên chỉ là vd thôi, ý mìnhmuốn khi phát sinh thêm mã mới mình cứ nhập tiếp theo ở dòng cuối mà không cần theo thứ mỗi nhóm như vd . khi tổng hợp nó sẽ coppy dữ liêu từ nhóm hàng trước bắt đầu từ ô H2 chuyển sang tổng hợp sau đó tham chiếu qua vùng mã lấy 3 ký tự đầu của vùng mã hàng= 3 kýtự của nhómhàng thì chuyển sang tổng hợp sau đó tiếp tục lấy nhóm dữ liệu kế tiếp của ô H3 và cư như vậy đến ô H...n.
 
Upvote 0
nhờ viết code cho bảng tổng hợp nhập xuất tồn

Chào các bạn, mình nhờ các bạn cao thủ trên diễn đàn viết dùm code tổng hợp NXT theo thóm hàng. Nếu không theo thứ tự nhóm thì mình làm được rồi, nhưng sếp mình muốn báo cáo có luôn nhóm hàng. mìnhloay hoay mãi mà chưa viết được ,mong các bạn giúpdỡ. cảmơn
 

File đính kèm

Upvote 0
Trong trường hợp số lượng mã hàng của bạn không quá nhiều, có thể làm theo cách này. Không cần dùng code gì cả. Chịu khó copy tí thôi.
 
Upvote 0
không bạn ạ. Nếu làm công thức thì mình đang làm ,nhưng mà mình có hơn 2000 mã hàng, làm công thức file chạyh rất chậm. mình cũng làm code được rùi nhưng mà nó không sắp xếp thứ tự theo mã hàng được.
 
Upvote 0

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình rất thích bản này vì nó đơn giản và phù hợp.
Mình down bản của các bác về và sửa lại cho phù hợp hơn với loại hình bán ở cửa hàng mình thì có 1 số chi tiết sau cần sự giúp đỡ của các bác:
- Trong sheet TONGHOP hiện lên được số cây nhập xuất tồn rồi, bây giờ làm sao để hiện lên dc là tồn những cây màu nào dc không?. Trong sheet Data mình đã thêm cột Màu để ghi rõ mình nhập- xuất bao nhiêu cây màu gì rồi
Xin các bác giúp đỡ tạo thêm cho mình 1 cột Màu trong sheet TONGHOP, sử dụng công thức nào để mình thực hiện dc việc trên với ạ! Mình xin gửi file lên cho các bác giúp!
 

File đính kèm

Upvote 0
bạn SA_QD làm cách này rất hay nhưng mà còn một vấn đề nhỏ nhờ bạn sửa lại dùm! đó là khi mình đặt mã mà ở bất kỳ hàng nào trùng với mã của 1 nhóm nào đó thì nó sẽ chạy bậy ngay: vd khi ta đặt mã :00501001 thì khi chạy code nó sẽ chạy vào cả nhóm 001 và nhóm 005 thay vì chỉ chạy vào nóm 005 thôi vì nó có 3 ký tự cuối trùng với nhóm 001. tương tự nếu ta đặt mã 00500101 thì kết quả cũng vậy vì 3 ký tự giữ trùng với nhóm 001.
Bạn nghiên cứu sửa lại dùm mình nhé ! cám ơn!
 

File đính kèm

Upvote 0
Mình hướng dẫn bạn sửa trong macro nhe:

Trong macro đầu, bạn sẽ thấy 3 dòng lệnh sau:

Mã:
            With Cells(r0, "A").End(xlUp).Offset(1)
                sRng.Resize(, 6).Copy Destination:=.Offset(0)
            End With

(Vì 2 dòng lệnh trong nớ có With là không cần thiết, tiện sửa luôn)
Bạn chép đè 3 dòng lệnh này lên chúng:

PHP:
            If Left(sRng.Value, 3) = Cls.Value Then
                sRng.Resize(, 6).Copy Destination:=Cells(r0, "A").End(xlUp).Offset(1)
            End If

Mong là bạn tự ên được & chúc thành công!
 
Upvote 0
cám ơn bạn rất nhiều ! nhưng mà còn chút vấnđề nữa nhờ bạn sửa giúp .trong code của bạn có đoạn:
Cls.Offset(, 10).Value = Cls.Offset(, 4).Value + _
Cls.Offset(, 6).Value - Cls.Offset(, 8).Value
Cls.Offset(, 11).Value = Cls.Offset(, 5).Value + _
Cls.Offset(, 7).Value - Cls.Offset(, 9).Value
CT như vậy thấy đúng rùi nhưng không biết sao ở cột tồn cuối kỳ nếu mã nào có phát sinh số liệu thì nó mới chuyển số tồn,những mặt hàng nào không có PS thi nó không chuyển, trong khi có một số mặt hàng không có phát sinh nhưng có tồn đầu kỳ thì phải chuyển số đầu kỳ đó sang cột tồn cuối kỳ .Nhờ bạn sửa giúp. Chúc bạn sức khỏe, vui ve. Cám Ơn
 
Upvote 0
. . . .Nhưng không biết sao ở cột tồn cuối kỳ nếu mã nào có phát sinh số liệu thì nó mới chuyển số tồn,những mặt hàng nào không có PS thi nó không chuyển, trong khi có một số mặt hàng không có phát sinh nhưng có tồn đầu kỳ thì phải chuyển số đầu kỳ đó sang cột tồn cuối kỳ .Nhờ bạn sửa giúp. Chúc bạn sức khỏe, vui ve. Cám Ơn

Bạn thêm dòng lệnh này vô bên trên dòng End If vừa mới thêm vào, nha

Cells(r0, "C").End(xlUp).Offset(, 8).Resize(, 2).Value = sRng.Offset(, 4).Resize(, 2).Value

(Nhưng với 1 iêu cầu là trường 'ĐVT' của trang 'Ma' luôn có đủ dữ liệu.)
 
Upvote 0
Cám ơn bạn! Sau khi được bạn giúp và "lượm lặt" trên diễn đàn mình đã "chắp vá" được một chiếc "áo rách " dùng đỡ cho mùa đông ,mình đưa lên diễn đànđể các bạn cùngtham khảo. Do không phải dân chuyên về VBA nên code trong file còn sơ khai và lũng củng lém nên file còn khá nặng, đây chỉ là ý tưởng thôi, nhờ các bác cao thủ nếu có thể chỉnh sửa dùm để file chạy nhẹ hơn. chúc cả nhà vui vẻ
 

File đính kèm

Upvote 0
Quả là công trình đồ sộ chứ chẳng chơi!

Nhưng không tránh khỏi còn lỗi; Mình fát hiện ra sơ bộ 2 lỗi,. . .

Chắc fần trên bạn vừa hỏi là fần cuối cùng để hoàn thành tác fẩm?

Có lẻ vầy đi:

Bạn tách ra từng file nhỏ theo từng công việc & đưa lên; Chắc sẽ có người giúp bạn tu sửa cho tác fẩm diêm dúa & đẹp đẽ hơn;

Bạn nghĩ sao?
 
Upvote 0
đúng vậy. như mình đã nói ở trên mình chưa bao giờ học vba cả chỉ mới mày mò đây thôi chủ yếu tải file mẫu về xem bắt trước thôi,nên bạn có phát hiện sai chỗ nào góp ý dùm để fie chay ok hơn. Cámơn
 
Upvote 0
Bạn thử lấy cập macro này thay cho macro PN() của bạn xem sao

. . . nên bạn có phát hiện sai chỗ nào góp ý dùm để fie chay ok hơn. Cámơn

PHP:
Sub PN()
 Dim i, HC, t As Long
 Dim TKNo As Range
 Dim TK As String
 Sheets("pn").Select
 Range("A13:J65536").Clear
 Application.Calculation = xlCalculationManual
 Application.ScreenUpdating = False
    
 TK = Range("D6").Value
 HC = Sheets("PHATSINH").Range("b60000").End(xlUp).Row
 i = 12:                        t = 0
 For Each TKNo In Sheets("PHATSINH").Range("b7:b" & HC)
    If TKNo.Offset(0, 3) = TK Then
        i = i + 1:                  t = t + 1
        Range("A" & i) = t
        Range("B" & i) = TKNo.Offset(0, 1)
        Range("C" & i) = TKNo
        Range("D" & i) = TKNo.Offset(0, 2)
        Range("E" & i) = TKNo.Offset(0, 14)
        Range("F" & i) = TKNo.Offset(0, 14)
        Range("g" & i) = TKNo.Offset(0, 17)
        Range("H" & i).Formula = "=rc[-1]*rc[-2]"
    End If
 Next TKNo
 If i = 13 Then
    Set TKNo = Nothing
    Range("g13:h" & i).NumberFormat = "###,00"
    Range("A13 :h" & i).Font.Size = 11
    Range("A13:h" & i).VerticalAlignment = xlCenter
    Range("A13:h" & i + 1).WrapText = True
    Range("A13:h" & i + 7).Font.Name = "arial"
    Range("A" & i + 1 & ":h" & i + 7).Font.ColorIndex = 5
    Range("A" & i + 1 & ":h" & i + 1).Font.Bold = True
    Range("A" & i + 1 & ":h" & i + 1).Interior.ColorIndex = 20
    Range("B" & i + 2).Value = "=doc & vnd(r[-1]c[6])"
    Range("B" & i + 2).Font.Italic = True
    Range("B" & i + 2).Font.Name = "VNI-TIMES"
    Range("E" & i + 4).Value = Sheets("THONGTIN").Range("A22").Value
    Range("B" & i + 3).Value = Sheets("THONGTIN").Range("A14")
    Range("B" & i + 5).Value = Sheets("THONGTIN").Range("A15")
    Range("C" & i + 5).Value = Sheets("THONGTIN").Range("A19")
    Range("E" & i + 5).Value = Sheets("THONGTIN").Range("A16")
    Range("G" & i + 5).Value = Sheets("THONGTIN").Range("A17")
    Range("b" & i + 1).Value = Sheets("THONGTIN").Range("A20")
    Range("H" & i + 1).Formula = "=round(SUM(R13C:R" & i & "C),0)"
    Range("b" & i + 1).HorizontalAlignment = xlCenter
    Range("B" & i + 2 & ":h" & i + 2).MergeCells = True
    Range("B" & i + 2 & ":h" & i + 2).WrapText = True
    Range("B" & i + 2 & ":h" & i + 2).VerticalAlignment = xlCenter
    Range("b" & i + 1).HorizontalAlignment = xlCenter
    Range("C13:f" & i + 1).HorizontalAlignment = xlCenter
    Range("g" & i + 5 & ":h" & i + 5).MergeCells = True
    Range("g" & i + 5 & ":h" & i + 5).HorizontalAlignment = xlCenter
    Range("e" & i + 4 & ":h" & i + 4).HorizontalAlignment = xlCenter
    Range("e" & i + 4 & ":h" & i + 4).MergeCells = True
             
    FormatLines Range("A13:h" & i)
'    Range("A13:h" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous 7'
'    Range("A13:h" & i).Borders(xlEdgeRight).LineStyle = xlContinuous 10'
'    Range("A13:h" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous 9'
'    Range("A13:h" & i).Borders(xlEdgeTop).LineStyle = xlContinuous 8'
'    Range("A13:h" & i).Borders(xlInsideVertical).LineStyle = xlContinuous 11'
    FormatLines Range("A13:h" & i + 1)
         
 End If
 If i > 13 Then
    Set TKNo = Nothing
    Range("g13:h" & i).NumberFormat = "###,00"
    Range("A13 :h" & i).Font.Size = 11
    Range("A13:h" & i).VerticalAlignment = xlCenter
    Range("A13:h" & i + 1).WrapText = True
    Range("A13:h" & i + 7).Font.Name = "arial"
    Range("A" & i + 1 & ":h" & i + 7).Font.ColorIndex = 5
    Range("A" & i + 1 & ":h" & i + 1).Font.Bold = True
    Range("A" & i + 1 & ":h" & i + 1).Interior.ColorIndex = 20
    Range("B" & i + 2).Value = "=doc & vnd(r[-1]c[6])"
    Range("B" & i + 2).Font.Italic = True
    Range("B" & i + 2).Font.Name = "VNI-TIMES"
    Range("E" & i + 4).Value = Sheets("THONGTIN").Range("A22").Value
    Range("B" & i + 3).Value = Sheets("THONGTIN").Range("A14")
    Range("B" & i + 5).Value = Sheets("THONGTIN").Range("A15")
    Range("C" & i + 5).Value = Sheets("THONGTIN").Range("A19")
    Range("E" & i + 5).Value = Sheets("THONGTIN").Range("A16")
    Range("G" & i + 5).Value = Sheets("THONGTIN").Range("A17")
    Range("b" & i + 1).Value = Sheets("THONGTIN").Range("A20")
    Range("H" & i + 1).Formula = "=round(SUM(R13C:R" & i & "C),0)"
    Range("b" & i + 1).HorizontalAlignment = xlCenter
    Range("B" & i + 2 & ":h" & i + 2).MergeCells = True
    Range("B" & i + 2 & ":h" & i + 2).WrapText = True
    Range("B" & i + 2 & ":h" & i + 2).VerticalAlignment = xlCenter
    Range("b" & i + 1).HorizontalAlignment = xlCenter
    Range("C13:f" & i + 1).HorizontalAlignment = xlCenter
    Range("g" & i + 5 & ":h" & i + 5).MergeCells = True
    Range("g" & i + 5 & ":h" & i + 5).HorizontalAlignment = xlCenter
    Range("e" & i + 4 & ":h" & i + 4).HorizontalAlignment = xlCenter
    Range("e" & i + 4 & ":h" & i + 4).MergeCells = True
                      
    FormatLines Range("A13:h" & i)
    Range("A13:h" & i).Borders(xlInsideHorizontal).LineStyle = xlDot '12'
    
    FormatLines Range("A13:h" & i + 1)
                                       
 End If
 If i < 13 Then
    MsgBox " Um! khong phat sinh so phieu tren!", , "thongbao": Exit Sub
 End If
 Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
                   
End Sub

Mã:
[B]
Sub FormatLines(Rng As Range)[/B]
 Dim jJ As Byte
 
 For jJ = 7 To 11
    Rng.Borders(jJ).LineStyle = xlContinuous
 Next jJ[B]
End Sub[/B]
 
Upvote 0
uhm! mình không để ý code dưới . hay đấy mình học them được một chiêu nữa. cámơn bạn
 
Upvote 0
Thêm 1 macro nữa cho bạn trước khi đi ngủ

PHP:
Option Explicit
Const r0 As Long = 4007
Private Sub CommandButton1_Click()
 Dim Sh As Worksheet, Cls As Range, Rng As Range, sRng As Range
 Dim MyAdd As String
 Dim HC As Long
 
 With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False
 End With
 Set Sh = ThisWorkbook.Worksheets("Ma")
 Rows("8:" & r0).Hidden = False
 Rows("8:" & r0).Clear
 Set Rng = Sh.Range(Sh.[A5], Sh.[A5].End(xlDown))
 
 For Each Cls In Sh.Range(Sh.[p3], Sh.[p3].End(xlDown))
    With Cells(r0, "A").End(xlUp).Offset(1)
        .Resize(, 2).Value = Cls.Resize(, 2).Value
        .Resize(, 13).Interior.ColorIndex = 20
        .Resize(, 13).Font.Bold = True
        .Resize(, 13).Font.ColorIndex = 5
    End With
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address
        Do
            If Left(sRng.Value, 3) = Cls.Value Then
                sRng.Resize(, 3).Copy Destination:=Cells(r0, "A").End(xlUp).Offset(1)
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
    End If
  Next Cls
  
  Set Sh = ThisWorkbook.Sheets("LAILO")
  HC = Sh.Range("A60000").End(xlUp).Row
  
'  With Rng'
    Sh.Range("D8:M" & HC + 1).NumberFormat = "#,##0"
    Sh.Range("A8:M" & HC + 10).Font.Name = "arial"
    Sh.Range("A8:M" & HC).Font.ColorIndex = 11
    Sh.Range("A8:M" & HC).Font.Size = 11
    Sh.Range("A8:M" & HC).VerticalAlignment = xlCenter
    Sh.Range("A" & HC + 1 & ":m" & HC + 1).HorizontalAlignment = xlCenter
    Sh.Range("A" & HC + 1 & ":m" & HC + 1).Font.Bold = True
    Sh.Range("A" & HC + 1 & ":m" & HC + 1).Font.Size = 11
    Sh.Range("A" & HC + 1 & ":m" & HC + 1).Interior.ColorIndex = 20
    Sh.Range("A" & HC + 1 & ":m" & HC + 8).Font.ColorIndex = 5
    ActiveSheet.Range("B" & HC + 1).Value = Sheets("temp").Range("a1")
    Sh.Range("b" & HC + 4) = Sheets("thongtin").Range("a15").Value
    Sh.Range("f" & HC + 4) = Sheets("thongtin").Range("a16").Value
    Sh.Range("k" & HC + 4) = Sheets("thongtin").Range("a17").Value
    Sh.Range("k" & HC + 3) = Sheets("thongtin").Range("a23").Value
    Sh.Range("k" & HC + 4 & ":m" & HC + 4).MergeCells = True
    Sh.Range("k" & HC + 3 & ":m" & HC + 3).MergeCells = True
    Sh.Range("k" & HC + 4 & ":m" & HC + 4).HorizontalAlignment = xlCenter
    Sh.Range("k" & HC + 3 & ":m" & HC + 3).HorizontalAlignment = xlCenter
    Range("d8:d" & HC).FormulaR1C1 = "=SUMPRODUCT((maps=RC[-3])*(ngayct>=R3C3)*(ngayct<=R3C7)*(lgBAN))"
    Range("e8:e" & HC).FormulaR1C1 = "=IF(RC[-1]=0,0,RC[1]/RC[-1])"
    Range("F8:F" & HC).FormulaR1C1 = "=SUMPRODUCT((maps=RC[-5])*(ngayct>=R3C3)*(ngayct<=R3C7)*(TIENBAN))"
    Range("j8:j" & HC).FormulaR1C1 = "=RC[-4]-RC[-3]-RC[-2]-RC[-1]"
    Range("K8:K" & HC).FormulaR1C1 = "=SUMPRODUCT((maps=RC[-10])*(ngayct>=R3C3)*(ngayct<=R3C7)*(TIENxuat))"
    Range("L8:L" & HC).FormulaR1C1 = "=MAX(RC[-2]-RC[-1],0)"
    Range("M8:M" & HC).FormulaR1C1 = "=MAX(RC[-2]-RC[-3],0)"
    'Tinh so du cuoi ky'
    Range("f" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("g" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("h" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)" 'doc so phat sinh trong ky'
    Range("i" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("j" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("k" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("L" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    Range("M" & HC + 1).Value = "=SUM(R7C:R" & HC & "C)"
    'Range("E7:K217").Value = Range("E7:K217").Value'
' End With'
' With Rng'
    FormatLines Sh.Range("A8:M" & HC)
    
    Sh.Range("A8:M" & HC).Borders(xlInsideHorizontal).LineStyle = xlDot
    FormatLines Sh.Range("A" & HC + 1 & ":M" & HC + 1)
    
'    Sh.Range("A" & HC + 1 & ":M" & HC + 1).Borders(xlEdgeLeft).LineStyle = xlContinuous'
'    Sh.Range("A" & HC + 1 & ":M" & HC + 1).Borders(xlEdgeRight).LineStyle = xlContinuous'
'    Sh.Range("A" & HC + 1 & ":M" & HC + 1).Borders(xlEdgeBottom).LineStyle = xlContinuous'
'    Sh.Range("A" & HC + 1 & ":M" & HC + 1).Borders(xlEdgeTop).LineStyle = xlContinuous'
'    Sh.Range("A" & HC + 1 & ":M" & HC + 1).Borders(xlInsideVertical).LineStyle = xlContinuous'
    
 'End With'
 MsgBox "Da lap xong", , "thongbao"

 Application.Calculation = xlCalculationAutomatic
    
End Sub
 
Upvote 0
uhm! làm vậy nhìn code do ruom ra, hay lém. Nhưng không hiểu sao file cũng không nhiều công thức lắm mà nó chạy cùng hơi rùa hả bạn?
 
Upvote 0
Giờ mình hướng dẫn bạn từ xa, bạn tự sửa 1 macro để bạn tạo dần thói quen tốt

Macro đó của bạn có tên là Public Sub Lapsoct()

Đầu tiên bạn nên thêm dòng lệnh này bên trên dòng trên: option explicit
Tên macro nên đổi thành LapSoCT ;

Sau khi bạn thêm dòng lệnh trên, giờ bạn bấm vô trình biên dịch Compile VBAProject có trên menu Debug VBE sẽ đưa ta đến những lỗi biến chưa khai báo;

Hễ biến nào ta chưa khai báo, thì nên khai báo thêm vô tại 3 dòng lệnh có từ khoá Dim; Thực hiện việc này cho đến khi trình biên dịch không còn báo lỗi;

Sau tiếp, ta nên chép 3 dòng lệnh chứa Dim này lên ngay dưới tên macro;

Trong các dòng lệnh của bạn có hằng hà cụm từ "Sheets("CHITIET")." mà ta có thể bỏ hầu hết chúng, chỉ cần chỉnh dòng lệnh
Mã:
 Sheets("CHITIET").Range("A13").Select
thành dòng lệnh
PHP:
Sheets("CHITIET").Select

Kể từ sau dòng lệnh này, ta có toàn quyền bỏ cụm từ nêu trên;

Bạn cũng đã tực hiện việc thụt đầu dòng các dòng lệnh; Nhưng cách của bạn chỉ tổ thêm rối mắt.

Bạn thấy trên thanh công cụ VBE có ngăn hơi lớn ghi vị trí c on trỏ không?
(Như Ln 7, Col 35,. . . ); Bạn nên xài cái này để giúp bạn đỡ sai sót khi viết các câu lệnh;
Iêu cầu khắc khe của mình là For jJ . . . . thì fải có Next jJ
Điều này đôi lúc rất có lợi, 1 khi ta muốn xài biến Jj sau đó vào việc khác; (Khi thấy câu lệnh Next jJ là ta chắc rằng biến Jj đã hết xài bên trên)
Ta cần làm sao cho 'F' trong câu lệnh For Jj= 9 to 13 luôn trùng cột với 'N' trong câu Next jJ của 1 vòng lặp cụ thể nào đó.
Bạn hãy thực hiện các việc này tự ên nếu ưng cái bụng;
Ta sẽ tiếp 1 khi bạn sẽ đưa nội dung macro này lên sau khi đã chỉnh sửa!

Tạm biệt!
 
Chỉnh sửa lần cuối bởi điều hành viên:
Upvote 0
Như vậy đúng không bạn?
Option Explicit
Public Sub LapSoCT()
Dim i, HC, m, x, y, j, z As Long
Dim TKNo As Range
Dim TK As String
Sheets("CHITIET").Select
Range("A13:o65536").Clear
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
TK = Left(Sheets("CHITIET").Range("b8"), 20)
m = Len(Sheets("CHITIET").Range("b8"))
HC = Sheets("PHATSINH").Range("b60000").End(xlUp).Row
i = 12
For Each TKNo In Sheets("PHATSINH").Range("B8:B" & HC)
If TKNo.Offset(0, 7) <= Sheets("chitiet").Range("h4").Value And Len(TKNo) > 3 Then
If Left(TKNo, m) = TK Then
If TKNo.Offset(0, 7).Value < Sheets("CHITIET").Range("e4").Value Then ' Ngay nho hon
x = x + TKNo.Offset(0, 20).Value
j = j + TKNo.Offset(0, 14).Value
Else ' Phat Sinh
i = i + 1
Range("A" & i) = TKNo.Offset(0, 3)
Range("B" & i) = TKNo.Offset(0, 4)
Range("C" & i) = TKNo.Offset(0, 7)
Range("D" & i) = TKNo.Offset(0, 11)
Range("E" & i) = TKNo.Offset(0, 12)
Range("F" & i) = TKNo.Offset(0, 2)
Range("G" & i) = TKNo.Offset(0, 17)
Range("H" & i) = TKNo.Offset(0, 18)
Range("I" & i) = TKNo.Offset(0, 14)
Range("J" & i) = TKNo.Offset(0, 20)
Range("K" & i) = TKNo.Offset(0, 15)
Range("L" & i) = TKNo.Offset(0, 21)
Range("m" & i).FormulaR1C1 = "=IF(RC[-4]+RC[-2]=0,0,R12C+SUM(R13C[-4]:R" & i & "C[-4])-SUM(R13C[-2]:R" & i & "C[-2]))"
Range("N" & i).FormulaR1C1 = "=IF(RC[-4]+RC[-2]=0,0,R12C+SUM(R13C[-4]:R" & i & "C[-4])-SUM(R13C[-2]:R" & i & "C[-2]))"
End If
End If
End If
If TKNo.Offset(0, 7) <= Sheets("chitiet").Range("h4").Value And Len(TKNo) > 3 Then
If Left(TKNo, m) = TK Then
If TKNo.Offset(0, 7).Value < Sheets("CHITIET").Range("e4").Value Then ' Ngay nho hon
y = y + TKNo.Offset(0, 21).Value
z = z + TKNo.Offset(0, 15).Value
End If
End If
End If
Next TKNo
Sheets("CHITIET").Range("M12").Value = WorksheetFunction.SumIf(Sheets("ma").Range("A5:A20000"), Sheets("CHITIET").Range("B8"), Sheets("MA").Range("e5:e20000")) + j - z
Sheets("CHITIET").Range("N12").Value = WorksheetFunction.SumIf(Sheets("MA").Range("A5:A20000"), Sheets("CHITIET").Range("B8"), Sheets("MA").Range("f5:f20000")) + x - y
Set TKNo = Nothing
If i = 13 Then
Range("C13", "C" & i).NumberFormat = "dd/mm/yy"
Range("G13:N" & i + 1).NumberFormat = "#,##0"
Range("A13 :O" & i).Font.Size = 11
Range("A" & i + 1 & ":O" & i + 7).Font.Size = 12
Range("A13:O" & i).VerticalAlignment = xlCenter
Range("A13:O" & i).WrapText = True
Range("A13:O" & i + 10).Font.Name = "Arial"
Range("I" & i + 1 & ":l" & i + 1).Formula = "=SUM(R13C:R" & i & "C)"
Range("m" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"
Range("N" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"
Range("D" & i + 1).Value = Sheets("thongtin").Range("a30")
Range("D" & i + 1).HorizontalAlignment = xlCenter
Range("A13:B" & i + 1).HorizontalAlignment = xlCenter
Range("E13:f" & i + 1).HorizontalAlignment = xlCenter
Range("A" & i + 1 & ":o" & i + 7).Font.ColorIndex = 5
Range("A" & i + 1 & ":O" & i + 7).Font.Bold = True
Range("A" & i + 1 & ":O" & i + 1).Interior.ColorIndex = 20
Range("A" & i + 1 & ":O" & i + 1).Font.ColorIndex = 5
Range("k" & i + 3).Value = Sheets("thongtin").Range("a23")
Range("k" & i + 3 & ":o" & i + 3).MergeCells = True
Range("k" & i + 3 & ":o" & i + 3).HorizontalAlignment = xlCenter
Range("k" & i + 4).Value = Sheets("thongtin").Range("a17")
Range("k" & i + 3).Font.Italic = True
Range("k" & i + 4 & ":o" & i + 4).MergeCells = True
Range("k" & i + 4 & ":o" & i + 4).HorizontalAlignment = xlCenter
Range("c" & i + 4).Value = Sheets("thongtin").Range("a15")
Range("g" & i + 4).Value = Sheets("thongtin").Range("a16")

FormatLines Range("A13:o" & i)
' Range("A13:o" & i).Borders(xlEdgeLeft).LineStyle = xlContinuous 7'
' Range("A13:o" & i).Borders(xlEdgeRight).LineStyle = xlContinuous 10'
' Range("A13:o" & i).Borders(xlEdgeBottom).LineStyle = xlContinuous 9'
' Range("A13:o" & i).Borders(xlEdgeTop).LineStyle = xlContinuous 8'
' Range("A13:o" & i).Borders(xlInsideVertical).LineStyle = xlContinuous 11'
FormatLines Range("A13:o" & i + 1)
End If
If i > 13 Then
Range("C13", "C" & i).NumberFormat = "dd/mm/yy"
Range("G13:N" & i + 1).NumberFormat = "#,##0"
Range("A13 :O" & i).Font.Size = 11
Range("A" & i + 1 & ":O" & i + 7).Font.Size = 12
Range("A13:O" & i).VerticalAlignment = xlCenter
Range("A13:O" & i).WrapText = True
Range("A13:O" & i + 10).Font.Name = "Arial"
Range("I" & i + 1 & ":l" & i + 1).Formula = "=SUM(R13C:R" & i & "C)"
Range("m" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"
Range("N" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"
Range("D" & i + 1).Value = Sheets("thongtin").Range("a30")
Range("D" & i + 1).HorizontalAlignment = xlCenter
Range("A13:B" & i + 1).HorizontalAlignment = xlCenter
Range("E13:f" & i + 1).HorizontalAlignment = xlCenter
Range("A" & i + 1 & ":o" & i + 7).Font.ColorIndex = 5
Range("A" & i + 1 & ":O" & i + 7).Font.Bold = True
Range("A" & i + 1 & ":O" & i + 1).Interior.ColorIndex = 20
Range("A" & i + 1 & ":O" & i + 1).Font.ColorIndex = 5
Range("k" & i + 3).Value = Sheets("thongtin").Range("a23")
Range("k" & i + 3 & ":o" & i + 3).MergeCells = True
Range("k" & i + 3 & ":o" & i + 3).HorizontalAlignment = xlCenter
Range("k" & i + 4).Value = Sheets("thongtin").Range("a17")
Range("k" & i + 3).Font.Italic = True
Range("k" & i + 4 & ":o" & i + 4).MergeCells = True
Range("k" & i + 4 & ":o" & i + 4).HorizontalAlignment = xlCenter
Range("c" & i + 4).Value = Sheets("thongtin").Range("a15")
Range("g" & i + 4).Value = Sheets("thongtin").Range("a16")
FormatLines Range("A13:o" & i)
Range("A13:o" & i).Borders(xlInsideHorizontal).LineStyle = xlDot '12'
FormatLines Range("A13:o" & i + 1)
End If
If i < 13 Then
MsgBox " Um! khong phat sinh !", , "thongbao": Exit Sub
End If
MsgBox " Da lap xong ", , "thongbao"
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
Sub FormatLines(Rng As Range)
Dim jJ As Byte

For jJ = 7 To 11
Rng.Borders(jJ).LineStyle = xlContinuous
Next jJ
End Sub
 
Upvote 0
Chúng ta tiếp tục, nha

Còn 2 dòng lệnh dài nhất kia, ta có thể nên làm thế này

PHP:
 '  *       *       *       *'
 Dim Sh As Worksheet, WF As Object
 Set Sh = ThisWorkbook.Worksheets("Ma")
 Set WF = Application.WorksheetFunction
 With Sheets("CHITIET")
    .Range("M12").Value = WF.SumIf(Sh.Range("A5:A20 000"), .Range("B8"), Sh.Range("e5:e20000")) + j - z
    .Range("N12").Value = WF.SumIf(Sh.Range("A5:A20 000"), .Range("B8"), Sh.Range("f5:f20000")) + x - y
 End With
 Set WF = Nothing:          Set Sh = Nothing
  '  *       *       *       *'

Đó là những cách ta làm ngắn câu lệnh;
Giờ mình vẽ cách để bạn gộp dòng lệnh, như sau:

Bạn có đoạn mã:
Mã:
                Range("A" & i) = TKNo.Offset(0, 3)[COLOR=#0000ff] '*'[/COLOR]
                Range("B" & i) = TKNo.Offset(0, 4)[COLOR=#0000ff] '*'[/COLOR]
                Range("C" & i) = TKNo.Offset(0, 7)
                Range("D" & i) = TKNo.Offset(0, 11) '*'
                Range("E" & i) = TKNo.Offset(0, 12) '*'
                Range("F" & i) = TKNo.Offset(0, 2)
                Range("G" & i) = TKNo.Offset(0, 17) '*'
                Range("H" & i) = TKNo.Offset(0, 18) '*'
Thực ra 2 dòng lệnh theo từng cặp có đánh dấu có thể hoàn toàn gộp lại nhờ fương thức Resize(x,y)
Ví dụ:
PHP:
                   Range("D" & i).Resize(,2) = TKNo.Offset(0, 11).Resize(,2) '*'


Còn đây là bài tập cho bạn:

Hãy gộp 2 dòng lệnh sau đây của bạn thành 1:

Mã:
    Range("m" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"      '*'
    Range("N" & i + 1).Formula = "=R12C+RC[-4]-RC[-2]"      '*'


Chúc thành công!
 
Upvote 0
Cám ơn bạn! Sau khi được bạn giúp và "lượm lặt" trên diễn đàn mình đã "chắp vá" được một chiếc "áo rách " dùng đỡ cho mùa đông ,mình đưa lên diễn đànđể các bạn cùngtham khảo. Do không phải dân chuyên về VBA nên code trong file còn sơ khai và lũng củng lém nên file còn khá nặng, đây chỉ là ý tưởng thôi, nhờ các bác cao thủ nếu có thể chỉnh sửa dùm để file chạy nhẹ hơn. chúc cả nhà vui vẻ

Mình muốn chỉnh sửa, xóa nhưng danh mục không cần thiết thì làm sao ? để phù hợp với ngành nghề kd của mình
 
Upvote 0
bạn muốn xóa danh mục nào? có thể đưa file lên đi mọi người cùng nghiên cứu
 
Upvote 0
Cám ơn bạn! Sau khi được bạn giúp và "lượm lặt" trên diễn đàn mình đã "chắp vá" được một chiếc "áo rách " dùng đỡ cho mùa đông ,mình đưa lên diễn đànđể các bạn cùngtham khảo. Do không phải dân chuyên về VBA nên code trong file còn sơ khai và lũng củng lém nên file còn khá nặng, đây chỉ là ý tưởng thôi, nhờ các bác cao thủ nếu có thể chỉnh sửa dùm để file chạy nhẹ hơn. chúc cả nhà vui vẻ

Mình sau khi lượp lặt chỉnh sửa cho phù hợp với cv của mình, Nhờ bạn viết thành code bảng chạy như menu trong file của bạn dùm mình với!!!!!!!!!
 

File đính kèm

Upvote 0
Bạn chuển file sang EXcell 2003 đi máy mình không đọc được
 
Upvote 0
Thu mau XN hang

Chào các bạn ! mình đang gặp chút vấn đề trong file nhập xuất tồn kho, vì file có rất nhiều công thức nên rất nặng, mình đang chuyển qua sử dụng bằng vba nhưng mà chưa biết viết code cho bảng tổng hợp NXT cónhiềunhómhàng như thế nào. Rất mong các bạn giúp đỡ . Cám ơn nhiều.


Gui ban, ben minh cung phai xuat nhap hang, co mau nay ban thu xem sao nhe.
 

File đính kèm

Upvote 0
/-)ề xuất gộp 2 macro


Mình thấy 2 macro PN() & PX() cuả bạn rất giống nhau, như 2 anh em sinh đôi;

Nên đề xuất việc gộp chung chúng trong 1 macro, giống như ta đặt thừa số chung vậy mà;

Bạn xem cách mình đưa 2 macro lên trang tính để so sánh (file kèm theo) & cho í kiến nha.

(hờ tin từ bạn.
 

File đính kèm

Upvote 0
Mình vẫn chưa hiểu ,bạn có thể gộp chung code để mình sử dụng 2 phiếu 1 code được hông?
 
Upvote 0
Là vậy đó bạn;

Mình vẫn chưa hiểu ,bạn có thể gộp chung code để mình sử dụng 2 phiếu 1 code được hông?

Thay vì, như hiện nay bạn có
Mã:
Sub PN()
' . . . . . . '
End Sub



Mã:
Sub PX()
' . . . . . . '
End Sub

Thì giờ ta có đến 3, như vầy

Mã:
Sub PN()
  GPE , ThSoN, ThSo2
End Sub

Mã:
Sub PX()
  GPE , ThSoX, ThSo2
End Sub

PHP:
Sub GPE(ThSo1 As Type, ThSo2 As Type)

'. . . . . . '
'Các dòng lệnh gộp'
'. . . . . . '
End Sub

Nhưng bạn cần khẳng định 2 macro nêu trên trang tính đã đúng chưa cái đã!

Chờ tin từ bạn.
 
Upvote 0
Mình đã thủ nhiều lần rùi và hiện đang áp dụng nó chạy đúng rùi. nhưng mình không biết cách của bạn làm thì có lợi gì hơn cách cũ , chương trình có chạy nhanh hơn không ? bạn có thể giải thích cho mình hiểu với mình mớilàm quen VBA đây thôi.
Chờ tin của bạn . thân
 
Upvote 0
(1) Mình thủ nhiều lần và hiện đang áp dụng nó chạy đúng rùi.

(2) Nhưng mình không biết cách của bạn làm thì có lợi gì hơn cách cũ , chương trình có chạy nhanh hơn không ? bạn có thể giải thích cho mình hiểu với thân

(1) Í mình là 2 macro mà mình đã sửa lại & chép chúng lên trang tính trong file kèm theo đó; Bạn coi lại dùm đi.

(2) Rất nhiều trường hợp file sẽ nhẹ đi ít nhiều & nhanh hơn;
2uan trọng là bạn sẽ tiếp cận được 1 fương thức khác hơn & bảo trì sẽ dễ hơn.

(*) /(/ếu bạn cần được chứng minh, thì bạn trích ra & gởi các trang tính liên quan đến fiếu nhập / xuất để bạn mục kỉnh. . . .

Thân.
 
Lần chỉnh sửa cuối:
Upvote 0
File đã chỉnh sửa

Cám ơn bạn . mình gửi file đã chỉnh sửa một số lỗi và các macro theo hướng dẫn của các bạn trên diễn đàn để chúng ta cùng nghiên cứu học hỏi tiếp nha. thật sự mỗi một hướng dẫn của các bạn rất hứu ích đối với mình để mình làm các chương trình khác ứng dụng cho công việc của mình . cám ơn cả nhà .http://www.mediafire.com/?p9tu4enuw24mroz
 
Upvote 0
Đây là 2 macro cha & mẹ & 1 macro con ( vừa cả & vừa là út)

Cám ơn bạn . mình gửi file đã chỉnh sửa một số lỗi và các macro theo hướng dẫn của các bạn trên diễn đàn để chúng ta cùng nghiên cứu học hỏi tiếp nha. thật sự mỗi một hướng dẫn của các bạn rất hứu ích đối với mình để mình làm các chương trình khác ứng dụng cho công việc của mình . cám ơn cả nhà

Macro cha có nội dung là:

Mã:
 Option Explicit
[B]Sub pn()[/B]
   FieuNhapXuat
[B]End Sub[/B]

Macro mẹ có vẻ dài hơn chút:

Mã:
 [B] Sub PX()[/B]
     FieuNhapXuat False
 [B]End Sub[/B]


Macro con:

PHP:
Sub FieuNhapXuat(Optional Nhap As Boolean = True)
 Dim I, HC, T As Long, Id As Long
 Dim TKNo As Range
 Dim TK As String, ShName As String
 
 If Nhap Then ShName = "pn" Else ShName = "px"              '<=|'
 Sheets(ShName).Select:                     TK = Range("D6")    '*'
 Range("A13:J65536").Clear
 Application.Calculation = xlCalculationManual
 Application.ScreenUpdating = False
 HC = Sheets("PHATSINH").Range("b60000").End(xlUp).Row
 I = 12:                                    T = 0
 For Each TKNo In Sheets("PHATSINH").Range("b7:b" & HC)
    If TKNo.Offset(0, IIf(Nhap, 3, 4)) = TK Then            '<=|'
        I = I + 1:                          T = T + 1
        Range("A" & I) = T:                 Range("C" & I) = TKNo
        Range("B" & I) = TKNo.Offset(0, 1)
        Range("D" & I) = TKNo.Offset(0, 2)
        Range("E" & I) = TKNo.Offset(0, 14)     '?'
        Range("F" & I) = TKNo.Offset(0, 14)     '?'
        Range("g" & I) = TKNo.Offset(0, 17)
        Range("H" & I).Formula = "=rc[-1]*rc[-2]"
    End If
 Next TKNo
 Set TKNo = Nothing          '<=| Lenh Này Là Thuà'
 If I = 13 Then
    Range("g13:h" & I).NumberFormat = "###,00"
    Range("A13 :h" & I).Font.Size = 11
    Range("A13:h" & I).VerticalAlignment = xlCenter
    Range("A13:h" & I + 1).WrapText = True
    Range("A13:h" & I + 7).Font.Name = "arial"
    Range("A" & I + 1 & ":h" & I + 7).Font.ColorIndex = 5
    Range("A" & I + 1 & ":h" & I + 1).Font.Bold = True
    Range("A" & I + 1 & ":h" & I + 1).Interior.ColorIndex = 20
    Range("B" & I + 2).Value = "=doc & vnd(r[-1]c[6])"
    Range("B" & I + 2).Font.Italic = True
    Range("B" & I + 2).Font.Name = "VNI-TIMES"
    
    If Nhap Then Id = 22 Else Id = 21                   '<=|'
    Range("E" & I + 4).Value = Sheets("THONGTIN").Range("A" & Id).Value
    Range("B" & I + 3).Value = Sheets("THONGTIN").Range("A14")
    Range("B" & I + 5).Value = Sheets("THONGTIN").Range("A15")
    
    If Nhap Then Id = 19 Else Id = 18                  '<=|'
    Range("C" & I + 5).Value = Sheets("THONGTIN").Range("A" & Id)
    Range("E" & I + 5).Value = Sheets("THONGTIN").Range("A16")
    Range("G" & I + 5).Value = Sheets("THONGTIN").Range("A17")
    Range("b" & I + 1).Value = Sheets("THONGTIN").Range("A20")
    Range("H" & I + 1).Formula = "=round(SUM(R13C:R" & I & "C),0)"
    Range("b" & I + 1).HorizontalAlignment = xlCenter   '**'
    Range("B" & I + 2 & ":h" & I + 2).MergeCells = True
    Range("B" & I + 2 & ":h" & I + 2).WrapText = True
    Range("B" & I + 2 & ":h" & I + 2).VerticalAlignment = xlCenter
'    Range("b" & I + 1).HorizontalAlignment = xlCenter'
    Range("C13:f" & I + 1).HorizontalAlignment = xlCenter
    Range("g" & I + 5 & ":h" & I + 5).MergeCells = True
    Range("g" & I + 5 & ":h" & I + 5).HorizontalAlignment = xlCenter
    Range("e" & I + 4 & ":h" & I + 4).HorizontalAlignment = xlCenter
    Range("e" & I + 4 & ":h" & I + 4).MergeCells = True
 'Goi Macro Cho 5 Dòng Lenh Này:'
    Range("A13:h" & I).Borders(xlEdgeLeft).LineStyle = xlContinuous     '7'
    Range("A13:h" & I).Borders(xlEdgeRight).LineStyle = xlContinuous    '10'
    Range("A13:h" & I).Borders(xlEdgeBottom).LineStyle = xlContinuous   '9'
    Range("A13:h" & I).Borders(xlEdgeTop).LineStyle = xlContinuous      '8'
    Range("A13:h" & I).Borders(xlInsideVertical).LineStyle = xlContinuous '11'
 'Goi Tiép Macro Cho 5 Dòng Lenh Này:'
    Range("A13:h" & I + 1).Borders(xlEdgeLeft).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeRight).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeBottom).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeTop).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlInsideVertical).LineStyle = xlContinuous
 End If
' Set TKNo = Nothing  <=| Lenh Này Là Thuà'
 If I > 13 Then
    Range("g13:h" & I).NumberFormat = "###,00"
    Range("A13 :h" & I).Font.Size = 11
    Range("A13:h" & I).VerticalAlignment = xlCenter
    Range("A13:h" & I + 1).WrapText = True
    Range("A13:h" & I + 7).Font.Name = "arial"
    Range("A" & I + 1 & ":h" & I + 7).Font.ColorIndex = 5
    Range("A" & I + 1 & ":h" & I + 1).Font.Bold = True
    Range("A" & I + 1 & ":h" & I + 1).Interior.ColorIndex = 20
    Range("B" & I + 2).Value = "=doc & vnd(r[-1]c[6])"
    Range("B" & I + 2).Font.Italic = True
    Range("B" & I + 2).Font.Name = "VNI-TIMES"
    If Nhap Then Id = 22 Else Id = 21                   '<=|'
    Range("E" & I + 4).Value = Sheets("THONGTIN").Range("A" & Id).Value
    Range("B" & I + 3).Value = Sheets("THONGTIN").Range("A14")
    Range("B" & I + 5).Value = Sheets("THONGTIN").Range("A15")
    
    If Nhap Then Id = 19 Else Id = 18                  '<=|'
    Range("C" & I + 5).Value = Sheets("THONGTIN").Range("A" & Id)
    Range("E" & I + 5).Value = Sheets("THONGTIN").Range("A16")
    Range("G" & I + 5).Value = Sheets("THONGTIN").Range("A17")
    Range("b" & I + 1).Value = Sheets("THONGTIN").Range("A20")
    Range("H" & I + 1).Formula = "=round(SUM(R13C:R" & I & "C),0)"
    
    Range("b" & I + 1).HorizontalAlignment = xlCenter
    Range("B" & I + 2 & ":h" & I + 2).MergeCells = True
    Range("B" & I + 2 & ":h" & I + 2).WrapText = True
    Range("B" & I + 2 & ":h" & I + 2).VerticalAlignment = xlCenter
   
    Range("C13:f" & I + 1).HorizontalAlignment = xlCenter
    Range("g" & I + 5 & ":h" & I + 5).MergeCells = True
    Range("g" & I + 5 & ":h" & I + 5).HorizontalAlignment = xlCenter
    Range("e" & I + 4 & ":h" & I + 4).HorizontalAlignment = xlCenter
    Range("e" & I + 4 & ":h" & I + 4).MergeCells = True
 'Goi Macro Cho 5 Dòng Lenh Này:'
    Range("A13:h" & I).Borders(xlEdgeLeft).LineStyle = xlContinuous
    Range("A13:h" & I).Borders(xlEdgeRight).LineStyle = xlContinuous
    Range("A13:h" & I).Borders(xlEdgeBottom).LineStyle = xlContinuous
    Range("A13:h" & I).Borders(xlEdgeTop).LineStyle = xlContinuous
    Range("A13:h" & I).Borders(xlInsideVertical).LineStyle = xlContinuous
    
    Range("A13:h" & I).Borders(xlInsideHorizontal).LineStyle = xlDot
 'Goi Tiép Macro Cho 5 Dòng Lenh Này:'
    Range("A13:h" & I + 1).Borders(xlEdgeLeft).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeRight).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeBottom).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlEdgeTop).LineStyle = xlContinuous
    Range("A13:h" & I + 1).Borders(xlInsideVertical).LineStyle = xlContinuous
 End If
 If I < 13 Then
    MsgBox "Um! khong phat sinh so phieu tren!", , "Thong báo"
    Exit Sub
 End If
 Application.Calculation = xlCalculationAutomatic
 Application.ScreenUpdating = True
                   
End Sub


Bạn chịu khó đối chiếu cái nha.
 
Lần chỉnh sửa cuối:
Upvote 0
Code tính xuất nhập tồn bằng kiểu mảng

Cám ơn bạn . mình gửi file đã chỉnh sửa một số lỗi và các macro theo hướng dẫn của các bạn trên diễn đàn để chúng ta cùng nghiên cứu học hỏi tiếp nha. thật sự mỗi một hướng dẫn của các bạn rất hứu ích đối với mình để mình làm các chương trình khác ứng dụng cho công việc của mình . cám ơn cả nhà .http://www.mediafire.com/?p9tu4enuw24mroz
Link die rồi bạn ơi. up lại file cho mình nghiên cứu với. Ko bít giúp được gì cho bạn ko nhưng theo mình, nếu nhiều mã hàng (hàng ngàn, chục ngàn dòng) thì nên viết code kiểu dữ liệu mảng tốc độ sẽ nhanh hơn.
Bạn xem và tham khảo thử code mình viết coi đúng ý bạn ko nhé.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
cám ơn bạn ! nhưng nó báo lỗi đoạn này bạn xem lại dùm nhé. ReDim arr(1 To UBound(arr1, 1), 1 To 6)
 
Upvote 0
cám ơn bạn ! nhưng nó báo lỗi đoạn này bạn xem lại dùm nhé. ReDim arr(1 To UBound(arr1, 1), 1 To 6)
ah. lỗi này là do vị trí đặt của dòng ReDim arr(1 To UBound(arr1, 1), 1 To 6) này mình để ở phía trên. lúc test xong code mình lại chuyển nó lên ở đầu ở mục khai báo để nhìn cho dễ ai ngờ lại lỗi. Giờ bạn cắt đoạn code đó paste xuống dưới dòng "44 ln" nhé. Mình up lại file đã sữa lại lỗi này.
 

File đính kèm

Upvote 0
Cám ơn bạn! phương pháp củabạn chạy cũng khá nhanh nhưng nó chưa loạc dữ liệu theo ngày được, bạn xem lại dùm nhé để mình học hỏi với!
 
Upvote 0
Cám ơn bạn! phương pháp củabạn chạy cũng khá nhanh nhưng nó chưa loạc dữ liệu theo ngày được, bạn xem lại dùm nhé để mình học hỏi với!
"Lọc dữ liệu theo ngày" ý bạn là mình chọn kỳ để xem báo cáo thì nó sẽ lọc ra đúng ko, vậy thì chỉ cần chọn kỳ xem là tháng là đủ rồi. ví dụ cần xem báo cáo tháng 1 mình chọn tháng 1 sẽ lọc ra toàn bộ phát sinh nhập xuất trong tháng 1 nhưng quan trọng là phải kết chuyển đc số tồn cuối kỳ của tháng trước chuyển qua tháng sau thôi đúng ko. Để mình làm thử.
 
Upvote 0
ĐÚNG VẬY, CHỌN KỲ LÀ THÁNG HOẶC TỪ NGÀY ĐẾN NGÀY CŨNG ĐƯỢC . SẴN BẠN LÀM THỬ MÌNH GỬI FILE CỦA MÌNH LÊN BẠN NGHIÊN CỨU "MỔ SẺ LÀM THỊT NÓ " DÙM MÌNH NẾU CÓ NẤU ĐƯỢC MÓN NÀO NGON CHO MÌNH THƯỞNG THỨC VỚI! HIHI :http://www.4shared.com/rar/rWC-8pfR/QUAN_LY_KHO_NAM_2012__.html
FILE NÀY MỤC ĐẦU KỲ Ở BẢNG TỔNG HỢP MÌNH VẪN CHƯA BIẾT LỌC THEO THỜI GIAN VÌ VẬY MỖI THÁNG PHẢI LÀM RIÊNG 1 FILE CŨNG HƠI BẤT TIỆN,NẾU GIẢI QUYẾT ĐƯỢC VẤNĐỀ NÀY THÌ MỘT NĂM CHỈ CẦN MỘT FILE LÀ ĐỦ. NẾU ĐƯỢC BẠN NGHIÊN CỨU DÙM LUÔN NHE.!
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom