返回列表 上一主題 發帖

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

本帖最後由 v03586 於 2016-8-25 15:17 編輯

回復 50# GBKEE


    感謝版大的協助, 測試程式後發現如下問題

1. 點選取消出勤出現如下錯誤!!!




2. 人員離職後, 再打開更新出勤的操作介面, 發現人員還在操作介面上, 點了離職人員名字會彈出如下錯誤
    2-1. 雖然按了『人員回報按鈕』已經不會出現在『人員回報』資料表上 !!!


3. 1:1、1:2、1:3、1:4 的部分由可操機數做個加總, 如何加總??
    我想到的邏輯...請板大指教
   3-1. 先依照出勤資料庫『班別』去判斷要在哪一班的欄位做統計
   3-2. 再依照出勤資料庫『日期』去判斷要在哪一天的欄未做加總
   3-3. 最後依照出勤資料庫『可操機數』去判斷操作機台 1、2、3、4 的個別數字 (如下圖)

TOP

本帖最後由 GBKEE 於 2016-8-25 20:57 編輯

回復 51# v03586
程式有錯誤,可先Google 了解錯誤才會進步,



"點了離職人員名字會彈出如下錯誤"
你是如何操作沒這錯誤
這不是刪除離職人員
  1. Private Sub UserForm_Initialize()
  2.     設定             '  讀取 UserForm 內之環境設定
  3.     人力資料讀取     '  執行模組中『程式』,並從『人力資料庫』中讀取「DA班別」、「DA領班」、
  4.                      '  「DA工號」、「DA組別」、「DA專長」等宣告為公用變數之「字典物件」。
  5.     離職檢視 '****加上這個看看
複製代碼
"1:1、1:2、1:3、1:4 的部分由可操機數做個加總, 如何加總??"
我再看看如何作

Sub 出勤取消 有修改
  1. Private Sub 出勤取消()
  2.     Dim St As String  ', i As Integer  '變數定義 As 宣告型態
  3.     出勤Ar(2) = xDay
  4.     St = 出勤Ar(2) & "," & 出勤Ar(3) & "," & 出勤Ar(4) & "," & 出勤Ar(5)
  5.     If ListBox1.ListIndex < 0 Or Not DA出勤資料.exists(St) Then
  6.         If ListBox1.ListIndex < 0 Then
  7.             MsgBox "沒選擇  出勤人員 !!!"
  8.         ElseIf Not DA出勤資料.exists(St) Then
  9.             MsgBox St & "  尚未出勤 !!!"
  10.         End If
  11.         Exit Sub
  12.     Else
  13.         If MsgBox(St & "", vbYesNo, "出勤取消") = vbNo Then Exit Sub
  14.     End If
  15.     i = ListBox1.ListIndex
  16.     ListBox1.ListIndex = -1
  17.    DA出勤資料(St).Delete (xlUp)
  18.    DA出勤資料.Remove St
  19.     With Sheets("出勤資料庫").[N5].Offset(i)
  20.             ListBox1.RowSource = ""
  21.             For i = 5 To 8
  22.                 .Cells(1, i) = "" '
  23.             Next
  24.             With .CurrentRegion
  25.                 ListBox1.RowSource = .Rows("2:" & .Rows.Count).Address(, , , 1, 1)
  26.             End With
  27.     End With
  28. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 52# GBKEE


    第一個操作錯誤步驟
   1. 人員先操作離職
   2. 編輯出勤更新, 離職人員還出現在編輯項目內, 點選就出錯

如上狀況的模擬是....假設今天有10個人已離職, 但使用者不可能記住已離職的那麼多人(如果時間軸一拉長),
相對在編輯出勤時, 如果忘記他已經離職, 點選離職人員就會出現這個錯誤,
如果以長遠來看...已離職人員還能出現在可編輯的欄位裡面, 那未來(時間軸一長),編輯的人不就會出現一堆已離職的人物...
這樣可能會造成使用者編輯的不便...要一直跳過, 若不小心點到,就會出現下圖的錯誤


另外有發現一個問題...
Q2.png
我有嘗試修改, 但似乎無法, 請問一下我哪邊改錯了?
如果我沒會錯意思, 這一段應該是解釋
如果V, 月份小於等於6月, 星期等於日或六 則OverTime = 成立 ???

