Nhờ giúp đỡ code in toàn bộ danh sách có điều kiện

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

S.Ha

Thành viên mới
Tham gia
21/11/23
Bài viết
23
Được thích
2
Chào các bác,
Em đang có một file chấm công, cần in ra để gửi cho các bộ phận kiểm tra, tuy nhiên vì có rất nhiều bộ phận nên phải đặt nhiều lệnh in
Em muốn nhờ các bác giúp em một lệnh để có thể in toàn bộ vì sau này số lượng ngày càng lớn ạ
Quy cách in:
- Trang giấy hiển thị từ cột A đến AZ (Như hiện tại đang hiển thị)
- In một mặt giấy
- Mỗi một trang in ra sẽ bao gồm:
+ Phần tiêu đề chung: (A4:AZ4)
+ Thông tin công của 3 nhân viên
+ Cùng một bộ phận sẽ in cùng nhau (Cột bộ phận là cột AL), hiện tại hệ thống xuất ra đang không sắp xếp theo bộ phận mà theo mã
+ Cùng bộ phận in cùng nhau tách rời với các bộ phận khác
Ví dụ: Nếu bộ phận có 9 người thì vừa tròn 3 trang không cần ngắt
Nếu bộ phận có 8 người thì vị trí thứ 3 của trang thứ 3 sẽ để trống
Nếu bộ phận có 7 người thì vị trí thứ 2 và thứ 3 của trang thứ 3 sẽ để trống
Các bác giúp em với nhé, em cảm ơn ạ!
 

File đính kèm

  • Bang Cham Cong.xlsb
    1.5 MB · Đọc: 13
Hihi. Như bài tập ấy cho cộng đồng ấy nhỉ? Bạn làm được những gì rồi. Có lẽ thêm phần code breaks trang in nữa là trọng điểm
 
