In liên tục nhiều form theo bảng dữ liệu

Liên hệ QC

minhle166

Thành viên mới
Tham gia
26/3/10
Bài viết
19
Được thích
3
Chào anh/ chị thành viên GPE!

Em có 1 bảng dữ liệu khoảng 20.000 dòng như file mẫu đính kèm bao gồm 1 số thông tin như sau:
- Mã nhân viên, họ tên, bộ phận, chuyền, ngày vào công ty
- Các cột ngày tháng (từ 01/01/2018 - 31/12/2018)
- Tương ứng với các ô đánh dấu "x" là ngày người lao động đăng ký nghỉ phép

Sheet "Print" là mẫu "Đơn đề nghị" em cần in ạ!

Em cần in đơn đề nghị cho tất cả những người có stick dấu "x" dựa trên các thông tin đã cho bên sheet "AL Plan" từ 01/01/2018 -> 31/12/2018
Các thông tin cần lấy dữ liệu để in em bôi màu bên sheet "Print" ạ.
- Trường hợp nếu NLĐ chỉ đăng ký nghỉ 1 ngày thì trên form sẽ lấy 1 ngày, VD: chỉ nghỉ ngày 01/01/2018 thì trên form lấy Ngày: 01/01/2018 Đến ngày: 01/01/2018
- Trường hợp nếu NLĐ đăng ký nghỉ nhiều ngày liền nhau thì trên form lấy theo ngày liền nhau, VD: nghỉ 07/01/2018-09/01/2018 thì trên form lấy Ngày: 07/01/2018 Đến ngày: 09/01/2018
VD: Trong mẫu đơn bạn Bùi Thị Trang đăng ký nghỉ từ ngày 07/01/2018 đến ngày 09/01/2018
Làm sao để dùng 1 lệnh in có thể in cho toàn bộ danh sách hoặc là tiết kiệm thời gian in ít nhất có thể.

Em cảm ơn nhiều ạ!
 

File đính kèm

  • Annual leave plan.xlsx
    15.6 KB · Đọc: 13
Rất mong anh/chị bớt chút thời gian giúp em với ạ!
 
Chào anh/ chị thành viên GPE!

Em có 1 bảng dữ liệu khoảng 20.000 dòng như file mẫu đính kèm bao gồm 1 số thông tin như sau:
- Mã nhân viên, họ tên, bộ phận, chuyền, ngày vào công ty
- Các cột ngày tháng (từ 01/01/2018 - 31/12/2018)
- Tương ứng với các ô đánh dấu "x" là ngày người lao động đăng ký nghỉ phép

Sheet "Print" là mẫu "Đơn đề nghị" em cần in ạ!

Em cần in đơn đề nghị cho tất cả những người có stick dấu "x" dựa trên các thông tin đã cho bên sheet "AL Plan" từ 01/01/2018 -> 31/12/2018
Các thông tin cần lấy dữ liệu để in em bôi màu bên sheet "Print" ạ.
- Trường hợp nếu NLĐ chỉ đăng ký nghỉ 1 ngày thì trên form sẽ lấy 1 ngày, VD: chỉ nghỉ ngày 01/01/2018 thì trên form lấy Ngày: 01/01/2018 Đến ngày: 01/01/2018
- Trường hợp nếu NLĐ đăng ký nghỉ nhiều ngày liền nhau thì trên form lấy theo ngày liền nhau, VD: nghỉ 07/01/2018-09/01/2018 thì trên form lấy Ngày: 07/01/2018 Đến ngày: 09/01/2018
VD: Trong mẫu đơn bạn Bùi Thị Trang đăng ký nghỉ từ ngày 07/01/2018 đến ngày 09/01/2018
Làm sao để dùng 1 lệnh in có thể in cho toàn bộ danh sách hoặc là tiết kiệm thời gian in ít nhất có thể.

