Đưa mã code vào đoạn mã code khác

Liên hệ QC

Lê Hồng Minh83

Thành viên tiêu biểu
Tham gia
29/9/17
Bài viết
587
Được thích
649
Giới tính
Nam
Chào các thành viên GPE

Gần đây minh có tìm hiểu VBA, lên mạng tìm kiếm được một số đoạn mã, nghiên cứu và chế biến lại để có thể sử dụng. Tuy nhiên, do "đi ngang", cũng mới chỉ biết được chút xíu xíu về VBA nên việc chế được 1 đoạn mã, còn muốn đưa nó vào đoạn mã khác cho gọn thì làm chưa được. Mong các thành viên khác giúp đỡ.
Cụ thể, trong file minh lượn được code của bác Be09 ở diễn đàn khác và chế biến chút xíu. File có 3 sheet ban đầu, trong sheet INPUT-OUTPUT, có sử dụng code để tách bộ phận ra các sheet khác. Sau khi tách xong, dữ liệu bên sheet mới chưa có 2 dòng tiêu đề của sheet ban đầu. Minh có chế được đoạn code để copy 1 dòng đầu của sheet INPUT-OUTPUT dán cho dòng đầu các sheet khác ngoại trừ 3 sheet ban đầu
Mã:
Sub CopyTieuDe()
Application.DisplayAlerts = False
Dim SheetsToKeep, sh, chk

Sheets("INPUT-OUTPUT").Select
    Range("A1:AL1").Select
    Selection.Copy
    SheetsToKeep = Array("CODE", "INPUT-OUTPUT", "INVENTORY")
    For Each sh In Worksheets
    chk = Filter(SheetsToKeep, sh.Name, 1)
    If UBound(chk) <> 0 Then
     sh.Visible = True
     sh.Paste
   End If
Next

Application.DisplayAlerts = True
End Sub
Nhưng giờ minh muốn code trên (module3) được ghép luôn vào trong module 1 cho nó gọn, đỡ phải bấm nhiều lần. (do chưa biết gì về VBA nên có thế có những dòng code thừa, các bác đừng cười nhé :) )

Ngoài ra, Minh muốn thêm công thức tính tổng SUBTOTAL cho từng cột tại dòng 2 của các sheet mới được tạo ra, từ cột AA đến cột AH, dữ liệu tính tổng cho mỗi cột từ dòng 4 đến dòng cuối cùng có dữ liệu (ghép code luôn vào module 1)
Bác nào giúp mình nhé
Cảm ơn!
 
Chào các thành viên GPE

Gần đây minh có tìm hiểu VBA, lên mạng tìm kiếm được một số đoạn mã, nghiên cứu và chế biến lại để có thể sử dụng. Tuy nhiên, do "đi ngang", cũng mới chỉ biết được chút xíu xíu về VBA nên việc chế được 1 đoạn mã, còn muốn đưa nó vào đoạn mã khác cho gọn thì làm chưa được. Mong các thành viên khác giúp đỡ.
Cụ thể, trong file minh lượn được code của bác Be09 ở diễn đàn khác và chế biến chút xíu. File có 3 sheet ban đầu, trong sheet INPUT-OUTPUT, có sử dụng code để tách bộ phận ra các sheet khác. Sau khi tách xong, dữ liệu bên sheet mới chưa có 2 dòng tiêu đề của sheet ban đầu. Minh có chế được đoạn code để copy 1 dòng đầu của sheet INPUT-OUTPUT dán cho dòng đầu các sheet khác ngoại trừ 3 sheet ban đầu
Mã:
Sub CopyTieuDe()
Application.DisplayAlerts = False
Dim SheetsToKeep, sh, chk

Sheets("INPUT-OUTPUT").Select
    Range("A1:AL1").Select
    Selection.Copy
    SheetsToKeep = Array("CODE", "INPUT-OUTPUT", "INVENTORY")
    For Each sh In Worksheets
    chk = Filter(SheetsToKeep, sh.Name, 1)
    If UBound(chk) <> 0 Then
     sh.Visible = True
     sh.Paste
   End If
Next

Application.DisplayAlerts = True
End Sub
Nhưng giờ minh muốn code trên (module3) được ghép luôn vào trong module 1 cho nó gọn, đỡ phải bấm nhiều lần. (do chưa biết gì về VBA nên có thế có những dòng code thừa, các bác đừng cười nhé :) )

