Chương trình in trong Excel dùng Hàm Select case

Liên hệ QC

baquang1984

Thành viên tiêu biểu
Tham gia
3/6/10
Bài viết
429
Được thích
44
Nghề nghiệp
Kỹ sư Lâm nghiệp
Em chào thầy cô và anh chị trên diễn đàn ạ
Em có file In_GCN2019 bao gồm có nhiều sheet để thực hiện in. Em sử dụng Hàm selcet case để thực hiện in các Sheet theo điều kiện
Quy trình in của em như sau:
Em dùng hàm Select Case lồng vào nhau với điều kiện ở cột A sheets"IN_GCN" và cột Q Sheets"IN_GCN"
Điều kiện in như sau:
Nếu cốt A bằng 1 và cột Q bằng 1 thì In Sheets"In_Trang2-1(2MDSD)"
Nếu cột A bằng 1 và cột Q không có dữ liệu thì in Sheets"In_Trang2-1"
Nếu cột A bằng 2 và cột Q không có dữ liệu thì in Sheets"In_Trang2-2"
Nếu cột A bằng 3 và cột Q không có dữ liệu thì in Sheets"In_Trang2-3"
Nếu cột A bằng 4 và cột Q không có dữ liệu thì in Sheets"In_Trang2-4"
Nếu cột A bằng 5 và cột Q không có dữ liệu thì in Sheets"In_Trang2-5"
Nếu cột A bằng 6 và cột Q không có dữ liệu thì in Sheets"In_Trang2-6"
Em viết như dưới đây không biết lỗi như thế nào ạ. Mong được Thầy, cô và anh chị trên diện đàn sửa lỗi giúp ạ
PHP:
Public Sub In_GCN3()
Dim k As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long, Ma_CLN As Long
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr)
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Lr2 = Sheet2.Range("Q65536").End(xlUp).Row
        Ma_CLN = Lr2 - 4 + 1
        Select Case SoThua
        Case Is = 1
            Select Case Ma_CLN
                Case Is = 1
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End Select
         Case Is = 1
            Sheet9.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 2
            Sheet3.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 3
             Sheet4.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 4
             Sheet5.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 5
             Sheet6.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 6
             Sheet7.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
Em cảm ơn nhiều ạ
 

File đính kèm

Em chào thầy cô và anh chị trên diễn đàn ạ
Em có file In_GCN2019 bao gồm có nhiều sheet để thực hiện in. Em sử dụng Hàm selcet case để thực hiện in các Sheet theo điều kiện
Quy trình in của em như sau:
Em dùng hàm Select Case lồng vào nhau với điều kiện ở cột A sheets"IN_GCN" và cột Q Sheets"IN_GCN"
Điều kiện in như sau:
Nếu cốt A bằng 1 và cột Q bằng 1 thì In Sheets"In_Trang2-1(2MDSD)"
Nếu cột A bằng 1 và cột Q không có dữ liệu thì in Sheets"In_Trang2-1"
Nếu cột A bằng 2 và cột Q không có dữ liệu thì in Sheets"In_Trang2-2"
Nếu cột A bằng 3 và cột Q không có dữ liệu thì in Sheets"In_Trang2-3"
Nếu cột A bằng 4 và cột Q không có dữ liệu thì in Sheets"In_Trang2-4"
Nếu cột A bằng 5 và cột Q không có dữ liệu thì in Sheets"In_Trang2-5"
Nếu cột A bằng 6 và cột Q không có dữ liệu thì in Sheets"In_Trang2-6"
Em viết như dưới đây không biết lỗi như thế nào ạ. Mong được Thầy, cô và anh chị trên diện đàn sửa lỗi giúp ạ
PHP:
Public Sub In_GCN3()
Dim k As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long, Ma_CLN As Long
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr)
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Lr2 = Sheet2.Range("Q65536").End(xlUp).Row
        Ma_CLN = Lr2 - 4 + 1
        Select Case SoThua
        Case Is = 1
            Select Case Ma_CLN
                Case Is = 1
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End Select
         Case Is = 1
            Sheet9.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 2
            Sheet3.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 3
             Sheet4.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 4
             Sheet5.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 5
             Sheet6.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 6
             Sheet7.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
Em cảm ơn nhiều ạ
Bạn viết bao nhiều bài, thành thành viên kỳ cưu rồi mà tiêu đề vẫn đặt:
"Code in trong VBA"
quá chung chung

