Hoàn thiện dùm em code

  • Thread starter Thread starter NH_DK
  • Ngày gửi Ngày gửi
Liên hệ QC

NH_DK

Let's patience
Tham gia
29/7/10
Bài viết
865
Được thích
1,203
Nghề nghiệp
Kế toán
A/C hoàn thiện dùm em code sao cho khi chọn mã vật tư, hàng hoá thì nó sẽ cập nhật tất cả các thông tin từ Sheet Data sang. Chân báo cáo thì copy từ Sheet Tmp2. Em đã tạo code thế này và nó chỉ giới hạn số dòng thôi. Nếu cập nhật dữ liệu mới thì nó không hiện thị được nữa.
Code:

PHP:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Dim Cll1, Cll2 As Range, d1, Arr()
Set Cll1 = Sheet9.[A6]
Set Cll2 = Sheet3.[A12]
d1 = Sheet3.[a65536].End(xlUp).Row
Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).ClearContents
Do While Trim(Cll1) <> ""
If Cll1.Offset(, 11) = Me.ComboBox1 Then
Cll2.Resize(, 2).Value = Cll1.Resize(, 12).Value
Cll2.Offset(, 2) = Cll1.Offset(, 20)
Cll2.Offset(, 3) = Cll1.Offset(, 13)
Cll2.Offset(, 4) = IIf(Cll1 Like "PN*", Cll1.Offset(, 3), Cll1.Offset(, 2))
Cll2.Offset(, 5) = Cll1.Offset(, 14)
Cll2.Offset(, 6) = Cll1.Offset(, 15)
Cll2.Offset(, 7) = Cll1.Offset(, 16)
Cll2.Offset(, 8) = Cll1.Offset(, 17)
Cll2.Offset(, 9) = Cll1.Offset(, 18)
Cll2.Offset(, 10) = Cll2.Offset(-1, 10) + Cll2.Offset(, 6) - Cll2.Offset(, 8)
Cll2.Offset(, 11) = Cll2.Offset(-1, 11) + Cll2.Offset(, 7) - Cll2.Offset(, 9)
Set Cll2 = Cll2.Offset(1)
End If
Set Cll1 = Cll1.Offset(1)
Loop
Dim j As Long
j = 13
Sheet10.[a14:l14].Copy
Sheet3.Range("A13:L" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a14:l18].Copy Sheet3.Cells(j + 1, 1)
End Sub
Anh chị lưu ý kiểm tra cho em cái này nhé:

PHP:
Dim j As Long
j = 13
Sheet10.[a14:l14].Copy
Sheet3.Range("A13:L" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a14:l18].Copy Sheet3.Cells(j + 1, 1)

Anh chị sửa cho em ở nút lệnh SỔ CT VT/HH đó.
 

File đính kèm

A/C hoàn thiện dùm em code sao cho khi chọn mã vật tư, hàng hoá thì nó sẽ cập nhật tất cả các thông tin từ Sheet Data sang. Chân báo cáo thì copy từ Sheet Tmp2. Em đã tạo code thế này và nó chỉ giới hạn số dòng thôi. Nếu cập nhật dữ liệu mới thì nó không hiện thị được nữa.
Code:

PHP:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Dim Cll1, Cll2 As Range, d1, Arr()
Set Cll1 = Sheet9.[A6]
Set Cll2 = Sheet3.[A12]
d1 = Sheet3.[a65536].End(xlUp).Row
Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).ClearContents
Do While Trim(Cll1) <> ""
If Cll1.Offset(, 11) = Me.ComboBox1 Then
Cll2.Resize(, 2).Value = Cll1.Resize(, 12).Value
Cll2.Offset(, 2) = Cll1.Offset(, 20)
Cll2.Offset(, 3) = Cll1.Offset(, 13)
Cll2.Offset(, 4) = IIf(Cll1 Like "PN*", Cll1.Offset(, 3), Cll1.Offset(, 2))
Cll2.Offset(, 5) = Cll1.Offset(, 14)
Cll2.Offset(, 6) = Cll1.Offset(, 15)
Cll2.Offset(, 7) = Cll1.Offset(, 16)
Cll2.Offset(, 8) = Cll1.Offset(, 17)
Cll2.Offset(, 9) = Cll1.Offset(, 18)
Cll2.Offset(, 10) = Cll2.Offset(-1, 10) + Cll2.Offset(, 6) - Cll2.Offset(, 8)
Cll2.Offset(, 11) = Cll2.Offset(-1, 11) + Cll2.Offset(, 7) - Cll2.Offset(, 9)
Set Cll2 = Cll2.Offset(1)
End If
Set Cll1 = Cll1.Offset(1)
Loop
Dim j As Long
j = 13
Sheet10.[a14:l14].Copy
Sheet3.Range("A13:L" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a14:l18].Copy Sheet3.Cells(j + 1, 1)
End Sub
Anh chị lưu ý kiểm tra cho em cái này nhé:

PHP:
Dim j As Long
j = 13
Sheet10.[a14:l14].Copy
Sheet3.Range("A13:L" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a14:l18].Copy Sheet3.Cells(j + 1, 1)
Anh chị sửa cho em ở nút lệnh SỔ CT VT/HH đó.

Bạn chỉnh lại như sau:

Mã:
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Dim Cll1, Cll2 As Range, d1, Arr()
Set Cll1 = Sheet9.[A6]
Set Cll2 = Sheet3.[A12]
d1 = Sheet3.[a65536].End(xlUp).Row
[COLOR=Green]'Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).ClearContents[/COLOR]
[COLOR=Blue][B]Sheet3.Range("A12:L65000").ClearContents[/B][/COLOR]
Do While Trim(Cll1) <> ""
If Cll1.Offset(, 11) = Me.ComboBox1 Then
Cll2.Resize(, 2).Value = Cll1.Resize(, 12).Value
Cll2.Offset(, 2) = Cll1.Offset(, 20)
Cll2.Offset(, 3) = Cll1.Offset(, 13)
Cll2.Offset(, 4) = IIf(Cll1 Like "PN*", Cll1.Offset(, 3), Cll1.Offset(, 2))
Cll2.Offset(, 5) = Cll1.Offset(, 14)
Cll2.Offset(, 6) = Cll1.Offset(, 15)
Cll2.Offset(, 7) = Cll1.Offset(, 16)
Cll2.Offset(, 8) = Cll1.Offset(, 17)
Cll2.Offset(, 9) = Cll1.Offset(, 18)
Cll2.Offset(, 10) = Cll2.Offset(-1, 10) + Cll2.Offset(, 6) - Cll2.Offset(, 8)
Cll2.Offset(, 11) = Cll2.Offset(-1, 11) + Cll2.Offset(, 7) - Cll2.Offset(, 9)
Set Cll2 = Cll2.Offset(1)
End If
Set Cll1 = Cll1.Offset(1)
Loop
Dim j As Long
[B][COLOR=Blue]j = Sheet3.Range("A65000").End(xlUp).Row + 1[/COLOR][/B]
Sheet10.[a14:l14].Copy
Sheet3.Range("A13:L" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a14:l18].Copy Sheet3.Cells(j + 1, 1)

Sheet3.Range("a1").Select
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh xem lại dùm em phần chân trang nhé!
 
Upvote 0
Đã chỉnh ở bài số #2
Bạn xem lại nhé