Case "V"
             If Month(xDay) <= 6 And Weekday(xDay) = 7 Or Weekday(xDay) = 6 Then OverTime = True
             If Month(xDay) > 6 And Weekday(xDay) = 1 Or Weekday(xDay) = 7 Then OverTime = True
  1. Private Function OverTime(組別 As String) As Boolean
  2.      '  <= 6   V組 六-休息日 /  P組 日-休息日 / K組 二-休息日
  3.      '  >6     V組 日-休息日 /  P組 六-休息日 / K組 二-休息日
  4.      Select Case 組別
  5.          Case "V"
  6.              If Month(xDay) <= 6 And Weekday(xDay) = 7 Then OverTime = True
  7.              If Month(xDay) > 6 And Weekday(xDay) = 1 Then OverTime = True
  8.          Case "P"
  9.              If Month(xDay) <= 6 And Weekday(xDay) = 1 Then OverTime = True
  10.              If Month(xDay) > 6 And Weekday(xDay) = 7 Then OverTime = True
  11.          Case "K"
  12.              If Weekday(xDay) = 3 Then OverTime = True
  13.     End Select
  14. End Function
複製代碼

TOP

本帖最後由 GBKEE 於 2016-8-27 13:22 編輯

回復 53# v03586


已修改你提的問題.



   Ex.zip (428.85 KB)
更正版 人員人力回報表0827v2.xls
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 54# GBKEE


    感謝板大解決了大問題!!真心感謝!!

    如下程式測試後發現之前的兩個規則似乎有跑掉了, 懇請大大協助...

   Q1. 排序問題   , 目前看來 組別, 接有依照VPK 排序, 但是班別好像跑掉了
    排續方式,﹝班別﹞→﹝領班﹞→﹝組別﹞



   Q2. 再來就是之前有修改過, 但這班又跑掉規則,
下圖是目前的狀況, 最下面那張圖有舉例

原本訂的規則是, 當班應該出現在當班的欄位, 至於延長加班才去判斷顯示在別班的爛位上
延長別班只計算出勤率, 不計算『專長』人頭數 !!!

TOP

本帖最後由 v03586 於 2016-8-28 18:17 編輯

回復 54# GBKEE

    用這張來解釋比較簡單...當班資訊 不見了, 跑去加班的班別 !!
    已邏輯上來說...當班資訊一定要有, 因為加別班 , 不知道其他班會怎麼安排你用哪樣專長
   

TOP

本帖最後由 c_c_lai 於 2016-8-30 07:00 編輯

回復 55# v03586
  1. Sub Main()
  2.         .
  3.         .
  4.         .
  5.         Main_出勤率 Rng.Offset(-1), e & ""
  6.     Next
  7.    
  8.     With Sheets("人員回報")      '  依班別、領班、組別 排序
  9.         With Range(.Range("A84"), .Range("AL" & .Range("A" & Rows.Count).End(xlUp).Row))
  10.             .Sort key1:=.Cells(1, 1), key2:=.Cells(1, 2), Order1:=xlAscending, key3:=.Cells(1, 7), Order3:=xlDescending, Header:=xlYes
  11.         End With
  12.     End With
  13. End Sub
複製代碼
#55 Q2 以及 #56 的提問尚請 GBKEE 大大指導 (圖示太小,目前看起來還蠻吃力的)。

TOP

本帖最後由 v03586 於 2016-8-31 11:58 編輯

回復 57# c_c_lai


    感謝大大協助!!! 已解決排序問題!!!!
    #56  =  #55  Q2 比較清楚

TOP

回復 54# GBKEE

已最簡單的例子來舉例, 下圖最下面的表格是已維護更新好的出勤名單
正常來說, 三位都是早班的MH , 所以正常來說 1ST 的MH 應該是三位才對
2ND 是沒有當班的人 !!!  加班的欄位有一位 所以功能正常, 但是當班的部分就不對了
請問要從何修改呢??
   

TOP

回復 59# v03586
試試看!
人員人力回報表0902V1.rar (393.85 KB)

TOP

        靜思自在 : 脾氣嘴巴不好,心地再好也不能算是好人。
返回列表 上一主題