nên Lỗi:
- Đặt tiêu đề sai
- sub lỗi ở đâu với code của bạn thì bạn phải chạy thử tại file đó, và ghi ra đây
 
Upvote 0
Bạn viết bao nhiều bài, thành thành viên kỳ cưu rồi mà tiêu đề vẫn đặt:
"Code in trong VBA"
quá chung chung

nên Lỗi:
- Đặt tiêu đề sai
- sub lỗi ở đâu với code của bạn thì bạn phải chạy thử tại file đó, và ghi ra đây
Em cảm ơn ad tam888 đã nhắc nhở ạ em xin phép sửa lại Tiêu đề ạ
 
Upvote 0
Ai lại Case Is = ...

Select Case (biểu thức)
Case 1
code gì đó
Case 2
code nọ kia
Case 3
code ấy thế
...
End Select
 
Upvote 0
Ai lại Case Is = ...

Select Case (biểu thức)
Case 1
code gì đó
Case 2
code nọ kia
Case 3
code ấy thế
...
End Select
Em cảm ơn anh VetMini do em không có nhiều kiến thức về lập trình VBA trong Excel nên chưa hiểu hết được thuật toán trong lập trình. Kiến thức lập trình của em có được là khi em nêu các câu hỏi lên diễn đần và được các thầy như Ba Tê, Quang Hải ... viết và hướng dẫn nên em vẫn dụng theo các Code đó vào công việc của mình ạ.
Với chương trình ở trên là em dùng Code lọc dữ liệu theo điều kiện từ Sheets"DATA" sang sheets"IN_GCN" và sau đó dùng các hàm gán trong Excel để đưa dữ liệu vào các Sheets"In_Trang2-1(2MDSD)", Sheets"In_Trang2-1", Sheets"In_Trang2-2",, Sheets"In_Trang2-3", Sheets"In_Trang2-4", Sheets"In_Trang2-5",, Sheets"In_Trang2-6" và em sử dụng Code VBA để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Em mong được sự giúp đỡ của Thầy cô và anh chị triên diễn đàn ạ. Em cảm ơn nhiều ạ
 
Upvote 0
Em cảm ơn anh VetMini do em không có nhiều kiến thức về lập trình VBA trong Excel nên chưa hiểu hết được thuật toán trong lập trình. Kiến thức lập trình của em có được là khi em nêu các câu hỏi lên diễn đần và được các thầy như Ba Tê, Quang Hải ... viết và hướng dẫn nên em vẫn dụng theo các Code đó vào công việc của mình ạ.
Với chương trình ở trên là em dùng Code lọc dữ liệu theo điều kiện từ Sheets"DATA" sang sheets"IN_GCN" và sau đó dùng các hàm gán trong Excel để đưa dữ liệu vào các Sheets"In_Trang2-1(2MDSD)", Sheets"In_Trang2-1", Sheets"In_Trang2-2",, Sheets"In_Trang2-3", Sheets"In_Trang2-4", Sheets"In_Trang2-5",, Sheets"In_Trang2-6" và em sử dụng Code VBA để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Em mong được sự giúp đỡ của Thầy cô và anh chị triên diễn đàn ạ. Em cảm ơn nhiều ạ
Em cảm ơn anh VetMini do em không có nhiều kiến thức về lập trình VBA trong Excel nên chưa hiểu hết được thuật toán trong lập trình. Kiến thức lập trình của em có được là khi em nêu các câu hỏi lên diễn đần và được các thầy như Ba Tê, Quang Hải ... viết và hướng dẫn nên em vẫn dụng theo các Code đó vào công việc của mình ạ.
Với chương trình ở trên là em dùng Code lọc dữ liệu theo điều kiện từ Sheets"DATA" sang sheets"IN_GCN" và sau đó dùng các hàm gán trong Excel để đưa dữ liệu vào các Sheets"In_Trang2-1(2MDSD)", Sheets"In_Trang2-1", Sheets"In_Trang2-2",, Sheets"In_Trang2-3", Sheets"In_Trang2-4", Sheets"In_Trang2-5",, Sheets"In_Trang2-6" và em sử dụng Code VBA để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Em mong được sự giúp đỡ của Thầy cô và anh chị triên diễn đàn ạ. Em cảm ơn nhiều ạ
Bạn dùng 1 Select Case cho SoThua, trong đó
Case 1
If Q có dữ liệu là mã CLN then
in Sheets"In_Trang2-1(2MDSD)"
else
in Sheets"In_Trang2-1"
End if
Case 2
.......
 