Anh kiểm tra dùm em công thức bên Sheet Tmp2 nhé! Em phải thiết lập công thức như thế nào để nó tự động cộng khi chọn mã. Hiện tại công thức em làm tnế nào vẫn chưa ổn anh ah.
Em xem lại file đính kèm này của em nhé!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh kiểm tra dùm em công thức bên Sheet Tmp2 nhé! Em phải thiết lập công thức như thế nào để nó tự động cộng khi chọn mã. Hiện tại công thức em làm tnế nào vẫn chưa ổn anh ah.
Em xem lại file đính kèm này của em nhé!
Bạn xem lại file đính kèm nhe
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Okie. Nhưng anh ơi! Mình có phải sửa lại code không ah?
Cám ơn anh dom nhiều lắm!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thông cảm, mình nghĩ đây là cách tạo chân trang mình tham gia riêng với bạn ngày thứ Bảy. Nhưng chưa hướng dẫn bạn cụ thể. Mình lưu ý bạn 1 số vấn đề:
1/Công thức chân trang thẻ kho chỉ có cộng phát sinh chứ không có tổng ở cột tồn kho. Trong ô đó bạn gõ chữ "X".
2/Công thức công nhập xuất: Vì thẻ kho bắt đầu từ dòng 17 nên vùng cộng sẽ cố định từ 17 và dòng đến sẽ đến dòng trên dòng công thức Sheet Temp. Dòng đến phải để địa chỉ tương đối.
Vậy khi chép công thức đi nơi khác nó sẽ hiểu là công từ dòng 17 đến dòng phía trên ô công thức.
Cụ thể: Dòng công thức ở Sheets Temp dòng 20. Cong thức công nhập cột E sẽ là

=Sum(E$17:E19)
Tương tự cho cột F. Bạn nhập công thức trên vào file của Dom. là OK.
3/Code lưu ý dòng:

Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).ClearContents

Thành:

Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).Clear

Ngoài việc xoá nội dung ta cần xoá cả định dạng nữa.

P/s: Trời, bạn lắm temp quá nên mình nhầm Temp mất rồi.
Temp2 của bạn dòng công thức phải sau dòng 17 để tránh lỗi Cỉcular
Sau đó sử lý như trên. Sheet Temp2 là Sheet10 (CodeName) nên Code cũng phải sửa

Sheet10.[a18:g18].Copy
Sheet5.Range("A17:G" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a19:g23].Copy Sheet5.Cells(j + 1, 1)

Mà cái chân trang của thẻ kho chỉ có 7 cột trong khi chân trang mẫu dến 12 cột thì khi chép sẽ dán vào đâu
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thông cảm, mình nghĩ đây là cách tạo chân trang mình tham gia riêng với bạn ngày thứ Bảy. Nhưng chưa hướng dẫn bạn cụ thể. Mình lưu ý bạn 1 số vấn đề:
1/Công thức chân trang thẻ kho chỉ có cộng phát sinh chứ không có tổng ở cột tồn kho. Trong ô đó bạn gõ chữ "X".
2/Công thức công nhập xuất: Vì thẻ kho bắt đầu từ dòng 17 nên vùng cộng sẽ cố định từ 17 và dòng đến sẽ đến dòng trên dòng công thức Sheet Temp. Dòng đến phải để địa chỉ tương đối.
Vậy khi chép công thức đi nơi khác nó sẽ hiểu là công từ dòng 17 đến dòng phía trên ô công thức.
Cụ thể: Dòng công thức ở Sheets Temp dòng 20. Cong thức công nhập cột E sẽ là

=Sum(E$17:E19)
Tương tự cho cột F. Bạn nhập công thức trên vào file của Dom. là OK.
3/Code lưu ý dòng:

Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).ClearContents

Thành:

Sheet3.Range("a12:L" & IIf(d1 > 11, d1, 11)).Clear

Ngoài việc xoá nội dung ta cần xoá cả định dạng nữa.

P/s: Trời, bạn lắm temp quá nên mình nhầm Temp mất rồi.
Temp2 của bạn dòng công thức phải sau dòng 17 để tránh lỗi Cỉcular
Sau đó sử lý như trên. Sheet Temp2 là Sheet10 (CodeName) nên Code cũng phải sửa

Sheet10.[a18:g18].Copy
Sheet5.Range("A17:G" & j).PasteSpecial Paste:=xlPasteFormats
Sheet10.[a19:g23].Copy Sheet5.Cells(j + 1, 1)

