返回列表 上一主題 發帖

[發問] 請問出勤系統設計

本帖最後由 c_c_lai 於 2016-9-8 19:59 編輯

回復 76# v03586
找到原因了。
  1. Sub Main()       '  使用 Main 程式前, 需先指定 『xDay』 的日期
  2.     Dim e As Variant, Rng As Range, cts As Integer      '  , loc As String
  3.    
  4.     Set 回報班別 = CreateObject("SCRIPTING.DICTIONARY")
  5.     Set 人員回報 = CreateObject("SCRIPTING.DICTIONARY")
  6.    
  7.     人力資料讀取
  8.     Main_回報清除
  9.    
  10.    
  11.     For cts = 1 To 2   '  第一階段(cts=1)以正常班別為判斷基準;第二階段(2)則純以加班班別為判斷基準。
  12.         Main_回報資料 (cts)                     '  2016/09/01 Modied by C. C. Lai
  13.         
  14.         If 回報班別.Count = 0 Then
  15.             Msg = True
  16.             MsgBox Format(xDay, "YYYY月MM份 !") & " 沒有出勤人員"
  17.             Exit Sub
  18.         End If
複製代碼
在第二階段,有可能全無 "延長加班", 故應隨即跳離本執行中模組。
修正為:
  1. Sub Main()       '  使用 Main 程式前, 需先指定 『xDay』 的日期
  2.     Dim e As Variant, Rng As Range, cts As Integer      '  , loc As String
  3.    
  4.     Set 回報班別 = CreateObject("SCRIPTING.DICTIONARY")
  5.     Set 人員回報 = CreateObject("SCRIPTING.DICTIONARY")
  6.    
  7.     人力資料讀取
  8.     Main_回報清除
  9.    
  10.    
  11.     For cts = 1 To 2   '  第一階段(cts=1)以正常班別為判斷基準;第二階段(2)則純以加班班別為判斷基準。
  12.         Main_回報資料 (cts)                     '  2016/09/01 Modied by C. C. Lai
  13.         
  14.         If 回報班別.Count = 0 Then
  15.             Msg = True
  16.             [color=Red]If cts = 1 Then[/color]
  17.                 MsgBox Format(xDay, "YYYY月MM份 !") & " 沒有出勤人員"
  18.             [color=Red]ElseIf cts = 2 Then[/color]   '  在第二階段,有可能全無 "延長加班", 故隨即跳離本執行中模組。
  19.                 [color=Red]Msg = False
  20.             End If[/color]
  21.             Exit Sub
  22.         End If
複製代碼

TOP

回復 76# v03586
會出現『沒有出勤人員』,是因為你目前的
『出勤資料庫』無十月份的出勤紀錄。
你可以檢查一下你的『出勤資料庫』。

TOP

回復 75# c_c_lai


    感謝c_c_lai 的協助
  今天測試大部分功能皆完成, 唯一一個小問題不知道是否是判斷錯誤
    假設我日期選別的月份(預排出勤) 選擇回報時, 會出現『沒有出勤人員』
   但實際上是有更新出勤的!!! , 只有跨月份出現這樣問題

TOP

回復 74# v03586
這是我最近修正後的 (Relaese) 版本 :
人員人力回報表0907R1.rar (393.32 KB)

TOP

本帖最後由 v03586 於 2016-9-7 13:27 編輯

回復 73# c_c_lai


    c_c_lai 大大, 完全正確!!! 請問這樣要如何調整呢?

TOP

回復 72# v03586
是這樣嗎? 這就是我感覺困惑的觀念點:

TOP

回復 71# GBKEE
回復 68# c_c_lai


    延長加班部分有些許問題, 我這次整理成用顏色來區別, 不知道怎樣的解釋, 是否比較容易辨別

TOP

回復 67# v03586


更新版本

    Ex.zip (417.46 KB)
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 c_c_lai 於 2016-9-6 16:47 編輯