Upvote 0
Em cảm ơn anh VetMini do em không có nhiều kiến thức về lập trình VBA trong Excel nên chưa hiểu hết được thuật toán trong lập trình. Kiến thức lập trình của em có được là khi em nêu các câu hỏi lên diễn đần và được các thầy như Ba Tê, Quang Hải ... viết và hướng dẫn nên em vẫn dụng theo các Code đó vào công việc của mình ạ.
Với chương trình ở trên là em dùng Code lọc dữ liệu theo điều kiện từ Sheets"DATA" sang sheets"IN_GCN" và sau đó dùng các hàm gán trong Excel để đưa dữ liệu vào các Sheets"In_Trang2-1(2MDSD)", Sheets"In_Trang2-1", Sheets"In_Trang2-2",, Sheets"In_Trang2-3", Sheets"In_Trang2-4", Sheets"In_Trang2-5",, Sheets"In_Trang2-6" và em sử dụng Code VBA để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Em mong được sự giúp đỡ của Thầy cô và anh chị triên diễn đàn ạ. Em cảm ơn nhiều ạ
Thế này cho gọn

Mã:
If <cột Q có dữ liệu là mã CLN > then
        If  Then
                < in Sheets"In_Trang2-1(2MDSD)" >
        End If
Else '<cột Q khong có dữ liệu là mã CLN >
             < in Sheets"In_Trang2-" & SoThua >
End If
 
Upvote 0
Bạn dùng 1 Select Case cho SoThua, trong đó
Case 1
If Q có dữ liệu là mã CLN then
in Sheets"In_Trang2-1(2MDSD)"
else
in Sheets"In_Trang2-1"
End if
Case 2
.......
Em cảm ơn anh HieuCD đã hướng dẫn ạ nhưng em thêm một mảng sArr2 và cho vào vòng lặp For để tìm điều kiện cột Q có mã CLN nhưng chương trình chạy không đúng ạ. Mong anh và Thầy cô anh chị trên diễn đàn sửa giúp ạ
PHP:
Public Sub In_GCN3()
Dim k As Long, i As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long
sArr2 = Sheet2.Range("A4:S1000")
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr)
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Select Case SoThua
        Case Is = 1
          For i = 1 To UBound(sArr2, 1)
                If sArr2(i, 17) <> "" Then
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                Else
                    Sheet9.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End If
             Next i
        Case Is = 2
            Sheet3.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 3
             Sheet4.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 4
             Sheet5.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 5
             Sheet6.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 6
             Sheet7.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
Bài đã được tự động gộp:

Thế này cho gọn

Mã:
If <cột Q có dữ liệu là mã CLN > then
        If  Then
                < in Sheets"In_Trang2-1(2MDSD)" >
        End If
Else '<cột Q khong có dữ liệu là mã CLN >
             < in Sheets"In_Trang2-" & SoThua >
End If
Em cảm ơn anh tam888 do kiến thức về VBA của em còn hạn chế rất mong được Thầy cô và các anh sửa giúp ạ
 
Upvote 0
Chỉnh tạm
Mã:
Public Sub In_GCN33()
Dim k As Long, i As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr).Value
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Select Case SoThua
        Case Is = 1
          sArr2 = Sheet2.Range("A4:S" & Lr1).Value
          For i = 1 To UBound(sArr2, 1)
                If sArr2(i, 17) <> "" Then
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                Else
                    Sheet9.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End If
             Next i
        Case Is = 2
            If sArr2(i, 17) = "" Then
                Sheet3.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
            End If
        Case Is = 3
             If sArr2(i, 17) = "" Then
                Sheet4.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 4
             If sArr2(i, 17) = "" Then
                Sheet5.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 5
             If sArr2(i, 17) = "" Then
                Sheet6.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 6
             If sArr2(i, 17) = "" Then
                Sheet7.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
 