Em cảm ơn nhiều ạ!
Bạn chạy code này xem đúng không nhé.
Mã:
Sub innhanh()
    Dim arr, i As Long, j As Long, lr As Long, dk As Long
    With Sheets("AL Plan")
        lr = .Range("B" & Rows.Count).End(xlUp).Row
        arr = .Range("B4:NH" & lr).Value
    End With
    With Sheets("Print")
        For i = 2 To UBound(arr, 1)
            For j = 6 To UBound(arr, 2)
                If UCase(arr(i, j)) = "X" Then
                  If dk = 0 Then
                   .Range("C9").Value = arr(i, 3)
                   .Range("C10").Value = arr(i, 4)
                   .Range("i9").Value = arr(i, 1)
                   .Range("I10").Value = arr(i, 5)
                   .Range("B12").Value = arr(1, j)
                   .Range("G12").Value = arr(1, j)
                    dk = 1
                  Else
                    .Range("G12").Value = arr(1, j)
                  End If
                 ElseIf dk = 1 Then
                     dk = 0
                     '.PrintPreview
                     .PrintOut
                 End If
            Next j
       Next i
    End With
End Sub
 

File đính kèm

  • Annual leave plan.xlsm
    22.9 KB · Đọc: 14
Bạn chạy code này xem đúng không nhé.
Mã:
Sub innhanh()
    Dim arr, i As Long, j As Long, lr As Long, dk As Long
    With Sheets("AL Plan")
        lr = .Range("B" & Rows.Count).End(xlUp).Row
        arr = .Range("B4:NH" & lr).Value
    End With
    With Sheets("Print")
        For i = 2 To UBound(arr, 1)
            For j = 6 To UBound(arr, 2)
                If UCase(arr(i, j)) = "X" Then
                  If dk = 0 Then
                   .Range("C9").Value = arr(i, 3)
                   .Range("C10").Value = arr(i, 4)
                   .Range("i9").Value = arr(i, 1)
                   .Range("I10").Value = arr(i, 5)
                   .Range("B12").Value = arr(1, j)
                   .Range("G12").Value = arr(1, j)
                    dk = 1
                  Else
                    .Range("G12").Value = arr(1, j)
                  End If
                 ElseIf dk = 1 Then
                     dk = 0
                     '.PrintPreview
                     .PrintOut
                 End If
            Next j
       Next i
    End With
End Sub
Em cảm ơn ạ, em test thử rồi chạy ngon lành rồi ạ.
 
Em nhờ anh/chị giúp em thêm một chút nữa ạ.

Vẫn là file dữ liệu trên em muốn làm thêm 1 sheet "SUM" với các điều kiện như sau:
- Căn cứ vào cột mã nhân viên và các dấu stick "x" bên sheet "AL Plan" để điền ngày tháng tương ứng ở dòng số 4 cho sheet "SUM" như VD mẫu trong file ạ
- Vì tối đa mỗi người sẽ có 16 ngày phép tương ứng với 16 dấu "x" nên bên "SUM" sẽ có 16 cột tương ứng.

Monh anh/chị giúp em với ạ, em cảm ơn!
 

File đính kèm

  • Annual leave plan (1).xlsm
    26.5 KB · Đọc: 2
Em nhờ anh/chị giúp em thêm một chút nữa ạ.

Vẫn là file dữ liệu trên em muốn làm thêm 1 sheet "SUM" với các điều kiện như sau:
- Căn cứ vào cột mã nhân viên và các dấu stick "x" bên sheet "AL Plan" để điền ngày tháng tương ứng ở dòng số 4 cho sheet "SUM" như VD mẫu trong file ạ
- Vì tối đa mỗi người sẽ có 16 ngày phép tương ứng với 16 dấu "x" nên bên "SUM" sẽ có 16 cột tương ứng.

Monh anh/chị giúp em với ạ, em cảm ơn!
Bạn xem đúng chưa nhé.
 

File đính kèm

  • Annual leave plan (1).xlsm
    29 KB · Đọc: 9
Web KT

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

Back
Top Bottom