回復 67# v03586
你提及的 "人力資料庫" 排序問題:
  1. Private Sub 確認_Click()
  2.     Dim Rng As Range, sh As Range, i As Integer
  3.    
  4.     With Worksheets("人力資料庫")
  5.         Set Rng = .Range("C:C").Find(人員工號.Value, LookIn:=xlValues, LookAt:=xlWhole)
  6.         If Not Rng Is Nothing Then                 '  人員工號已存在
  7.         '
  8.         '
  9.         '
  10.         '
  11.         '
  12.         End If
  13.         
  14.         '  依班別、領班、組別 排序
  15.         With Range(.Range("A1"), .Range("J" & .Range("A" & Rows.Count).End(xlUp).Row))
  16.             .Sort key1:=.Cells(1, 1), key2:=.Cells(1, 2), Order1:=xlAscending, key3:=.Cells(1, 5), Order3:=xlDescending, Header:=xlYes
  17.         End With
  18.     End With
  19.    
  20.     Call 清空_Click
  21.     MsgBox "資料異動完成"
  22. End Sub
複製代碼

TOP

本帖最後由 c_c_lai 於 2016-9-6 16:47 編輯

回復 67# v03586
EX:  修正提案 by  2016/9/5   v03586
假設 1ST 總人力 75人 V 組 25人 , P 組 23人  , K組 26人。
今天離職一位 1ST K 組人員, 點選人員回報功能鍵後;
總人力應該由 75人變更為 74,  K 組應同時調整異動為 25人。