Chào các bác,
Em đang có một file chấm công, cần in ra để gửi cho các bộ phận kiểm tra, tuy nhiên vì có rất nhiều bộ phận nên phải đặt nhiều lệnh in
Em muốn nhờ các bác giúp em một lệnh để có thể in toàn bộ vì sau này số lượng ngày càng lớn ạ
Quy cách in:
- Trang giấy hiển thị từ cột A đến AZ (Như hiện tại đang hiển thị)
- In một mặt giấy
- Mỗi một trang in ra sẽ bao gồm:
+ Phần tiêu đề chung: (A4:AZ4)
+ Thông tin công của 3 nhân viên
+ Cùng một bộ phận sẽ in cùng nhau (Cột bộ phận là cột AL), hiện tại hệ thống xuất ra đang không sắp xếp theo bộ phận mà theo mã
+ Cùng bộ phận in cùng nhau tách rời với các bộ phận khác
Ví dụ: Nếu bộ phận có 9 người thì vừa tròn 3 trang không cần ngắt
Nếu bộ phận có 8 người thì vị trí thứ 3 của trang thứ 3 sẽ để trống
Nếu bộ phận có 7 người thì vị trí thứ 2 và thứ 3 của trang thứ 3 sẽ để trống
Các bác giúp em với nhé, em cảm ơn ạ!
Hỏi bạn chủ thớt là
1/ những dòng
Số giờ thường 白班 100% hay
Tăng ca ngày 白班加班 150% hay
Số giờ đêm 夜班 20h- 22h : 100% hay .....
......
mà không có dữ liệu ở bất cứ ô nào từ cột F đến cột AK có cần thiết nhất khoát phải in ra không? Bởi nếu in cả những dòng không có dữ liệu thì cỡ chữ sẽ rất nhỏ (1 NV có 11 dòng, 3 NV sẽ là 33 dòng + 3 dòng Tên bảng và 1 dòng tiêu đề=> tổng là 37 dòng (trong đó có nhiều ô chuỗ dài quá phải là 2 dòng mới chứa hết) nếu để 1 trang nằm ngang khổ giấy thì e rằng không chứa hết được.
2/Ở sheet cần In (tạm gọi là sheet Mau- sh này là dữ liệu từ sh Bang Cham Cong được code VBA lọc sang) thì di chuyển cột Bộ phận đến sau cột họ tên có được không? như vậy sẽ là: Mã Thẻ, Họ tên, Bộ phận, chuyên cần, rồi mới đến bảng chấm công.
3/ 1 Trang in A4 nằm ngang mà hơn 50 cột thì liệu có hợp lý không? hay là dùng 2 trang A4 để chứa hơn 50 cột ấy.
 
Đang nói thiệt mà. Cái này lẽ ra phải đưa vào mục lập trình. Chứ dò tìm và tham chiếu có liên quan gì đâu nhỉ
Vâng, là lúc em đăng bài mà đang xem ở mục dò tìm tham chiếu nên đăng nhầm mục. nhưng không biết thu hồi thế nào, đăng tiếp sợ lại thành Spam bác ạ
 
Hỏi bạn chủ thớt là
1/ những dòng
Số giờ thường 白班 100% hay
Tăng ca ngày 白班加班 150% hay
Số giờ đêm 夜班 20h- 22h : 100% hay .....
......
mà không có dữ liệu ở bất cứ ô nào từ cột F đến cột AK có cần thiết nhất khoát phải in ra không? Bởi nếu in cả những dòng không có dữ liệu thì cỡ chữ sẽ rất nhỏ (1 NV có 11 dòng, 3 NV sẽ là 33 dòng + 3 dòng Tên bảng và 1 dòng tiêu đề=> tổng là 37 dòng (trong đó có nhiều ô chuỗ dài quá phải là 2 dòng mới chứa hết) nếu để 1 trang nằm ngang khổ giấy thì e rằng không chứa hết được.
2/Ở sheet cần In (tạm gọi là sheet Mau- sh này là dữ liệu từ sh Bang Cham Cong được code VBA lọc sang) thì di chuyển cột Bộ phận đến sau cột họ tên có được không? như vậy sẽ là: Mã Thẻ, Họ tên, Bộ phận, chuyên cần, rồi mới đến bảng chấm công.
3/ 1 Trang in A4 nằm ngang mà hơn 50 cột thì liệu có hợp lý không? hay là dùng 2 trang A4 để chứa hơn 50 cột ấy.
Vâng thưa bác,
1/ toàn bộ các mục đều sẽ in ra trên trang ngang của khổ giấy A4 bác ạ, tuy rằng nó sẽ hơi nhỏ nhưng in ra vẫn đang nhìn được
2. Sheet Mau- sh có thể giữ nguyên định dạng như này được không bác? dữ liệu từ hệ thống nên em đang không muốn đổi vị trí cột ạ
3. Hiện tại em vẫn in ra trên chỉ một trang A4 ngang bác ạ
tất cả các thông số Margin [Top,Left,Right,Bottom,Header,footer] đều để là 0 để có thể tận dụng tối đa không gian giấy ạ
 
Vâng thưa bác,
1/ toàn bộ các mục đều sẽ in ra trên trang ngang của khổ giấy A4 bác ạ, tuy rằng nó sẽ hơi nhỏ nhưng in ra vẫn đang nhìn được
2. Sheet Mau- sh có thể giữ nguyên định dạng như này được không bác? dữ liệu từ hệ thống nên em đang không muốn đổi vị trí cột ạ
3. Hiện tại em vẫn in ra trên chỉ một trang A4 ngang bác ạ
tất cả các thông số Margin [Top,Left,Right,Bottom,Header,footer] đều để là 0 để có thể tận dụng tối đa không gian giấy ạ
Ý tôi là sheet để in (nó là sheet khác chứ không phải vẫn là sheet Bang Cham Cong) do vậy bạn có thể tùy nghi lựa chọn các dòng nội dung, tùy chọn vị trí các cột (thêm hoặc bớt dòng cột tùy ý) như vậy trông sẽ hợp lý và dễ xem hơn. Con không thì thuy bạn, code càng dễ.
 
Ý tôi là sheet để in (nó là sheet khác chứ không phải vẫn là sheet Bang Cham Cong) do vậy bạn có thể tùy nghi lựa chọn các dòng nội dung, tùy chọn vị trí các cột (thêm hoặc bớt dòng cột tùy ý) như vậy trông sẽ hợp lý và dễ xem hơn. Con không thì thuy bạn, code càng dễ.
vâng, em hiểu ý của bác rồi ạ
Bác cứ giữ nguyên giúp em bác nhé
 
Ý tôi là sheet để in (nó là sheet khác chứ không phải vẫn là sheet Bang Cham Cong) do vậy bạn có thể tùy nghi lựa chọn các dòng nội dung, tùy chọn vị trí các cột (thêm hoặc bớt dòng cột tùy ý) như vậy trông sẽ hợp lý và dễ xem hơn. Con không thì thuy bạn, code càng dễ.
Bác ơi,
giúp em với ạ, em muốn liên hệ với bác qua zalo nhưng không được
 
Thêm code này và chạy coi. Hãy kiểm tra trước khi in
Mã:
Sub ABC()
    Dim Dic As Object, Rng As Range, a(), i&, Max&, Key
    Set Dic = CreateObject("scripting.dictionary")
    With Sheets("Bang Cham Cong")
        If .AutoFilterMode = True Then .AutoFilterMode = False
        Set Rng = .Range("A4:AZ" & .Range("E" & Rows.Count).End(3).Row)
        a = Rng.Value
        For i = 2 To UBound(a)
            Dic(a(i, 38)) = ""
        Next
        For Each Key In Dic.Keys
            If .AutoFilterMode = True Then .ShowAllData
            .ResetAllPageBreaks
            .PageSetup.PrintArea = "$A$1:$AZ$" & iR
            .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
            Rng.AutoFilter 38, Key
            Max = WorksheetFunction.Max(.Range("A:A"))
            For i = 1 To Max Step 3
                If i > 3 Then
                    .Range("A:A").Find(i - 1, LookIn:=xlValues, LookAt:=xlWhole).Offset(11).Select
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                End If
            Next
            .PrintOut
        Next
    End With
End Sub
 
Thêm code này và chạy coi. Hãy kiểm tra trước khi in
Mã:
Sub ABC()
    Dim Dic As Object, Rng As Range, a(), i&, Max&, Key
    Set Dic = CreateObject("scripting.dictionary")
    With Sheets("Bang Cham Cong")
        If .AutoFilterMode = True Then .AutoFilterMode = False
        Set Rng = .Range("A4:AZ" & .Range("E" & Rows.Count).End(3).Row)
        a = Rng.Value
        For i = 2 To UBound(a)
            Dic(a(i, 38)) = ""
        Next
        For Each Key In Dic.Keys
            If .AutoFilterMode = True Then .ShowAllData
            .ResetAllPageBreaks
            .PageSetup.PrintArea = "$A$1:$AZ$" & iR
            .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
            Rng.AutoFilter 38, Key
            Max = WorksheetFunction.Max(.Range("A:A"))
            For i = 1 To Max Step 3
                If i > 3 Then
                    .Range("A:A").Find(i - 1, LookIn:=xlValues, LookAt:=xlWhole).Offset(11).Select
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                End If
            Next
            .PrintOut
        Next
    End With
End Sub
vâng ạ,
Em cảm ơn bác, em sẽ thử ạ
 
Thêm code này và chạy coi. Hãy kiểm tra trước khi in
Mã:
Sub ABC()
    Dim Dic As Object, Rng As Range, a(), i&, Max&, Key
    Set Dic = CreateObject("scripting.dictionary")
    With Sheets("Bang Cham Cong")
        If .AutoFilterMode = True Then .AutoFilterMode = False
        Set Rng = .Range("A4:AZ" & .Range("E" & Rows.Count).End(3).Row)
        a = Rng.Value
        For i = 2 To UBound(a)
            Dic(a(i, 38)) = ""
        Next
        For Each Key In Dic.Keys
            If .AutoFilterMode = True Then .ShowAllData
            .ResetAllPageBreaks
            .PageSetup.PrintArea = "$A$1:$AZ$" & iR
            .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
            Rng.AutoFilter 38, Key
            Max = WorksheetFunction.Max(.Range("A:A"))
            For i = 1 To Max Step 3
                If i > 3 Then
                    .Range("A:A").Find(i - 1, LookIn:=xlValues, LookAt:=xlWhole).Offset(11).Select
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                End If
            Next
            .PrintOut
        Next
    End With
End Sub
Code báo đoạn này bị lỗi
.PageSetup.PrintArea = "$A$1:$AZ$" & iR
nó không tìm được vùng để in, nếu em bỏ chữ R đi thì nó chỉ in được bộ phận đầu tiên, các bộ phận tiếp theo đều chỉ in được tiêu đề thôi ạ
các bác giúp em sửa với ạ
 
Code báo đoạn này bị lỗi
.PageSetup.PrintArea = "$A$1:$AZ$" & iR
nó không tìm được vùng để in, nếu em bỏ chữ R đi thì nó chỉ in được bộ phận đầu tiên, các bộ phận tiếp theo đều chỉ in được tiêu đề thôi ạ
các bác giúp em sửa với ạ
Chưa xem file, chưa chạy thử, nhưng khả năng là chưa khai báo iR và chưa xác định giá trị của iR.
 
Lần chỉnh sửa cuối:
Chưa xem file, chưa chạy thử, nhung khả năng là chưa khai báo iR và chưa xác định giá trị của iR.
Anh Thầy nhìn chuẩn quá. Lúc đầu có biến đó. Sau xóa đi cho nó bớt dòng code. Ai dè. hihi.
Xin đính chính lại:
Mã:
Sub ABC()
    Dim Dic As Object, Rng As Range, a(), i&, Max&, Key, iR&
    Set Dic = CreateObject("scripting.dictionary")
    With Sheets("Bang Cham Cong")
        If .AutoFilterMode = True Then .AutoFilterMode = False
        iR= .Range("A4:AZ" & .Range("E" & Rows.Count).End(3).Row)
        Set Rng = .Range("A4:AZ" & iR)
        a = Rng.Value
        For i = 2 To UBound(a)
            Dic(a(i, 38)) = ""
        Next
        For Each Key In Dic.Keys
            If .AutoFilterMode = True Then .ShowAllData
            .ResetAllPageBreaks
            .PageSetup.PrintArea = "$A$1:$AZ$" & iR
            .VPageBreaks(1).DragOff Direction:=xlToRight, RegionIndex:=1
            Rng.AutoFilter 38, Key
            Max = WorksheetFunction.Max(.Range("A:A"))
            For i = 1 To Max Step 3
                If i > 3 Then
                    .Range("A:A").Find(i - 1, LookIn:=xlValues, LookAt:=xlWhole).Offset(11).Select
                    ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
                End If
            Next
            .PrintOut
        Next
    End With
End Sub
 
Web KT
Back
Top Bottom