Upvote 0
Chỉnh tạm
Mã:
Public Sub In_GCN33()
Dim k As Long, i As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr).Value
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Select Case SoThua
        Case Is = 1
          sArr2 = Sheet2.Range("A4:S" & Lr1).Value
          For i = 1 To UBound(sArr2, 1)
                If sArr2(i, 17) <> "" Then
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                Else
                    Sheet9.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End If
             Next i
        Case Is = 2
            If sArr2(i, 17) = "" Then
                Sheet3.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
            End If
        Case Is = 3
             If sArr2(i, 17) = "" Then
                Sheet4.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 4
             If sArr2(i, 17) = "" Then
                Sheet5.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 5
             If sArr2(i, 17) = "" Then
                Sheet6.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        Case Is = 6
             If sArr2(i, 17) = "" Then
                Sheet7.PrintOut from:=1, To:=1, copies:=1
                Sheet8.PrintOut from:=1, To:=1, copies:=1
             End If
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
Em cảm ơn anh HieuCD đã chỉnh sửa giúp code In sử dụng hàm Select case. Nếu có thể anh có thể giúp em code lại cho ngắn được không ạ, để em có thể được học hỏi thêm và ứng dùng cho công việc ạ. Em cảm ơn anh!
 
Upvote 0
Em cảm ơn anh VetMini do em không có nhiều kiến thức về lập trình VBA trong Excel nên chưa hiểu hết được thuật toán trong lập trình. Kiến thức lập trình của em có được là khi em nêu các câu hỏi lên diễn đần và được các thầy như Ba Tê, Quang Hải ... viết và hướng dẫn nên em vẫn dụng theo các Code đó vào công việc của mình ạ.
Với chương trình ở trên là em dùng Code lọc dữ liệu theo điều kiện từ Sheets"DATA" sang sheets"IN_GCN" và sau đó dùng các hàm gán trong Excel để đưa dữ liệu vào các Sheets"In_Trang2-1(2MDSD)", Sheets"In_Trang2-1", Sheets"In_Trang2-2",, Sheets"In_Trang2-3", Sheets"In_Trang2-4", Sheets"In_Trang2-5",, Sheets"In_Trang2-6" và em sử dụng Code VBA để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Em mong được sự giúp đỡ của Thầy cô và anh chị triên diễn đàn ạ. Em cảm ơn nhiều ạ
Em cảm ơn anh HieuCD đã hướng dẫn ạ nhưng em thêm một mảng sArr2 và cho vào vòng lặp For để tìm điều kiện cột Q có mã CLN nhưng chương trình chạy không đúng ạ. Mong anh và Thầy cô anh chị trên diễn đàn sửa giúp ạ
PHP:
Public Sub In_GCN3()
Dim k As Long, i As Long
Dim DL1(), DL2(), kq(), DS(), lr As Integer, Lr1 As Long, Lr2 As Long, SoThua As Long
sArr2 = Sheet2.Range("A4:S1000")
lr = Sheet2.Range("Y65000").End(xlUp).Row
DS = Sheet2.Range("Y4:Z" & lr)
Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
        Sheet2.Range("U3") = DS(k, 1)
        Lr1 = Sheet2.Range("A65536").End(xlUp).Row
        SoThua = Lr1 - 4 + 1
        Select Case SoThua
        Case Is = 1
          For i = 1 To UBound(sArr2, 1)
                If sArr2(i, 17) <> "" Then
                    Sheet10.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                Else
                    Sheet9.PrintOut from:=1, To:=1, copies:=1
                    Sheet8.PrintOut from:=1, To:=1, copies:=1
                End If
             Next i
        Case Is = 2
            Sheet3.PrintOut from:=1, To:=1, copies:=1
            Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 3
             Sheet4.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 4
             Sheet5.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 5
             Sheet6.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        Case Is = 6
             Sheet7.PrintOut from:=1, To:=1, copies:=1
             Sheet8.PrintOut from:=1, To:=1, copies:=1
        End Select
    Next k
Application.ScreenUpdating = True
End Sub
Bài đã được tự động gộp:


Em cảm ơn anh tam888 do kiến thức về VBA của em còn hạn chế rất mong được Thầy cô và các anh sửa giúp ạ
2 bài có 2 luận lý điều kiện khác nhau, bạn chọn yêu cầu theo điều kiện nào?
 
Upvote 0
Code không thu gọn nđược nếu không biết bạn thực sự muốn làm gì, in một lần hay cả chục/trăm lần.

Theo như code bài #1 thì:
- Sau khi in 1 sheet đã chọn rồi thì luôn luôn in sheet8.
- In rất nhiều lần, mỗi lần có thể là 1 sheet khác, và cũng có thể sheet cũ được in lại.
 
Upvote 0
Code không thu gọn nđược nếu không biết bạn thực sự muốn làm gì, in một lần hay cả chục/trăm lần.