表單 (DA編輯人員):
  1. Option Explicit

  2. Dim 復職旗標 As Boolean        '  如該員業已離職,而於事後又申請復職

  3. Private Sub 異動班別_Click()
  4.     If 異動班別.Value = True Then
  5.         異動_班別.Enabled = True
  6.     Else
  7.         異動_班別.Enabled = False
  8.     End If
  9. End Sub

  10. Private Sub 異動所屬領班_Click()
  11.     If 異動所屬領班.Value = True Then
  12.         異動領班.Enabled = True
  13.     Else
  14.         異動領班.Enabled = False
  15.     End If
  16. End Sub

  17. Private Sub 專長_Change()
  18.     Dim ar As Variant, sp As Variant
  19.    
  20.     ar = Array("DA", "Sub", "EC", "PL", "MH", "PT", "代理人")

  21.     專長1.Clear
  22.     專長2.Clear
  23.    
  24.     For Each sp In ar
  25.         If sp <> 專長 Then 專長1.AddItem sp
  26.     Next
  27. End Sub

  28. Private Sub 班別_Change()
  29.     領班.Clear
  30.    
  31.     If 班別 = "1ST" Then                         '  1ST 領班
  32.         領班.AddItem "宋小小"
  33.         領班.AddItem "林小小"
  34.     End If
  35.    
  36.     If 班別 = "2ND" Then                         '  2ND 領班
  37.         領班.AddItem "蔡小小"
  38.         領班.AddItem "洪小小"
  39.     End If
  40.    
  41.     If 班別 = "3RD" Then                         '  3RD 領班
  42.         領班.AddItem "顏小小"
  43.         領班.AddItem "林中小"
  44.     End If
  45. End Sub

  46. Private Sub 專長1_Change()
  47.     Dim ar As Variant, sp As Variant
  48.    
  49.     ar = Array("DA", "Sub", "EC", "PL", "MH", "PT", "代理人")

  50.     專長2.Clear
  51.    
  52.     For Each sp In ar
  53.         If sp <> 專長 And sp <> 專長1 Then 專長2.AddItem sp
  54.     Next
  55. End Sub

  56. Private Sub 異動_班別_Change()
  57.     異動領班.Clear
  58.    
  59.     If 異動_班別 = "1ST" Then                    '  異動 1ST 領班
  60.         異動領班.AddItem "宋小小"
  61.         異動領班.AddItem "林小小"
  62.     End If
  63.    
  64.     If 異動_班別 = "2ND" Then                    '  異動 2ND 領班
  65.         異動領班.AddItem "蔡小小"
  66.         異動領班.AddItem "洪小小"
  67.     End If
  68.    
  69.     If 異動_班別 = "3RD" Then                    '  異動 3RD 領班
  70.         異動領班.AddItem "顏小小"
  71.         異動領班.AddItem "林中小"
  72.     End If
  73. End Sub

  74. Private Sub 復職_Click()
  75.     If Len(人員工號.Text) = 4 And 復職 Then 填入資料
  76. End Sub

  77. Private Sub 確認_Click()
  78.     Dim Rng As Range, sh As Range, i As Integer
  79.    
  80.     With Worksheets("人力資料庫")
  81.         Set Rng = .Range("C:C").Find(人員工號.Value, LookIn:=xlValues, LookAt:=xlWhole)
  82.         If Not Rng Is Nothing Then                 '  人員工號已存在
  83.             If 異動班別.Value = True And (異動_班別.Value = "" Or 異動_班別.Value = "請選擇") Then
  84.                 MsgBox "勾選異動班別,請選擇要異動的班別!"
  85.                 Exit Sub
  86.             ElseIf 異動班別.Value = True Then
  87.                 .Cells(Rng.Row, 1) = 異動_班別.Value
  88.             ElseIf 異動班別.Value = False Then
  89.                 .Cells(Rng.Row, 1) = 班別.Value
  90.             End If
  91.                
  92.             If 異動所屬領班.Value = True And (異動_班別.Value = "" Or 異動_班別.Value = "請選擇") Then
  93.                 MsgBox "勾選異動異動所屬領班,請選擇要異動的領班!"
  94.                 Exit Sub
  95.             ElseIf 異動所屬領班.Value = True Then
  96.                 .Cells(Rng.Row, 2) = 異動領班.Value
  97.             ElseIf 異動所屬領班.Value = False Then
  98.                 .Cells(Rng.Row, 2) = 領班.Value
  99.             End If
  100.             
  101.             .Cells(Rng.Row, 3) = 人員工號.Value    '  工號
  102.             .Cells(Rng.Row, 4) = 姓名.Value        '  姓名
  103.             
  104.             If V.Value = True Then
  105.                 .Cells(Rng.Row, 5) = "V"
  106.             ElseIf P.Value = True Then
  107.                 .Cells(Rng.Row, 5) = "P"
  108.             ElseIf K.Value = True Then
  109.                 .Cells(Rng.Row, 5) = "K"
  110.             End If
  111.             
  112.             .Cells(Rng.Row, 6) = 到職日.Value      '  到職日
  113.             .Cells(Rng.Row, 7) = 專長.Value        '  主要專長
  114.             .Cells(Rng.Row, 8) = 專長1.Value       '  專長1
  115.             .Cells(Rng.Row, 9) = 專長2.Value       '  專長2
  116.             
  117.             Set sh = Worksheets("人員回報").[D4]
  118.             If .Cells(Rng.Row, 1) = "2ND" Then     '  班別
  119.                 Set sh = sh.Offset(23)             '  = [D27]
  120.             ElseIf .Cells(Rng.Row, 1) = "3RD" Then
  121.                 Set sh = sh.Offset(46)             '  = [D50]
  122.             End If

  123.             If 離職 = True Then
  124.                 '  Rows(rng.Row & ":" & rng.Row).Select
  125.                 '  Selection.Delete Shift:=xlUp
  126.                 '  Sheets("操作介面").Select
  127.                 '  員工請辭後,其員工資料暫不予以刪除;只在「備註欄」內記載「離職」事實。
  128.                 .Cells(Rng.Row, 10) = "該員已於 " & Format(Date, "YY/MM/DD") & " 離職"

  129.                 sh.Offset(1, 1) = sh.Offset(1, 1) - 1
  130.                 i = Application.Match(UCase(.Cells(Rng.Row, 5)), Array("V", "P", "K"), 0) '  **歸納組別
  131.                 sh.Offset(i) = sh.Offset(i) - 1
  132.             Else
  133.                 If 復職旗標 = True Then
  134.                     sh.Offset(1, 1) = sh.Offset(1, 1) + 1
  135.                     i = Application.Match(UCase(.Cells(Rng.Row, 5)), Array("V", "P", "K"), 0) '  **歸納組別
  136.                     sh.Offset(i) = sh.Offset(i) + 1
  137.                     復職旗標 = False
  138.                 End If
  139.                
  140.                 .Cells(Rng.Row, 10) = 備註.Value       '  Remark
  141.             End If
  142.         End If
  143.     End With
  144.    
  145.     Call 清空_Click
  146.     MsgBox "資料異動完成"
  147. End Sub

  148. Private Sub 清空_Click()
  149.     到職日.Value = ""
  150.     備註.Value = ""
  151.     人員工號.Value = ""
  152.     姓名.Value = ""
  153.     班別.Value = ""
  154.     領班.Value = ""
  155.     專長.Value = ""
  156.     專長1.Value = ""
  157.     專長2.Value = ""
  158.     離職.Value = False
  159.     人員工號.Enabled = True
  160.     確認.Enabled = False
  161. End Sub

  162. Private Sub 取消_Click()
  163.     Unload Me
  164. End Sub

  165. Private Sub 填入資料()
  166.     Dim Rng As Range
  167.    
  168.     復職旗標 = False
  169.    
  170.     With Worksheets("人力資料庫")
  171.         Set Rng = .Range("C:C").Find(人員工號.Value, LookIn:=xlValues, LookAt:=xlWhole)
  172.         If Not Rng Is Nothing Then                 '  人員工號已存在
  173.             If InStr(.Cells(Rng.Row, 10), "離職") > 0 And 復職 = False Then    '  Remark
  174.                 姓名.Value = .Cells(Rng.Row, 4)    '  姓名
  175.                 MsgBox .Cells(Rng.Row, 10)
  176.                 復職.Enabled = True
  177.                 姓名.Value = ""
  178.                 Exit Sub
  179.             End If

  180.             If 復職 Then .Cells(Rng.Row, 10) = "該員已於 " & Format(Date, "YY/MM/DD") & " 復職": 復職旗標 = True
  181.             備註.Value = .Cells(Rng.Row, 10)             '  Remark
  182.             
  183.             復職 = False
  184.             復職.Enabled = False
  185.             離職 = False
  186.                      
  187.             班別.Value = .Cells(Rng.Row, 1)        '  班別
  188.             領班.Value = .Cells(Rng.Row, 2)        '  領班
  189.             人員工號.Value = .Cells(Rng.Row, 3)    '  工號
  190.             姓名.Value = .Cells(Rng.Row, 4)        '  姓名
  191.             
  192.             If .Cells(Rng.Row, 5) = "V" Then
  193.                 V.Value = True
  194.             ElseIf .Cells(Rng.Row, 5) = "P" Then
  195.                 P.Value = True
  196.             ElseIf .Cells(Rng.Row, 5) = "K" Then
  197.                 K.Value = True
  198.             End If
  199.             
  200.             到職日.Value = .Cells(Rng.Row, 6)      '  到職日
  201.             專長.Value = .Cells(Rng.Row, 7)        '  主要專長
  202.             專長1.Value = .Cells(Rng.Row, 8)       '  專長1
  203.             專長2.Value = .Cells(Rng.Row, 9)       '  專長2
  204.             人員工號.Enabled = False
  205.             確認.Enabled = True
  206.             '  MsgBox "資料查詢完成"
  207.         Else
  208.             復職 = False
  209.             復職.Enabled = False
  210.             MsgBox "查無該員工資料"
  211.         End If
  212.     End With
  213. End Sub

  214. Private Sub 人員工號_Change()
  215.     人員工號.Text = UCase(人員工號.Text)
  216.     If Len(人員工號.Text) = 4 Then 填入資料
  217. End Sub

  218. Private Sub UserForm_Initialize()
  219.     班別.AddItem "1ST"
  220.     班別.AddItem "2ND"
  221.     班別.AddItem "3RD"
  222.    
  223.     異動_班別.AddItem "1ST"
  224.     異動_班別.AddItem "2ND"
  225.     異動_班別.AddItem "3RD"
  226.    
  227.     專長.AddItem "DA"
  228.     專長.AddItem "Sub"
  229.     專長.AddItem "EC"
  230.     專長.AddItem "PL"
  231.     專長.AddItem "MH"
  232.     專長.AddItem "PT"
  233.     專長.AddItem "代理人"
  234.     復職.Enabled = False
  235.     復職旗標 = False
  236. End Sub
複製代碼

TOP

        靜思自在 : 人生不一定球球是好球,但是有歷練的強打者,隨時都可以揮棒。
返回列表 上一主題