Mà cái chân trang của thẻ kho chỉ có 7 cột trong khi chân trang mẫu dến 12 cột thì khi chép sẽ dán vào đâu
Dạ, cám ơn anh sealand nhiều! Em muốn hỏi cho cái sheet Tmp2 đó anh ah!
 
Upvote 0
Bạn cứ làm thật ưng ý trên thẻ kho đi, sau đó chép để vào 1 góc trên sheet Temp khi cần ta lấy về. Đó là quy trình hợp lý nhất. Bạn cứ làm đi vướng đâu cùng nhau gỡ. Nói chung việc này hơi thủ công nhưng hiệu quả không nhỏ đâu nhé.
 
Upvote 0
Anh kiểm tra dùm em công thức bên Sheet Tmp2 nhé! Em phải thiết lập công thức như thế nào để nó tự động cộng khi chọn mã. Hiện tại công thức em làm tnế nào vẫn chưa ổn anh ah.
Em xem lại file đính kèm này của em nhé!

Bạn xem giải pháp này được không?
(SOCT - THEKHO - Footer)


  1. Rút gọn còn 1 sheet chứa chân trang

  2. loại bỏ công thức phần chân trang

  3. Đặc biệt: đã xử lý giảm dung lượng file
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0

Bạn xem giải pháp này được không?
(SOCT - THEKHO - Footer)


  1. Rút gọn còn 1 sheet chứa chân trang

  2. loại bỏ công thức phần chân trang

  3. Đặc biệt: đã xử lý giảm dung lượng file

Dạ, cám ơn thầy Boyxin rất nhiều. Thầy ơi, thầy đã xử lý file của em thế nào mà dung lượng lại giảm nhiều thế vậy? Thầy chỉ dùm em nhé!
 
Upvote 0
Dùng AdvancedFilter lọc và tính KQ:

1) Sheets("SOCT")
PHP:
With Sheets("DATA")
    Set data = .[a5].Resize(.[a65535].End(xlUp).Row - 4, 21)
    data.AdvancedFilter 2, [E1:E2], [A11:J11]
End With
    i = [a65535].End(xlUp).Row - 11
    For Each clls In [a12].Offset(, 10).Resize(i, 2)
        With clls
            .Value = .Offset(-1) + .Offset(, -4) - .Offset(, -2)
        End With
    Next
2) Sheets("THEKHO")
PHP:
With Sheets("DATA")
    Set data = .[a5].Resize(.[a65535].End(xlUp).Row - 4, 21)
    data.AdvancedFilter 2, [H1:H2], [A16:F16]
End With
    i = [a65535].End(xlUp).Row - 16
    For Each clls In [A17].Offset(, 6).Resize(i)
        With clls
            .Value = .Offset(-1) + .Offset(, -2) - .Offset(, -1)
        End With
    Next
3) Nhập 2 Sheets("PN" & "PX") = Sheets("Phieu_NX")
PHP:
With Sheets("DATA")
    Set data = .[a5].Resize(.[a65535].End(xlUp).Row - 4, 21)
    data.AdvancedFilter 2, [i1:i2], [B14:g14]
End With
    i = [b65535].End(xlUp).Row - 14
If i > 0 Then
    With [A15].Resize(i)
        .Value = Evaluate("ROW(R:R)")
        .Offset(, 7).FormulaR1C1 = "=(RC[-1]*RC[-2])"
        .Offset(, 7) = .Offset(, 7).Value
    End With