Ngoài ra, Minh muốn thêm công thức tính tổng SUBTOTAL cho từng cột tại dòng 2 của các sheet mới được tạo ra, từ cột AA đến cột AH, dữ liệu tính tổng cho mỗi cột từ dòng 4 đến dòng cuối cùng có dữ liệu (ghép code luôn vào module 1)
Bác nào giúp mình nhé
Cảm ơn!
Bạn thêm mấy dòng code này vào trên dòng Next mycell ở gần cuối
1533205222364.png
Mã:
Sheets("INPUT-OUTPUT").Range("A1:AL1").Copy wks.Range("A1")
        For i = 27 To 34
            wks.Cells(2, i) = "=SUBTOTAL(9," & wks.Cells(4, i).Address & ":" & Cells(wks.Range("A" & Rows.Count).End(3).Row, i).Address & ")"
        Next
 
Upvote 0
Upvote 0
Bạn thêm mấy dòng code này vào trên dòng Next mycell ở gần cuối
View attachment 201050
Mã:
Sheets("INPUT-OUTPUT").Range("A1:AL1").Copy wks.Range("A1")
        For i = 27 To 34
            wks.Cells(2, i) = "=SUBTOTAL(9," & wks.Cells(4, i).Address & ":" & Cells(wks.Range("A" & Rows.Count).End(3).Row, i).Address & ")"
        Next
Ồh, thì ra là đặt code tiếp dười chữ End if thì mình lại bỏ nó trên cái End if đó nên bị lỗi :). Với lại đang làm việc trực tiếp trên các sheet mới tạo ra thì không cần phải ra điều kiện ngăn chặn sheet nữa :)
 
Upvote 0
Ồh, thì ra là đặt code tiếp dười chữ End if thì mình lại bỏ nó trên cái End if đó nên bị lỗi :). Với lại đang làm việc trực tiếp trên các sheet mới tạo ra thì không cần phải ra điều kiện ngăn chặn sheet nữa :)
Bác nào giúp mình vụ này phát, có lỗi phát sinh. Sao cái Data Validation trong cột U bị sai lệch kết quả tại các sheet được tách ra vậy ta. Sheet gốc IN-OUTPUT, sheet tách SEWING. Sheet gốc Data validation cột U dựa vào nhóm tại cột P để cho danh sách, cột P khác cột U nhưng tách ra sheet SEWING 2 cột nó lại giống nhau luôn
 
Upvote 0
Bác nào giúp mình vụ này phát, có lỗi phát sinh. Sao cái Data Validation trong cột U bị sai lệch kết quả tại các sheet được tách ra vậy ta. Sheet gốc IN-OUTPUT, sheet tách SEWING. Sheet gốc Data validation cột U dựa vào nhóm tại cột P để cho danh sách, cột P khác cột U nhưng tách ra sheet SEWING 2 cột nó lại giống nhau luôn
Có lẽ do cái Data Validation động ở cột U chăng? Vì hàm Indirect dễ làm sai lệch kết quả khi đưa sang sheet khác sau đó mới bỏ công thức.
 
Upvote 0
Có lẽ do cái Data Validation động ở cột U chăng? Vì hàm Indirect dễ làm sai lệch kết quả khi đưa sang sheet khác sau đó mới bỏ công thức.
Vụ này khó nhỉ, mình làm cái Validation động để cho mấy bạn nhập liệu đỡ cực vì Validation nó chỉ cho xuất hiện có 8 dòng, chọn mấy dòng dưới rất lâu, chia nhóm ra như vậy thì nhập sẽ chính xác hơn.
 
Upvote 0
Vụ này khó nhỉ, mình làm cái Validation động để cho mấy bạn nhập liệu đỡ cực vì Validation nó chỉ cho xuất hiện có 8 dòng, chọn mấy dòng dưới rất lâu, chia nhóm ra như vậy thì nhập sẽ chính xác hơn.
Chuyên mục tự hỏi tự trả lời :) : Không phải do Data Validation mà do code phân bổ dữ liệu từ Sheet gốc sang các sheet khác giống như hàm VLOOKUP, nó sẽ lấy dữ liệu cho dòng, cột đầu tiên tìm thấy và phân bổ cho dòng cột thỏa điều kiện, 3 cột NOP minh đặt trùng tên 3 cột STU nên nó vác dữ liệu cột NOP gán cho cột STU ở các sheet phát sinh. Đổi lại cái tiêu đề khác là vấn đề đã được giải quyết :)
 
Upvote 0
Web KT
Back
Top Bottom