Trang 2/5 đầuđầu 1 2 3 4 5 cuốicuối
Hiển thị kết quả tìm kiếm từ 11 đến 20 trên tổng số: 48

Ðề tài: Tham chiếu giữa hợp đồng và bản chấm công

  1. [Bài đăng lại] . . . . (Chả hiểu sao lại không thấy ở đây?)

    (-) Bạn kiểm tra theo các trang tính của file.

    (*) Chuyện này không khó, nêu biết trước được bạn sẽ dời 4 cột này về đâu ở đằng sau?

    (?) Còn iêu cầu thứ 2 thì làm theo tháng hay làm theo cả năm? & nếu vậy cần có danh sách công ấn định trước của mỗi người theo từng tháng; Danh sách đó sẽ ở đâu trong file & sẽ như thế nào?
    thay đổi nội dung bởi: Hoang2013, 22-03-17 lúc 03:59 PM Lý do: Xin xem file ở trang 3

  2. Cám ơn bạn hoang2013 rất nhiều, nhờ bạn nhiệt tình giúp đỡ, ý tưởng bảng kết hợp hợp đồng, chấm công, lương công trường dần thành hình (như file mình đính kèm dưới đây).
    Tuy nhiên do sự yếu kém về VBA nên có 1 số vấn đề mình chưa tự xử lý được, mong bạn giúp đỡ:
    - Mình chèn thêm cột ở sheet DATA rồi đấy, lại phải nhờ bạn chỉnh lại macro ( mình còn muốn chèn thêm hàng nữa cơ nhưng sợ loạn cái bảng).
    - Mình chèn thêm sheet bảng lương và bảng thanh toán lương (mình mới ví dụ cho tháng 1) có vẻ không ảnh hưởng đến macro. Nhưng mà workbook này có 12 sheet công, 12 sheet lương, 12 sheet thanh toán lương,1 sheet data tổng cộng 37 sheet có phải quá ư công kềnh? bạn có thể góp ý cho mình ý tưởng nào cho gọn bớt không.
    - Nếu được bạn có thể chỉ cho mình cách tự chỉnh macro nhửng thứ nhỏ nhỏ như thêm hàng thêm cột vào sheet DATA, sheet chấm công, không mấy cái nhỏ nhỏ cứ làm phiền bạn thật ngại quá.
    Thân ái.
    thay đổi nội dung bởi: suzuki tadayoshi, 19-03-17 lúc 10:06 PM

  3. Chỉnh macro theo cột rồi đây:

    Bạn chép hết nội dung này đè lên cái cũ & chạy thử
    PHP Code:
    Option Explicit
    Const Col As Byte 8                                   '*'
    Const MyErr As Double vbObjectError 512
    Sub NgayCQ
    ()
     
    Dim Sh As WorksheetCls As Range
     Dim SoNgay 
    As IntegerAs IntegerMyColor As Byte   '*'
     
    Dim fDat As DatetDat As DatelDat As Date           ' '
     
    Dim ShName As String
     On Error 
    GoTo LoiCT
     
    For Each Sh In ThisWorkbook.Worksheets
        
    If Left(Sh.Name1) = "T" And IsNumeric(Right(Sh.Name1)) Then
            J 
    Sh.[c8].CurrentRegion.Rows.Count
            Sh
    .[c8].Resize(J32).Interior.ColorIndex 0
        End 
    If
    2 Next Sh
     Sheets
    ("Data").Select
     
     
    For Each Cls In Range([B4], [B4].End(xlDown))
        
    fDat Cls.Offset(, Col 2).Value                  '*'
        
    lDat Cls.Offset(, Col 3).Value                  '*'
        
    If Year(lDat) > Year(fDatThen lDat DateSerial(Year(fDat), 1231)
        If 
    lDat Date Then lDat Date
        SoNgay 
    lDat fDat
        
    If SoNgay 365 Then SoNgay 365
        
    For 0 To SoNgay
            tDat 
    fDat
            ShName 
    "T" Right("0" CStr(Month(tDat)), 2)
            
    Set Sh ThisWorkbook.Worksheets(ShName)
            If 
    Year(tDat) <> Sh.[c4].Value Then
                
    Exit For
            Else
                
    MyColor 34 Month(tDatMod 6
                Sh
    .Cells(Cls.Row 4Day(tDat)).Interior.ColorIndex MyColor
    3        End 
    If
    GPE0:    Next J
        fDat 
    Cls.Offset(, Col 4).Value                  '*'
        
    lDat Cls.Offset(, Col 5).Value                  '*'
        
    If Year(lDat) > Year(fDatThen lDat DateSerial(Year(fDat), 1231)
        If 
    lDat Date Then lDat Date
        SoNgay 
    lDat fDat
        
    If SoNgay 365 Then SoNgay 365
            
    For 0 To SoNgay
                tDat 
    fDat
                ShName 
    "T" Right("0" CStr(Month(tDat)), 2)
    7            Set Sh ThisWorkbook.Worksheets(ShName)
    8            If Year(tDat) <> Sh.[c4].Value Then
                    
    Exit For
                Else
                    
    MyColor 34 Month(tDatMod 6
                    Sh
    .Cells(Cls.Row 4Day(tDat)).Interior.ColorIndex MyColor
                End 
    If
    GPE1:    Next J
     Next Cls
    Err_
    :           Exit Sub
    LoiCT
    :
        If 
    Err 9 Then
            
    If Erl <= 3 Then GoTo GPE0 Else GoTo GPE1
        
    ElseIf Err MyErr Then
            MsgBox Err
    :                 GoTo Err_
        
    Else
            
    MsgBox Err, , Erl:          Resume Next
        End 
    If
    End Sub 
    Những mong là khỏi gởi file lên.

    Còn chuyện thêm dòng là thêm làm sao?
    Mình biết rằng có thể có những người chỉ hợp đồng lần I trong năm (không có lần sau) hay ngược lại là có người chỉ tuyển hợp đồng lần sau trong năm

    Như vậy sẽ phải có danh sách tất cả công nhân viên của 2 lần hợp đồng trong mọi trang tính.

    Thêm 1 chú í nữa quan trọng là: Tên các trang tính phát sinh sau không thể là TT01,. . . TT11, TT12
    Mà phải là 01TT, . . . 11TT, 12TT

  4. Chép đè đoạn CODE mới chạy ok lắm bạn. Từ nay bạn khỏi gửi file lên cho tốn dung lượng, có code mình chép lên là chạy ha
    - Chuyện thêm dòng đó chỉ là khi mình điều chỉnh form mẫu, chứ những vấn đề chính bạn đã giải quyết giùm mình rồi. Bởi vì khi mình thêm 1 hàng ở trên nhân viên số 1 ở sheet data hoặc ở sheet chấm công thì macro không còn chuẩn nữa (vấn đề này bạn không cần quan tâm cũng được vì cơ bản mọi thứ đã ổn)
    - Bạn nói chính xác là phải có đủ nhân viên ở mọi trang tính, vấn đề này theo mình nghĩ là phải chỉnh thủ công ở bảng chấm công, khi in ấn dấu bớt những NV không làm trong tháng đó, bạn nghĩ sao...
    - Trang tính phát sinh đặt tên là 01TT thay vì TT01 mục đính là tránh nhầm lẫn với sheet T01 hay còn mục đích nào khác vậy bạn?
    - Mình chỉ hơi ngại là nếu phát sinh thêm 1 dòng hay 1 cột nữa chả lẽ lại phải lên nhờ bạn chỉnh giùm nên mình hỏi cách chỉnh CODE là vì vậy, vấn đề này có khó không bạn.
    Thân.

  5. Mình làm xong file này tối qua, Bạn vận hành & cho ý kiến cuối cùng.

    1./ Code đã thu gọn 2 trong 1: Làm luôn chuyện tô màu & ghi công án chừng cho tất cả các ngày trong hợp đồng & trừ thứ 7 hay CN

    2./ "phải chỉnh thủ công ở bảng chấm công, khi in ấn dấu bớt những NV không làm trong tháng đó, bạn nghĩ sao..."
    Làm vậy sẽ an toàn hơn với bạn, tuy có mất thời gian thêm đôi chút.

    3./ "nếu phát sinh thêm 1 dòng hay 1 cột nữa chả lẽ lại phải lên nhờ bạn chỉnh giùm nên mình hỏi cách chỉnh CODE là vì vậy, vấn đề này có khó không bạn."
    Thì bạn đối chiếu giữa macro file cũ & mới này (dòng phát biểu về Const í) sẽ nghiệm ra vấn đề thôi;

    4./ 2 bảng lương & tiền công thì bạn chọn từng tháng lần lượt in thôi;
    Mình không có máy in để thử cho bạn, nên không dám viết tự động in hết 12 tháng cho bạn được.

    5./ Rất vui nếu được hỗ trợ bạn trong thời gian tới có gì đó phát sinh
    thay đổi nội dung bởi: Hoang2013, 22-03-17 lúc 03:57 PM Lý do: Xin các bạn xem file ở trang 3

  6. Chào bạn hoang2013, Cám ơn bạn đã giúp đỡ mình nhiệt tình. Mình có vài điều muốn nói như sau:
    1./ Code 2 trong 1 của bạn chạy rất chuẩn, tuy nhiên không hiểu sao lần này chạy macro lâu hơn hẳn những lần trước (có lẽ là do macro khá dài hả bạn). Vì ở công trường mình làm cả T7, CN bạn có thể chỉ mình sửa CODE chỗ nào không.
    2./Chỉnh thủ công bảng chấm công và bảng lương thì mình hoàn toàn đồng ý, nhưng nếu viết CODE nhân viên nào không làm trong tháng đó thì ẩn đi liệu có khả thi?
    3./ Mình đang đối chiếu 5 đoạn CODE từ đầu bạn giúp mình đến giờ hi vọng sẽ biết được nhiều điều, nhưng vì trình VBA mình còn kém nên...
    4./ Mình cài add in "print multiple sheets" có thể in nhiều sheet cùng lúc, nếu làm nhiều bảng lương in 1 phát luôn nhưng workbook cồng kềnh. Cách làm của bạn thì quá gọn dĩ nhiên bảng lương thì vẫn phải hiệu chỉnh "tháng" rồi in từng sheet một, có cách nào tối ưu in hơn không bạn.
    Bạn đã quá nhiệt tình giúp đỡ, mình khó có thể đòi hỏi hơn. Tuy nhiên nếu bạn có thời gian mình cũng xin trình bày ý tưởng cho file excel được hoàn thiện.(Mình có thêm thắt file đôi chút, bạn xem qua nhé)
    Thân chào.
    thay đổi nội dung bởi: suzuki tadayoshi, 21-03-17 lúc 03:29 PM

  7. Chào bạn hoang2013, Cám ơn bạn đã giúp đỡ mình nhiệt tình. Mình có vài điều muốn nói như sau:
    1./ Code 2 trong 1 của bạn chạy rất chuẩn, tuy nhiên không hiểu sao lần này chạy macro lâu hơn hẳn những lần trước (có lẽ là do macro khá dài hả bạn). Vì ở công trường mình làm cả T7, CN bạn có thể chỉ mình sửa CODE chỗ nào không.
    Đảm bảo là không lâu hơn macro lần gần kế do chỉ thêm 1 lệnh đánh dấu đi làm (từ T2 đến T6) mà thôi.
    File của bạn xài nhiều công thức quá đấy thôi. Mà bạn có xài Link đến các file khác không đó?
    Hiện giờ số công khoảng ~24 công; Nếu thêm cả T7 & CN nữa thì công sẽ là 30 ư?
    Về việc này chắc bạn nên thay đổi bằng tay thôi . Dời công đi làm từ thứ này sang thứ khác & chỉ ít thôi mà.
    Chứ chỉ cho bạn thay trong macro thì khi đó công dư bạn cũng phải xóa bằng tay, cũng tốn thời gian vậy thôi.

    2./
    2.1. Chỉnh thủ công bảng chấm công và bảng lương thì mình hoàn toàn đồng ý, nhưng nếu viết CODE nhân viên nào không làm trong tháng đó thì ẩn đi liệu có khả thi?
    2.2. Ý tưởng cho file excel được hoàn thiện.(Mình có thêm thắt file đôi chút, bạn xem qua nhé).
    Bạn cần chờ & cho biết cần in các trang T01..T12 hay chỉ trang bảng lương thôi?
    & mình sẽ xem file ngay sau đây


    3./ ...
    4./ Mình cài add in "print multiple sheets" có thể in nhiều sheet cùng lúc, nếu làm nhiều bảng lương in 1 phát luôn nhưng workbook cồng kềnh. Cách làm của bạn thì quá gọn dĩ nhiên bảng lương thì vẫn phải hiệu chỉnh "tháng" rồi in từng sheet một, có cách nào tối ưu in hơn không bạn.
    Đã nói với bạn rồi, Mình không thể viết "chay"; Bạn có thể nhờ người khác trên Cộng đồng giúp việc này.
    thay đổi nội dung bởi: Hoang2013, 20-03-17 lúc 07:42 PM

  8. Chào buổi tối bạn Hoang2013!
    1./Vấn đề công, suy nghĩ lại gì thì gì chừa T7, CN lại như bạn vẫn hợp lí hơn cả...Tại sao macro chạy chậm để mình xem lại công thức và link chắc có vấn đề.
    2./Phục vụ làm chứng từ vì vậy mình in tất cả hợp đồng lao động, toàn bộ bảng chấm công và bảng lương tất cả 12 tháng, nhiều trang tính mà phải chỉnh thủ công mình nghĩ cũng ngốn thời gian nhỉ (chưa kể mình phải làm nhiều công trường giống như ví dụ)
    3./Xin lỗi bạn Hoàng mình biết bạn ko viết "chay" được mà, ý mình hỏi bạn nên làm như thế nào? Theo như Bạn đã trả lời, chắc chắn sắp tới mình sẽ đăng câu hỏi để các cao thủ trên diễn đàn trợ giúp.
    4./ À cho mình hỏi hình thức chỉ có 1 bảng giống như sheet CTLg ta chỉ cần hiệu chỉnh tháng là bảng tính hiệu chỉnh theo thì gọi là gì.
    Cám ơn bạn, chúc buổi tối vui vẻ.

  9. A. Các bước thử nghiệm để tăng tốc cho macro gồm:
    1./ (Tại trang ‘Data’): Cột [A] ta thay công thức này đi (=> Value)
    2./ Tại cột [C] của các trang tính họ ‘T’ (đang có công thức VLOOKUP()) ta nên đề câu lệnh chuyển hết chúng sang dạng Value
    Có thể chuyển chúng chỉ ngay lần chạy đầu; Sau đó vô hiệu hóa dòng lệnh đó trong macro đi
    Cần thêm 1 dòng lệnh vô đoạn Code
    PHP Code:
    For Each Sh In ThisWorkbook.Worksheets
        
    If Left(Sh.Name1) = "T" And IsNumeric(Right(Sh.Name1)) Then
            J 
    Sh.[c8].CurrentRegion.Rows.Count
            Sh
    .[c8].Resize(J32).Interior.ColorIndex 0
            Sh
    .[d8].Resize(J31).Value ""
        
    End If
    2 Next Sh 
    (Vô hiệu hóa bằng dấu nháy đơn ở đầu & cuối dòng lệnh muốn vô hiệu hóa;
    Chuyện này có thể xài từ ‘Rem’ nếu bạn thích)
    3./ Cột [D] trang ‘CTLg’ thay vì VLOOKUP() bạn có thể xài công thức khác như =DATA!R4 (cho ô [D6]; . . . . (Tham khảo thêm tại cột [C] của trang ‘Luong’

    B Vấn đề in ấn toàn bộ các trang tính
    Mình đã hứa sẽ cùng bạn tiếp tục trong những ngày tới để ẩn đi những dòng không dữ liệu.

    C” chỉ cần hiệu chỉnh tháng là bảng tính hiệu chỉnh theo thì gọi là gì?
    Mình chưa nghĩ ra là gì trong những cụm từ sau:
    ‘Cập nhật’, ‘Cập nhật số liệu tháng’, ‘Làm tươi dữ liệu’, . . . .
    Tựu chung nó là 1 macro sự kiện gắn với ô có ‘Validation’ để chọn tháng. Macro này có nhiệm vụ thay mới số liệu của cột [E] trang tính này theo số liệu cột [AL] của trang tính lien quan đến tháng được chọn.

    Chúc bạn ngày vui & hiệu quả!

  10. Đây là macro sự kiện đã được bổ sung để ẩn các dòng không dữ liệu về công.

    PHP Code:
    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
     If 
    Not Intersect(Target, [O2]) Is Nothing Then
        Dim ShName 
    As String
        Dim Sh 
    As WorksheetCls As RangeArr()
        
    Dim J As IntegerRws As Long
        
        Rws 
    = [c6].CurrentRegion.Rows.Count
        Rows
    ("6:" Rws).Hidden False
        ShName 
    "T" Right("0" CStr(Target.Value), 2)
        
    Set Sh ThisWorkbook.Worksheets(ShName)
        
    Arr() = Sh.[c8].Resize(Sh.[c8].CurrentRegion.Rows.Count33).Value
        Application
    .ScreenUpdating False
        
    For Each Cls In Range([c6], [c6].End(xlDown))
            For 
    1 To UBound(Arr())
                If 
    Cls.Value Arr(J1Then
                    
    If Arr(J33) > 0 Then
                        Cls
    .Offset(, 2).Value Arr(J33)
                    Else
                        
    Cls.EntireRow.Hidden True
                    End 
    If
                
    End If
            
    Next J
        Next Cls
        Application
    .ScreenUpdating True
     End 
    If
    End Sub 

Trang 2/5 đầuđầu 1 2 3 4 5 cuốicuối

Thông tin về chủ đề này

Users Browsing this Thread

Hiện có 2 người đang xem đề tài này. (1 thành viên và 1 khách)

  1. suzuki tadayoshi

Bookmarks

Bookmarks

Quyền Sử Dụng Ở Diễn Ðàn

  • Bạn không thể đăng đề tài mới
  • Bạn không thể đăng trả lời
  • Bạn không thể đăng file đính kèm.
  • Bạn không thể sửa bài viết.
  •