End If
Xem code chi tiết trong file đính kèm
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Thầy Boyxin ơi, em đã xem file vidụ 2 của thầy rồi. Em muốn nhờ thầy sửa dùm lại cho em chút nhé!
* Thứ nhất: (Sheet Phiêu_NX):
- Nếu mình chọn số phiếu nhập thì nó sẽ lọc toàn bộ số lượng nhập của phiếu đó vào Cột F (Phiếu_NX).
- Nếu mình chọn số phiếu xuất thì nó sẽ lọc toàn bộ số lượng xuất của phiếu đó vào Cột F (Phiếu_NX).
- Cột E (Phiếu_NX) để trống.
- Tài khoản Nợ: Sẽ lấy dữ liệu bên cột C (Sheet Data). Nếu Tài khoản nợ này trong 1 phiếu mà trùng nhau thì chỉ cho hiển thị 1 TK đó vào ô H6 (Phieu_NX).
- Tài khoản : Sẽ lấy dữ liệu bên cột D (Sheet Data). Nếu Tài khoản có này trong 1 phiếu mà trùng nhau thì chỉ cho hiển thị 1 TK đó vào ô H6 (Phieu_NX).
* Thứ 2 (Sheet SOCT):
- Hiển thị tại cột E (Tài khoản đối ứng):
+ Nếu là phiếu Nhập thì nó sẽ hiển thị Tài khoản ở cột F (Sheet Data).
+ Nếu là phiếu Xuất thì nó sẽ hiển thị Tài khoản ở cột E (Sheet Data).
- Hiển thị tại ô I6 (Sheet SOCT):
+ Nếu là phiếu Nhập thì ô I6 sẽ hiển thị Tài khoản ở cột E
+ Nếu là phiếu Xuất thì ô I6 sẽ hiển thị Tài khoản ở cột F
Mong thầy và các A/C chỉ dùm em nhé!
 
Lần chỉnh sửa cuối:
Upvote 0
Không hiểu ý bạn muốn gì (làm đại trúng trật hên xui)

* (Sheet SOCT):
- Hiển thị tại cột E (Tài khoản đối ứng):
+ Nếu là phiếu Nhập thì nó sẽ hiển thị Tài khoản ở cột F (Sheet Data).
+ Nếu là phiếu Xuất thì nó sẽ hiển thị Tài khoản ở cột E (Sheet Data).
Tại Sheet Data: Cột E [Tên người giao / nhận] đoán là cột C (tài khoản Nợ); cột F [Tên đơn vị nhập/xuất] đoán là cột D (tài khoản Có)
* (Sheet SOCT):
- Hiển thị tại ô I6 (Sheet SOCT):
+ Nếu là phiếu Nhập thì ô I6 sẽ hiển thị Tài khoản ở cột E
+ Nếu là phiếu Xuất thì ô I6 sẽ hiển thị Tài khoản ở cột F
Tại Sheets("SOCT"): Khi lựa chọn Mã HH sẽ ra nhiều phiếu (có cả PN...; PX...) vậy điền cái gì vào 1 ô I6 Sheets("SOCT") <=> không khả thi

Có phải là thế này không?
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Anh Boyxin ơi, em đã sửa code chèn chân trang rồi. Nhưng code em làm vẫn chữa đúng nên vẫn chưa được ưng ý. Anh xem và chỉnh dùm em nhé!
Với lại, sao file này của em chỉnh có chút xíu mà sao dung lượng lại tăng lên nhiều vậy ta? Anh cũng kiểm tra luôn dùm em nhé!
(Câu hỏi cụ thể tronh file đính kèm - Kiểm tra mục Phieu_NX)
 

File đính kèm

Upvote 0
Anh Boyxin ơi, em đã sửa code chèn chân trang rồi. Nhưng code em làm vẫn chữa đúng nên vẫn chưa được ưng ý. Anh xem và chỉnh dùm em nhé!
Với lại, sao file này của em chỉnh có chút xíu mà sao dung lượng lại tăng lên nhiều vậy ta? Anh cũng kiểm tra luôn dùm em nhé!
(Câu hỏi cụ thể tronh file đính kèm - Kiểm tra mục Phieu_NX)

Kiểm tra lại với dữ liệu nhiều hơn xem thế nào nhé
 

File đính kèm

Upvote 0
Web KT

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

Back
Top Bottom