Theo như code bài #1 thì:
- Sau khi in 1 sheet đã chọn rồi thì luôn luôn in sheet8.
- In rất nhiều lần, mỗi lần có thể là 1 sheet khác, và cũng có thể sheet cũ được in lại.
Em cảm ơn anh VetMini, anh HieuCD đã nhiệt tình giúp đỡ ạ chương trình của em là In theo danh sách ở cột Số CMND ở sheets"IN_GCN"
Chương trình sẽ chạy như sau ạ:
Đầu tiền chương trình sẽ chạy lọc dữ liệu theo điều kiện ở cột số CMND sheets"IN_GCN" lọc các dữ liệu thỏa mạn vào các cột từ cột A đến cột S dữ liệu để lọc là sheets"DATA"
Khi dữ liệu sẽ lọc xong thì chương trình In bắt đầu chạy kiểm tra để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Chương trình in của em là như vậy ạ
Đối với Sheet 8 luôn luôn được in cùng với các sheet có điều kiện kể trên VD khi In In_Trang2-1(2MDSD)" là in kèm cả sheet 8 các sheet khác tương tự
Em cảm ơn nhiều
 
Upvote 0
Em cảm ơn anh VetMini, anh HieuCD đã nhiệt tình giúp đỡ ạ chương trình của em là In theo danh sách ở cột Số CMND ở sheets"IN_GCN"
Chương trình sẽ chạy như sau ạ:
Đầu tiền chương trình sẽ chạy lọc dữ liệu theo điều kiện ở cột số CMND sheets"IN_GCN" lọc các dữ liệu thỏa mạn vào các cột từ cột A đến cột S dữ liệu để lọc là sheets"DATA"
Khi dữ liệu sẽ lọc xong thì chương trình In bắt đầu chạy kiểm tra để in lần lượt các Sheet theo điều kiện là ở cột A em làm công thức là tìm từ dưới lên trên đến khi gặp dòng dữ liệu đầu tiên để tính ra số thửa đất với công thức(SoThua = Lr1 - 4 + 1)
- Nếu SoThua = 1 và ở cột Q có dữ liệu là mã CLN thì chương trình in Sheets"In_Trang2-1(2MDSD)"
- Nếu SoThua = 1 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-1"
- Nếu SoThua = 2 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-2"
- Nếu SoThua = 3 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-3"
- Nếu SoThua = 4 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-4"
- Nếu SoThua = 5 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-5"
- Nếu SoThua = 6 và cột Q không có mã CLN thì chương trình in Sheets"In_Trang2-6"
Chương trình in của em là như vậy ạ
Đối với Sheet 8 luôn luôn được in cùng với các sheet có điều kiện kể trên VD khi In In_Trang2-1(2MDSD)" là in kèm cả sheet 8 các sheet khác tương tự
Em cảm ơn nhiều
Rút gọn code, số lần in sẽ nhiều hơn code trước nhiều lần !!!
Mã:
Public Sub In_GCN33()
  Dim k As Long, i As Long, lr As Integer, SoThua As Long
  Dim sArr(), shName, DS()
  shName = Array("In_Trang2-1(2MDSD)", "In_Trang2-1", "In_Trang2-2", "In_Trang2-3", _
                  "In_Trang2-4", "In_Trang2-5", "In_Trang2-6")
  With Sheets("IN_GCN")
    lr = .Range("Y65000").End(xlUp).Row
    If lr < 4 Then MsgBox ("Khong co du kieu"): Exit Sub
    DS = .Range("Y4:Z" & lr).Value
    Application.ScreenUpdating = False
    For k = 1 To UBound(DS)
      .Range("U3") = DS(k, 1)
      lr = .Range("A65536").End(xlUp).Row
      SoThua = lr - 4 + 1
      If SoThua > 0 And SoThua < 7 Then
        sArr = .Range("A4:S" & lr).Value
        For i = 1 To UBound(sArr, 1)
          If Len(sArr(i, 17)) > 0 Then
            If SoThua = 1 Then
              Sheets(shName(0)).PrintOut from:=1, To:=1, copies:=1
              Sheets("In_Trang1-4").PrintOut from:=1, To:=1, copies:=1
            End If
          Else
            Sheets(shName(SoThua)).PrintOut from:=1, To:=1, copies:=1
            Sheets("In_Trang1-4").PrintOut from:=1, To:=1, copies:=1
          End If
        Next i
      End If
    Next k
  End With
  Application.ScreenUpdating = True
End Sub
 
Upvote 0
Web KT

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

Back
Top Bottom