Board logo

標題: [發問] 請問出勤系統設計 [打印本頁]

作者: v03586    時間: 2016-7-27 15:26     標題: 請問出勤系統設計

因應8/1新政策....

嘗試的用Excel 寫一套出勤系統.....大致上 Userform 建立了 3/1

想請問下面三大問題, 目前完成如下圖兩個紅框部分功能..
[attach]24754[/attach]

Q1. 要如何將下圖的Userform 寫入Excel 中呢??
使用者將必填的選項填入後, 帶入Excel 表格中, 當中不知道能不能將最後一格的Textbox 就顯示日期格式
Excel A~G 欄都是必填選項
目前三個按鈕 只有[確認] 不知道怎麼寫....也是最重要的核心
[attach]24750[/attach]
[attach]24752[/attach]

Q2: 在人員編輯這個功能中, 希望能輸入必填選項 , 然後按填入資料那個按鈕(紅框)
就能去搜尋資料庫將紫色框框的資訊都帶出來, 最後紫色框框編輯後, 按確定能將紫色框框儲存到資料庫

綠色框框希望能反黑, 除非有打勾才可以使用, 如果有打勾按下確認後也更新到資料庫中

[attach]24751[/attach]

最後就是如果有勾選離職 , 就從資料庫將此人員資料刪除


Q3 : 也就是最重要的更新出勤功能...由於還在設計Userfrom, 及Excel表格....容許小弟後續補上
但這一頁功能就是導入前面的人員資料庫, 然後去做統計加總而已...!!!


[attach]24755[/attach]
作者: yifan2599    時間: 2016-7-28 18:01

回復 1# v03586


    參考看看吧..
作者: v03586    時間: 2016-7-28 21:39

回復 2# yifan2599


   感謝大大的精心設計....另想問一下,
1. 清單方塊能夠讀取資料庫的資訊嗎??
2. 如果秀出資料庫的資訊, 能在清單方塊點兩下 就能編輯嗎??

因為剩下一個功能就是更新出勤....在想要用什麼方式去呈現人員狀況, 並讓使用者去更新出勤狀況
作者: v03586    時間: 2016-7-29 04:04

回復 2# yifan2599


    請問一下, 在人員工號方面我發現有大小寫的分別, 請問能讓他判斷無論輸入大小寫,一律轉換大寫嗎??
再來搜尋方面, 可以讓該Textbox 就讓他輸入無論切換什麼, 打出來就是大寫嗎? 這樣就能避免大小寫的判斷問題
作者: v03586    時間: 2016-7-30 04:02

加入這段程式碼已解決 TextBox3.Text = UCase(TextBox3.Text)
作者: yifan2599    時間: 2016-7-30 12:30

回復 3# v03586


    資料庫是指? excel 某sheet嗎?
作者: v03586    時間: 2016-7-31 02:58

回復 6# yifan2599


會這樣詢問是因為, 最後一項功能

Q3 : 也就是最重要的更新出勤功能
  如下圖Userfrom 已經拉出來了,
  3-1. 綠框是否能打開就預設當日的日期, 旁邊星期自動判斷帶出來
  3-2. 當選擇編輯組別的同時, 是否能將『人力資料庫』這張Sheet, 如前面選擇的條件(班別/領班/組別)
            在下面的清單方塊中列出來, 如果點選清單按鈕( OptionButton ) 就能自動顯示在清單方塊中,
            則紅框中的『確認組別』按鈕則可以刪除
   3-3. 呈現在清單方塊中的項目, 可否點選兩下, 就能自動帶入藍框所圈選的項目, 藍框中的項目也是從『人力資料庫』這張Sheet
            導入相關資訊, 其中『出勤站別』是導入『人力資料庫』這張Sheet的『主要專長』, 不一樣的地方是可以透過旁邊的按鈕更改(出勤專長)
           ※ 如不可以在清單方塊點兩下就帶入下面資訊, 則可在另設一個按鈕帶入
  3-4. 當按下確認更新, 則存入『出勤資料庫』這張Sheet內, 相對應的欄位, 如圖2
      ※ 圖3 就是導入對應欄位資訊
圖1
[attach]24781[/attach]
圖2
[attach]24782[/attach]
圖3
[attach]24783[/attach]

  3-5. 再加班計算方面, 下圖是否可以系統自行判斷, 如果不行則把此功能建立
          上半年度, VPK休息日是 , V 週六 , P 週日 , K 週二
          下半年度, VPK休息日是 , V 週日 , P 週六 , K 週二
           如上, 加班時數各組計算的日期不同, 如上功能『出勤時數』就要計算休息日(算加班),
                    各組別的休息日+有打勾的填寫的加班時數 = 加班時數
               
[attach]24786[/attach]

『人員回報』這張Sheet , 日期欄位是否可以系統程式自動轉換月份及日期??
依照A2欄位顯示的月份, 只要更改A2欄的月份, 下面資料會自動導入『出勤資料庫』資料

資料欄A63,B63,D63,E63,F63,G63, 從『人力資料庫』這張Sheet, 導入且自動排序
排序順序:
1. 班別:1ST,2ND,3RD,
2. 領班:A,B,C.....
3. 各領班的組別, 分別 V P K
再來就是依照『出勤資料庫』Sheet所維護的『出勤站別』(G欄)這欄導入所維護的資料
[attach]24784[/attach]
[attach]24785[/attach]

最後一頁資料表『整合頁面』, 只會呈現六,日,一,二 這四天的資料, 前面相同資訊一樣系統導入基本資料

如下圖範例
[attach]24787[/attach]

求解....

[attach]24788[/attach]
作者: v03586    時間: 2016-7-31 13:21

回復  yifan2599


會這樣詢問是因為, 最後一項功能

Q3 : 也就是最重要的更新出勤功能
  如下圖U ...
v03586 發表於 2016-7-31 02:58



    更正整合頁面Sheet 當中內容 如下圖
[attach]24789[/attach]
作者: c_c_lai    時間: 2016-8-1 09:52

本帖最後由 c_c_lai 於 2016-8-1 09:54 編輯

回復 7# v03586
Q3 是這樣麼?
[attach]24790[/attach]
作者: c_c_lai    時間: 2016-8-1 13:04

回復 7# v03586
[attach]24792[/attach]
[attach]24793[/attach]
作者: v03586    時間: 2016-8-1 13:07

本帖最後由 v03586 於 2016-8-1 13:08 編輯

回復 9# c_c_lai


    當時設計Userform的時候不知道清單選項能做到什麼效果, 因為我在網路上Youtube 爬文 都要點選按鈕才能出現資料
   因為VPK組資料太多, 就想說各組別,各別顯示才不會亂掉, 清單方塊是從別張Sheet的資料, 點選後帶入下面方塊(紅框),
  之後編輯加班狀態, 至於『出勤站別』主要帶入『主要專長』的資料, 但實際出勤可能因為人力因素改變, 所以旁邊才設按鈕
  讓使用者自行編輯
   
    因為是工廠, 需要輸入她可以操作幾台機器, 才能計算出勤人力可以開啟多少機台, 只有DA需要計算機台, 其他是不用的
作者: c_c_lai    時間: 2016-8-1 13:10

回復 11# v03586
試試看!
[attach]24794[/attach]
作者: v03586    時間: 2016-8-1 13:19

回復 12# c_c_lai


    是的!!! 超強!!!感謝大大,  確認鍵輸入後存入『出勤資料庫』, 跟『人員回報』
   另外加班計算不知道怎麼帶入, 尤其是人員回報 A2欄 不知道能不能做到選擇月份控制日期
作者: c_c_lai    時間: 2016-8-1 16:05

回復 13# v03586
你要先自己試寫才行啊!
都寫完了對你是沒幫助的。
原先你寫的語法我都一一修正過,
你可從中了解之前之後的異動有何不同?
如此你才會學到東西。
我已經把較不易處裡的部分解決掉了,
你先試著自行撰寫,我有空也會幫你留神的。
作者: v03586    時間: 2016-8-2 03:53

回復 14# c_c_lai

對於前輩的指教...真的很感謝也受惠...因工作性質較為複雜, 無法把心力全心灌入, 才來求指教, 造成不便真的深感抱歉
寫了這段後...把輸入的資料重複跑了10次....
  1. Private Sub CommandButton10_Click()
  2.     Dim x&
  3.     With Worksheets("出勤資料庫")
  4.         For x = 2 To 11

  5.                 .Cells(x, 1) = DA出勤更新.ComboBox2.Value '班別
  6.                 .Cells(x, 2) = DA出勤更新.ComboBox3.Value '領班
  7.                
  8.                 .Cells(x, 4) = DA出勤更新.TextBox2.Value  '工號
  9.                 .Cells(x, 5) = DA出勤更新.Textbox3.Value  '姓名
  10.                 .Cells(x, 6) = DA出勤更新.Textbox4.Value '組別
  11.                 .Cells(x, 7) = DA出勤更新.TextBox5.Value   '出勤站別
  12.                 .Cells(x, 8) = DA出勤更新.ComboBox8.Value '可操機數
  13.                 .Cells(x, 9) = DA出勤更新.TextBox8.Value '出勤時數
  14.                 .Cells(x, 10) = DA出勤更新.ComboBox7.Value '延長加班
  15.                 .Cells(x, 11) = DA出勤更新.TextBox7.Value '加班時數

  16.         Next x
  17.     End With
  18.     Call CommandButton11_Click
  19.     MsgBox "資料更新完成"
  20. End Sub
複製代碼

作者: c_c_lai    時間: 2016-8-2 08:21

本帖最後由 c_c_lai 於 2016-8-2 08:30 編輯

回復 15# v03586
參考!  (至 3.5 的前半部)
看看 Sub overTime() 是不是你的想法,
確認更新業已完成 (你寫的也不錯), 加油!
PS 我把所有物件名稱改成對照的中文名稱
      如此方便整個程式的瀏覽與瞭解。
[attach]24811[/attach]
[attach]24812[/attach]
作者: v03586    時間: 2016-8-3 04:22

本帖最後由 v03586 於 2016-8-3 04:23 編輯

回復 16# c_c_lai


    Overtime 是我的想法沒錯!!感謝協助
   另外可否更新出勤能否寫個防呆功能, 相同日期相同工號已經有輸入過的, 再次輸入時會跳出訊息不能被輸入
   測試的時候發現可以連續輸入相同日期的同一個人資料
   目前只要輸入一筆資料, 確認更新鍵會自動關閉 , 要再按一次清空, 再重新選擇人員, 按鈕才又被打開
    ( 我把 確認更新.Enabled = True )

  另請問如何利用A2欄控制月份?  固定H欄後面會因為月份改變, 星期也更著改變 ( 如紅框 )
  [attach]24824[/attach]
   

A65~G65 是匯入 利用INDEX與MATCH 函數匯入後排序嗎? 還是用Vlookup 呢?
[attach]24825[/attach]
我只知道排序的寫法如下...但不知道如何從第65欄開始利用程式排序,  其他維護的資訊是否可利用程式方式帶入呢?
  1. Dim xArea As Range
  2. xArea.Resize(, 7).Sort Key1:=xArea(1, 1), Order1:=xlAscending, _
  3.                        Key2:=xArea(1, 2), Order2:=xlAscending, _
  4.                        Key3:=xArea(1, 7), Order3:=xlAscending, Header:=xlNo
複製代碼
[attach]24826[/attach]
作者: v03586    時間: 2016-8-3 15:15

回復 16# c_c_lai


    Overtime 得加總是要計算在『人員回報』頁面的C65欄位
作者: c_c_lai    時間: 2016-8-3 21:07

本帖最後由 c_c_lai 於 2016-8-4 07:12 編輯

回復 18# v03586
試試看!
[attach]24830[/attach]
接下來你應該可以上手了,#18 不明瞭處理細節?
(Overtime 得加總是要計算在『人員回報』頁面的C65欄位)
明日我要到林口長庚檢查眼睛,
你自己再好好補牆吧!
作者: c_c_lai    時間: 2016-8-4 07:07

回復 17# v03586
針對 "A2欄控制月份?  固定H欄後面會因為月份改變, 星期也更著改變"
做了修正 (增列 chgMonth())。在 UserForm_Initialize() 階段便做了判斷。
接下來就看你了!加油!
我要準備就醫了。
[attach]24831[/attach]
作者: v03586    時間: 2016-8-4 13:46

回復 20# c_c_lai


    辛苦了大大....剩下我自行先研究看看....!!! 祝早日康復唷!!!:)
作者: GBKEE    時間: 2016-8-8 07:49

本帖最後由 GBKEE 於 2016-8-8 08:05 編輯

回復 8# v03586
你的程式邏輯不很明白所以要請問你如下

[DA出勤更新]表單中
出勤時數與延時加班的關聯為何,如是:出勤時數>8小時,後才有延時加班的發生.又加班時數的限制為何?
延時加班:指所屬的[班別]嗎?
日期如為各組的休假日時,出勤時數,延時加班,加班時數如何輸入                           

人員回報1ST,2ND,3RD的出勤率: 依[出勤資料庫]的[班別] 統計對媽?
17# 附圖(一) 中的 延長人數,提早人數 是如何定義",又2ND,3RD中各組休假人數,的邏輯為何?
附檔中的[整合頁面]的欄位6日-9日 是完整的嗎?是如人員回報1ST,2ND,3RD的出勤率嗎?
作者: v03586    時間: 2016-8-8 14:49

本帖最後由 v03586 於 2016-8-8 14:55 編輯

回復 22# GBKEE


    [DA出勤更新]表單中
出勤時數與延時加班的關聯為何,如是:出勤時數>8小時,後才有延時加班的發生.又加班時數的限制為何?
延時加班:指所屬的[班別]嗎?

日期如為各組的休假日時,出勤時數,延時加班,加班時數如何輸入
忘記設定, 按休假時, 出勤時數自動帶0
[attach]24871[/attach]

一天正常出勤時數8小時, 勞基法管控勞工每個月加班不得超過46小時, 所以
只要超過當班上班時數, 就是算加班時數,
假設早班, 他上完該班該有的時數, 接下來是第二班, 所以人員勾選加班時, 可以選擇他要加哪一班, 然後填入要加班時數

[attach]24865[/attach]
如上圖,
出勤資料庫』這張資料表所對應的資料要匯入『人員回報』這張資料表
出勤資料庫』「C」欄位, 去比對『人員回報』「H」欄位之後看是更新幾號, 如圖範例(8/1)
  就把『出勤資料庫』「G」欄出勤站別,資料丟到『人員回報』(8/1)欄相對應的欄位
判斷式應該是判斷『出勤資料庫』D欄位 = 『人員回報』 D欄位 一樣就把資料匯入
出勤資料庫』「K」欄加班時數, 相同判斷方式匯入『人員回報』 C欄位



出勤資料庫』A欄位判斷『人員回報』班別欄位,
1ST『A4』欄位
2ND『A21』欄位
3RD『A38』欄位
將『出勤資料庫』『G』欄位(出勤站別) ,去Count數量加總在『人員回報』各班別的對應資料(一樣判斷更新日期)
出勤資料庫』『H』欄位(可操機數),去Count數量加總在『人員回報』開機數(一樣判斷更新日期)
出勤資料庫』『J』欄位(延長加班), 判斷是哪一班去Count『人員回報』該班的數量(如下圖)


人員回報』頁面中, 各班「總人數」及「組別人數」
1ST 總人數 (E5欄)   1ST 組別人數  (D5、D6、D7欄位)
2ND 總人數 (E22欄)   2ND 組別人數  (D22、D23、D24欄位)
3RD 總人數 (E39欄)   3RD 組別人數  (D39、D40、D41欄位)
從『出勤資料庫』這張資料表去Count資訊在『人員回報
各班的專長人數 ( C9欄開始 )  也是從『出勤資料庫』去Count資訊在『人員回報
[attach]24866[/attach]

人員回報1ST,2ND,3RD的出勤率: 依[出勤資料庫]的[班別] 統計對媽?   YES

17# 附圖(一) 中的 延長人數,提早人數 是如何定義",又2ND,3RD中各組休假人數,的邏輯為何?
[attach]24867[/attach]
  Sorry , 檔案沒有修改正確, 正確跟上面一樣 只有出勤人力


附檔中的[整合頁面]的欄位6日-9日 是完整的嗎?是如人員回報1ST,2ND,3RD的出勤率嗎?

整合頁面』中, 只是『人員回報』的資料, 一模一樣
只是這個頁面僅需要顯示 , 六、日、一、二 , 不需要像『人員回報』 是一整個月



在『人員回報』這張資料表中「A」「B」「D」「E」「F」「G」欄位
希望能從『人力資料庫』這張資料表自動匯入人員資料
且自動排序, 排序方式為
1.班別:1ST,2ND,3RD,
2.領班:A,B,C.....
3.各領班的組別, 分別 V P K
範例:
班別/領班/組別
1ST   A        V
1ST   A        V
1ST   A        P
1ST   A        K
1ST   B        V
1ST   B        P
1ST   B        K
2ND  A        V
[attach]24870[/attach]


[attach]24868[/attach]
作者: GBKEE    時間: 2016-8-8 19:44

回復 23# v03586

V - 休假人數
P - 休假人數
K - 休假人數   
如何計算??
作者: v03586    時間: 2016-8-9 03:19

本帖最後由 v03586 於 2016-8-9 03:27 編輯

回復 24# GBKEE


    Sorry ,  GBKEE 大

回覆的附檔 , 已經修改沒有要計算休假人數, 只計算出勤人數, 例如 H4、H5、H6 為各VPK組的出勤人數
只要資料庫不是『休』 就是出勤
H3 出勤率 計算方式為=((H9+H10+H11+H12+H13+H14+H15)+(H7+H8/2))/E5
也可以利用
H3 出勤率 計算方式為=((H4+H5+H6)+(H7+H8/2))/E5
[attach]24881[/attach]
[attach]24880[/attach]


另提到加班如何計算

V, P 組加班 要計算 『出勤資料庫』中 K欄的加班時數 ( 一~日) , 假日還要在加總 ( 六、日 ) I欄位 出勤時數
K組 加班 要計算 『出勤資料庫』中 K欄的加班時數 ( 一~日) , 假日還要在加總 ( 一、二 ) I欄位 出勤時數
K組的目的就是要補 V. P 組別休假時的人力缺口 , 所以計算方式不同
作者: GBKEE    時間: 2016-8-10 07:05

本帖最後由 GBKEE 於 2016-8-10 09:16 編輯

回復 25# v03586
修改了 [DA出勤更新]UserForm
[整合頁面]工作表你試著做作看

   
  [attach]24885[/attach]
作者: v03586    時間: 2016-8-10 13:28

回復 26# GBKEE


    哇~感謝大大,
     剛Test 了一下 , 可能我沒有敘述完整,
   延長加班的人頭數, 如下圖舉例,  早班人員 (1ST) 『延長加班』2ND ,
    所以這個延長加班的人力, 應該要算去第二班的人頭
   所以應該由『出勤資料庫』J欄位, 去判斷 Count 人數要在哪一班上面

[attach]24891[/attach]

   另外下圖, 『人力資料庫』, 去COUNTIF到『人員回報
   各班別各組別的人頭數與總人力, 及主要專長的人力

    最後只是把『人員回報』  匯入『整合頁面
   整合頁面多添加一項資訊 , 人機比, 也就是從『出勤資料庫』H欄位(可操機數)
   去Countif 可以操機的狀況
[attach]24892[/attach]

      另外還有一個疑問, 就是按了 『人員回報按鈕』後 『人員回報』資料表的星期會消失不見耶?

整合頁面』功能小弟今日嘗試做做看, 不懂再麻煩大大不厭煩的指教

檔案僅有修改整合頁面欄位資訊

[attach]24893[/attach]
作者: GBKEE    時間: 2016-8-10 16:09

回復 27# v03586
『人員回報按鈕』後 『人員回報』資料表的星期會消失不見耶?
沒有啊,再試試看

早班人員 (1ST) 『延長加班』2ND ,     所以這個延長加班的人力, 應該要算去第二班的人頭
專長,DA,開機數, 還是早班媽?
附檔如是


[attach]24894[/attach]
作者: v03586    時間: 2016-8-11 15:31

回復 28# GBKEE


    『人員回報按鈕』後 『人員回報』資料表的星期會消失不見耶?
沒有啊,再試試看

不知道是不是我操作錯誤, 截圖如下
紅色框框的資料都不見了
[attach]24908[/attach]


早班人員 (1ST) 『延長加班』2ND ,     所以這個延長加班的人力, 應該要算去第二班的人頭
專長,DA,開機數, 還是早班媽?
   是的算早班, 加班人員, 就換別班去安排他的工作項目了!!!


如下檔案沒有更改到大大的程式碼, 僅更新『整合頁面』欄位資訊 , 可否請大大更新至這版呢?
[attach]24909[/attach]
作者: GBKEE    時間: 2016-8-11 16:07

回復 29# v03586
專長,DA,開機數, 還是早班媽?    是的算早班, 加班人員, 就換別班去安排他的工作項目了
那[安排他的工作項目]就不在這統計之內.


紅色框框的資料都不見了,你補上數字後再試試看.

不知道[整合頁面]的日期如何設定!!!
可直依日期的設定接複製過去.
作者: v03586    時間: 2016-8-12 12:48

本帖最後由 v03586 於 2016-8-12 12:49 編輯

回復 30# GBKEE


    一樣呢!! 補上後按下去一樣不見  『星期』幾的部分, 按下去就變成#29樓照片的樣子
     星期幾那欄都消失 , 請問我是否有操作錯誤呢??

    [attach]24910[/attach]
作者: GBKEE    時間: 2016-8-12 17:55

回復 31# v03586


[attach]24921[/attach]

附檔已補上 人力資料庫班別組別人數資料的程式碼
附檔的 Main_回報清除() 與29#附檔的的程式碼一樣
請再詳細看看 星期是否還是沒有嗎?
  1. Private Sub Main_回報清除()
  2.     Dim i As Date
  3.     With Sheets("人員回報")
  4.         .[A2] = Format(xDay, "yyyy/mm")                                                             '** 月份 **
  5.         .Range(.[h1], .[h1].End(xlToRight)).EntireColumn = ""
  6.         .Range(.[A63], .[G63].End(xlDown)) = ""
  7.         For i = DateSerial(Year(xDay), Month(xDay), 1) To DateSerial(Year(xDay), Month(xDay) + 1, 0)
  8.                 With .[h1]                                                        '**重寫 當月份日期
  9.                
  10.                     .Offset(0, Day(i) - 1) = Day(i)
  11.                     .Offset(1, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  12.                     
  13.                     .Offset(16, Day(i) - 1) = Day(i)
  14.                     .Offset(17, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  15.                     
  16.                     .Offset(32, Day(i) - 1) = Day(i)
  17.                     .Offset(33, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  18.                     
  19.                     .Offset(60, Day(i) - 1) = Day(i)
  20.                     .Offset(61, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  21.                     
  22.                     Stop   '請回到 [整合頁面]看一下星期有輸入嗎?
  23.                 End With
  24.         Next
  25.     End With
  26. End Sub
複製代碼

作者: GBKEE    時間: 2016-8-12 18:03

本帖最後由 GBKEE 於 2016-8-12 18:06 編輯

回復 32# GBKEE
2003  ->  Mid(Format(i, "aaa"), 3) 即可出現星期
感謝c_c_la i今天 17:25 提供  
高於2003版版本修改如下
Main_回報清除().Offset(1, Day(i) - 1) = Mid(Format(i, "aaa"), 3)修改成.Offset(1, Day(i) - 1) = Mid(Format(i, "aaaa"), 3)便 OK 了。
作者: c_c_lai    時間: 2016-8-12 18:40

回復 33# GBKEE
在 Excel 2010 環境下測試:
[attach]24922[/attach]
作者: GBKEE    時間: 2016-8-12 19:34

回復 34# c_c_lai
感謝幫忙修正.
作者: v03586    時間: 2016-8-14 18:47

回復 33# GBKEE


    出現如下錯誤畫面
[attach]24928[/attach]

Rng.Offset(2, -4).Resize(3).Select
  1. Private Sub Main_出勤率(Rng As Range, St As String)
  2.     Dim Ar
  3.     Rng.Offset(2, -4).Resize(3).Select    '← 這一行出錯
  4.     Rng.Offset(2, -4).Resize(3).Value = Application.Transpose(DA組別(St))
  5.    
  6.     Rng.Offset(2, -3) = Application.Sum(DA專長(St))                             '**班別總人數
  7.     Rng.Offset(6, -5).Resize(8).Value = Application.Transpose(DA專長(St))      '**班別各專長人數
  8.    
  9.     Ar = DA專長(St)
  10.     With Rng.Resize(, 日總數)
  11.         .Cells = "=((r[1]c+r[2]c+r[3]c)+(r[4]c+r[5]c/2))/r[2]c5"
  12.         .Value = .Value
  13.         .Replace "0%", "", xlWhole  '去除0
  14.        ' For Each e In .Cells     '用迴圈
  15.        '     If e = 0 Then e = ""  '去除0
  16.        ' Next
  17.     End With
  18. End Sub
複製代碼
紅框中還是沒有出現
[attach]24929[/attach]
作者: c_c_lai    時間: 2016-8-14 22:18

本帖最後由 c_c_lai 於 2016-8-14 22:21 編輯

回復 36# v03586
你把
    Rng.Offset(2, -4).Resize(3).Select
改成備註型態; 即
    '  Rng.Offset(2, -4).Resize(3).Select
然後儲存後,再試試看!

P.S.:
Rng.Offset(2, -4).Resize(3).Select 傳回
<無法取得類別 Range 的 Select 屬性>
作者: v03586    時間: 2016-8-15 01:45

回復 37# c_c_lai


    感謝大大的Support !! 終於解決了!!

    想問一下如下圖, 雖然最上面的日期不會不見了 , 紅框部分二三班的還是會消失, 請問如何修改呢


[attach]24932[/attach]
作者: GBKEE    時間: 2016-8-15 05:40

回復 38# v03586
請問其餘的Mid(Format(i, "aaa"), 3) 有改成Mid(Format(i, "aaaa"), 3)嗎?
  1.    .Offset(17, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  2.                     
  3.                     .Offset(32, Day(i) - 1) = Day(i)
  4.                     .Offset(33, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  5.                     
  6.                     .Offset(60, Day(i) - 1) = Day(i)
  7.                     .Offset(61, Day(i) - 1) = Mid(Format(i, "aaa"), 3)
  8.                     
複製代碼

作者: c_c_lai    時間: 2016-8-15 07:40

本帖最後由 c_c_lai 於 2016-8-15 07:41 編輯

回復 38# v03586
GBKEE 版大  指的是:
[attach]24933[/attach]
作者: v03586    時間: 2016-8-15 12:01

本帖最後由 v03586 於 2016-8-15 12:06 編輯

回復 39# GBKEE


    Sorry....資質較差!! 剛才發現 已修正!!! 已解決這個問題  !!! 感謝版大     整合頁面, 真的難有邏輯去想, 我再思考嘗試如何呈現好了....
          我目前可以想的到的就是基本資料 紫色框框 用函數 等於 『人員回報』資料表的對應欄位
           藍色框框用複製『人員回報』資料表的對應日期貼過去...
[attach]24937[/attach]
                  唯獨不知道用什麼去判斷上面日期去計算人機比的數量( 紅色框框 ) ,
                只知道要從出勤資料庫撈出勤資料庫中, 操機數 1, 2, 3 , 4 台的各有幾位....
             畢竟僅需要呈現『六』『日』『一』『二』
               
           By the way ....   
  [attach]24938[/attach]
[attach]24936[/attach]
剛剛要做最後的Check , 發現加入新成員 , 突然不能使用了, 跳出這個Error code, 不知道是出了什麼問題
  1. Private Sub UserForm_Initialize()
  2.   
  3.    班別.List = Da_Data(1).keys
  4.    專長.List = Da_Data(4).keys
  5.     到職日 = Date
  6. End Sub
複製代碼

作者: jeffrey628litw    時間: 2016-8-15 16:42

回復 41# v03586


    我稍微整理了一下各位大大的程式,大多都可用了。
[attach]24943[/attach]
作者: v03586    時間: 2016-8-17 04:17

回復 42# jeffrey628litw


    感謝大大不辭辛勞的修改 !!!
   今日持續測試功能是否有BUG , 發現 .. 假設有人員離職 , 但先前已經有在『出勤資料庫』資料庫出現的名字
   會出現以下錯誤

[attach]24955[/attach]
[attach]24956[/attach]

然後回到『回報頁面』 看 會出現資料都向下位移 !!
如果去『出勤資料庫』將離職人員刪掉的話一樣不會恢復正常
除非要先將『回報頁面』的(紅框)資料先刪光, 在去按回報按鈕, 才恢復正常
請問這個如何修正呢?? 可以將離職後的人員資料同步在『出勤資料庫』刪掉? 就能避免這問題??
[attach]24958[/attach]
  1. Private Sub Main_回報寫入(Rng As Range)
  2.         Dim R As Range, St As String, xRng As Range, 日數 As Integer, i As Integer
  3.         For Each R In Rng.Rows
  4.                 ' ** R ->Sheets("出勤資料庫")的整列***********
  5.                
  6.                 St = R.Cells(1, "A") & R.Cells(1, "B") & R.Cells(1, "D") & R.Cells(1, "E") & R.Cells(1, "F")
  7.                 'St =出勤資料:  班別&所屬領班&&工號&姓名& 組別
  8.             
  9.                 If 人員回報.EXISTS(St) Then  '** St(出勤資料)存在字典物件中  -> 同一工號時
  10.                     Set xRng = 人員回報(St)                      '** -> 同一班別工號人員的位置
  11.                 Else     '** St(出勤資料)不存在字典物件
  12.                     
  13.                     Set xRng = Sheets("人員回報").Range("a" & Rows.Count).End(xlUp).Offset(1)
  14.                     '** xRng 變數設為 Sheets("人員回報"),A欄最底部的列往上到有資料 儲存格的下一列
  15.                     
  16.                     Set 人員回報(St) = xRng                     '** 字典物件,工號: 設為xRng變數
  17.                 End If
  18.                 日數 = Day(R.Range("C1"))
  19.          With xRng
  20.               ' ** xRng ->Sheets("人員回報").Range("a"列 )***********
  21.                     .Range("A1") = R.Range("A1")                                   '** 班別
  22.                     .Range("B1") = R.Range("B1")                                   '** 領班
  23.                     .Range("C1") = .Range("C1") + R.Range("k1") + IIf(R.Range("L1") = "True", R.Range("I1"), 0)
  24.                     '**R.Range("k1")->加班時數 ,R.Range("L1") = "TRUE"->假日:+加出勤時數-> R.Range("I1")
  25.                     
  26.                     .Range("D1") = R.Range("D1")                                  '**工號
  27.                     .Range("E1") = R.Range("E1")                                   '** 姓名
  28.                     .Range("F1") = DA工號(R.Range("D1") & "")(1, 7)    '**主專長
  29.                     .Range("G1") = R.Range("F1")                                   '** 組別
  30.                     .Cells(1, 日數 + 7) = R.Range("G1")                          '** 出勤站別
  31.                     ''*********************************************
  32.                     i = Application.Match(UCase(.Range("G1")), Array("V", "P", "K"), 0) '**歸納組別
  33.                     組別表(i, 日數) = 組別表(i, 日數) + 1
  34.                     
  35.                     '***********************************
  36.                     If R.Range("J1") <> "" Then                                         '**出勤資料庫 , 延長加班 資料   **
  37.                         i = Application.Match(UCase(R.Range("A1")), Ar1, 0)
  38.                         站別表(i, 日數) = 站別表(i, 日數) + 1          '**Day(Rng(1)); 延長加班的加總
  39.                     End If
  40.                     
  41.                     i = Application.Match(UCase(R.Range("G1")), Ar1, 0)     '**出勤資料庫 , 出勤站別  資料**
  42.                     站別表(i, 日數) = 站別表(i, 日數) + 1
  43.                     '**DA 開機數 **
  44.                     If i = UBound(Ar1) + 1 Then 站別表(UBound(Ar1) + 2, 日數) = 站別表(UBound(Ar1) + 2, 日數) + R.Range("H1")
  45.                     '*********************************************
  46.                 End With
  47.         Next
  48. End Sub
複製代碼

作者: c_c_lai    時間: 2016-8-18 15:45

本帖最後由 c_c_lai 於 2016-8-18 15:55 編輯

回復 43# v03586
回復 35# GBKEE
我應用 GBKEE 版大最後的的版本稍加整理,
亦融合了 jeffrey628litw 大大的(新增、修改表單);
順便將你的提問一併予以處理,並加減修飾版面。
(新增、修改表單內之內容及版面稍予調整)
近期 (因個人私人因素) 內如還仍有問題,
你就再請益 GBKEE 版大 吧!
[attach]24967[/attach]
作者: v03586    時間: 2016-8-22 23:18

回復 39# GBKEE
回復 42# jeffrey628litw
回復 44# c_c_lai



感謝三位大大的整合 !! , 這幾天嘗試將 jeffrey628litw 大大 與 GBKEE版大 及 c_c_lai  大大的版本做個修改

發現問題如下,
1.  c_c_lai  大大的版本 , 構想非常棒, 新增了復職功能, 但離職後 『更新出勤』那個功能, 還是會顯示已離職的人員
   長期下來使用者, 無法一一記住某些人已經離職(工廠流動率大) , 再者更新出勤後已離職的人還是會在出勤的表格內
   1-1. 會讓系統操作者不知道她到底在不在 !! 除非已離職的不顯示在編輯出勤的欄位中

2.  GBKEE版大 版本, 測試下來就是離職後的人員, 如果『出勤資料庫』沒有同步刪除已離職資料,  人員回報後會出錯
    2-1. 版大版本修改起來是否比較容易? 僅需要同步刪除『出勤資料庫』中的資料就不會有出錯???

[attach]25015[/attach]
[attach]25016[/attach]
作者: c_c_lai    時間: 2016-8-23 08:58

回復 45# v03586
請問你那『出勤資料庫』內的所有資料是透過
何種方式產生 (新增) 出來的? 人工作業一一輸入?
一般在員工離職前所有已存在之『出勤資料庫』
內資料是不允許再予以異動的,且其之前已出勤
之事實是不可予以否定、刪除的。
基本上,線上提問時回覆者只是盡力依你的需求面
給予較正面 (引導式) 的回應,而非全然幫你創建新的局面。
提問上應有的佈局與邏輯走向是提問人要具備提出的,
回覆者只是助你解惑、導入、以及些許有意的實質提示。
作者: GBKEE    時間: 2016-8-23 09:53

回復 46# c_c_lai
手術後要多休息.

    回復 45# v03586
提問上應有的佈局與邏輯走向是提問人要具備提出的,
回覆者只是助你解惑、導入、以及些許有意的實質提示

那試試看
  1. Private Sub UserForm_Initialize()
  2.     設定
  3.     人力資料讀取
  4.     離職檢視 '****加上這個看看
  5.     班別.List = DA班別.keys
  6.     延長加班.List = DA班別.keys
  7.     可操機數.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  8.     V = True
  9.     班別.ListIndex = 0
  10.     年.List = Array(Year(Date) - 2, Year(Date) - 1, Year(Date))  '3年內的範圍
  11.     月.List = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
  12.     年.ListIndex = 年.ListCount - 1
  13.     月.ListIndex = Month(Date) - 1
  14.     日.ListIndex = Day(Date) - 1
  15. End Sub
複製代碼
  1. Sub 離職檢視()
  2.     Dim Rng As Range, i As Long, St   As String
  3.     With Sheets("出勤資料庫")
  4.         For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
  5.             St = .Cells(i, "D")
  6.             If DA工號.EXiSTS(St) = False Then
  7.                 If Rng Is Nothing Then
  8.                     Set Rng = .Cells(i, "D").EntireRow
  9.                 Else
  10.                     Set Rng = Union(.Cells(i, "D").EntireRow, Rng)
  11.                 End If
  12.             End If
  13.         Next
  14.     End With
  15.     If Not Rng Is Nothing Then Rng.Delete
  16.     Set Rng = Nothing
  17.     With Sheets("人員回報")
  18.         For i = 63 To .Range("A" & Rows.Count).End(xlUp).Row
  19.             St = .Cells(i, "D")
  20.             If DA工號.EXiSTS(St) = False Then
  21.                 If Rng Is Nothing Then
  22.                     Set Rng = .Cells(i, "D").EntireRow
  23.                 Else
  24.                     Set Rng = Union(.Cells(i, "D").EntireRow, Rng)
  25.                 End If
  26.             End If
  27.         Next
  28.     End With
  29.     If Not Rng Is Nothing Then Rng.Delete
  30. End Sub
複製代碼

作者: v03586    時間: 2016-8-23 20:17

回復 47# GBKEE


    加入程式碼後, 出勤編輯還是會顯示出離職人員讓使用者編輯耶 !
作者: v03586    時間: 2016-8-24 13:25

回復 48# v03586


    檔案如下, 此檔案已經將整合頁面與人員回報頁面結合了, 部分程式碼修改後發現跳格...]
可以請大大指點我哪邊沒改好嗎?? (下圖紅框處)   , 另想請板大協助1:1、1:2、1:3、1:4 的部分由可操機數做個加總
可以請大大順便教我,  如果未來比例部分如果有增加 我需要如何修改嗎?? 假設目前只到1:4 , 未來1:7時 我修改了欄位, 程式碼部分要相對修改哪邊
[attach]25034[/attach]


1.  另外...樓上提到的...如下圖, 已離職部分, 還是會出現在編輯欄位, 會讓使用者分不清楚已離職人員
會繼續編輯, 如果長久以來離職的人變多...編輯頁面就會一大串都是離職人員( 且離職人員不小心編輯 , 會算在出勤率當中 )

2. 如發現已更新出勤, 但發現人員更新錯誤, 要將人員取消出勤 , 似乎不能取消, 系統基本設置出勤一定要填1-8小時, 如人員臨時當天被告知明天不用來
出勤系統無法修改讓他變0耶

[attach]25036[/attach]





[attach]25035[/attach]
作者: GBKEE    時間: 2016-8-25 07:26

回復 49# v03586
1:1、1:2、1:3、1:4 的部分由可操機數做個加總
如何加總??
附檔   新加上 離職人員的踢除+ 出勤的取消

[attach]25042[/attach]
作者: v03586    時間: 2016-8-25 15:15

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

回復 50# GBKEE


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

1. 點選取消出勤出現如下錯誤!!!
[attach]25046[/attach]
[attach]25045[/attach]


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

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

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

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

[attach]25049[/attach]

"點了離職人員名字會彈出如下錯誤"
你是如何操作沒這錯誤
這不是刪除離職人員
  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
複製代碼

作者: v03586    時間: 2016-8-26 13:23

回復 52# GBKEE


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

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

另外有發現一個問題...
[attach]25061[/attach]
我有嘗試修改, 但似乎無法, 請問一下我哪邊改錯了?
如果我沒會錯意思, 這一段應該是解釋
如果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
複製代碼

作者: GBKEE    時間: 2016-8-27 10:45

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

回復 53# v03586


已修改你提的問題.



  [attach]25063[/attach]
更正版 人員人力回報表0827v2.xls
作者: v03586    時間: 2016-8-28 16:57

回復 54# GBKEE


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

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

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


   Q2. 再來就是之前有修改過, 但這班又跑掉規則,
下圖是目前的狀況, 最下面那張圖有舉例
[attach]25070[/attach]
原本訂的規則是, 當班應該出現在當班的欄位, 至於延長加班才去判斷顯示在別班的爛位上
延長別班只計算出勤率, 不計算『專長』人頭數 !!!
[attach]25071[/attach]
作者: v03586    時間: 2016-8-28 18:16

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

回復 54# GBKEE

    用這張來解釋比較簡單...當班資訊 不見了, 跑去加班的班別 !!
    已邏輯上來說...當班資訊一定要有, 因為加別班 , 不知道其他班會怎麼安排你用哪樣專長
    [attach]25073[/attach]
作者: c_c_lai    時間: 2016-8-30 06:55

本帖最後由 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 大大指導 (圖示太小,目前看起來還蠻吃力的)。
作者: v03586    時間: 2016-8-31 11:44

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

回復 57# c_c_lai


    感謝大大協助!!! 已解決排序問題!!!!
    #56  =  #55  Q2 比較清楚
作者: v03586    時間: 2016-9-1 04:41

回復 54# GBKEE

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

回復 59# v03586
試試看!
[attach]25113[/attach]
作者: c_c_lai    時間: 2016-9-2 18:04

回復 59# v03586
修正的部分:
[attach]25114[/attach]
[attach]25115[/attach]
[attach]25116[/attach]
作者: GBKEE    時間: 2016-9-3 14:44

回復 61# c_c_lai

參考看看

    [attach]25119[/attach]
作者: c_c_lai    時間: 2016-9-3 15:45

回復 62# GBKEE
兩個新版本 (左半部是您的、右半部是我的;使用共同之出勤內容) ,
我測了一下。將它貼成圖表以方便比對,您看看正確結果應為?
最近眼睛還在調養中,比對方面就有勞您了!
[attach]25122[/attach]
[attach]25123[/attach]
作者: v03586    時間: 2016-9-4 04:30

回復 63# c_c_lai
回復 62# GBKEE


    感謝兩位大大這些日子(1個月) 來的協助 !! 剛實測, 功能皆完成 !!! BUG也修正完畢...感謝不盡
     
     最後想請問...如果我未來想更改人機比 , 是要更改哪邊的判斷呢???
作者: GBKEE    時間: 2016-9-4 18:05

回復 63# c_c_lai
我附檔 人員人力回報表0903V1.xls  
人員回報加班不正確,這裡需修改
  1. '  ***********************************
  2.             If R.Range("J1") <> "" And R.Range("J1") <> E Then         '  **出勤資料庫 , 延長加班 資料   **
  3.                 i = Application.Match(UCase(R.Range("j1")), Ar1, 0)
  4.                 站別表(i, 日數) = 站別表(i, 日數) + 1       '  ** Day(Rng(1)); 加班別的加總
  5.             End If
複製代碼
回復 64# v03586
更改人機比 , 可依人員回頁位置修改.可自己練習修改.
作者: c_c_lai    時間: 2016-9-4 18:40

回復 65# GBKEE
謝謝您!
明早我再研究研究,晚上視力較差!
作者: v03586    時間: 2016-9-6 05:08

回復 63# c_c_lai


    c_c_lai 大大 !! 我看不到你 #67~70 樓的圖片
   但是依照你這篇的回覆 !! 左圖是我規劃中的答案樣板!!!

    另外....原本只要點選離職, 人員回報功能執行後, 人員回報資料表 , 就會自動扣除已離職的人數
    0903版本中 , 不會扣除耶

     ex: 原本 1ST 總人力  75人 , V組 25人
            已離職一名  1ST  V組   , 人力沒有變成  74 ,  V組 24,
作者: c_c_lai    時間: 2016-9-6 08:08

回復 64# v03586
你是說下列圖片的數據是正確的嗎?
[attach]25147[/attach]
作者: c_c_lai    時間: 2016-9-6 10:50

本帖最後由 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
複製代碼

作者: c_c_lai    時間: 2016-9-6 11:28

本帖最後由 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
複製代碼

作者: GBKEE    時間: 2016-9-6 14:31

回復 67# v03586


更新版本

    [attach]25160[/attach]
作者: v03586    時間: 2016-9-6 21:08

回復 71# GBKEE
回復 68# c_c_lai


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

[attach]25162[/attach]
作者: c_c_lai    時間: 2016-9-7 07:15

回復 72# v03586
是這樣嗎? 這就是我感覺困惑的觀念點:
[attach]25165[/attach]
作者: v03586    時間: 2016-9-7 13:25

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

回復 73# c_c_lai


    c_c_lai 大大, 完全正確!!! 請問這樣要如何調整呢?
作者: c_c_lai    時間: 2016-9-7 15:01

回復 74# v03586
這是我最近修正後的 (Relaese) 版本 :
[attach]25168[/attach]
作者: v03586    時間: 2016-9-8 13:01

回復 75# c_c_lai


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

[attach]25186[/attach]
作者: c_c_lai    時間: 2016-9-8 13:09

回復 76# v03586
會出現『沒有出勤人員』,是因為你目前的
『出勤資料庫』無十月份的出勤紀錄。
你可以檢查一下你的『出勤資料庫』。
作者: c_c_lai    時間: 2016-9-8 19:58

本帖最後由 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
複製代碼

作者: c_c_lai    時間: 2016-9-8 20:05

回復 76# v03586
附上更新程式:
[attach]25188[/attach]
作者: v03586    時間: 2016-9-8 23:44

回復 79# c_c_lai

       感謝協助, 今日測試出現Error Code 超出陣列引索範圍 !!
          我怎麼看這個錯誤怎麼會錯在呼叫程式的地方.....
    [attach]25189[/attach]
作者: c_c_lai    時間: 2016-9-9 07:20

本帖最後由 c_c_lai 於 2016-9-9 07:27 編輯

回復 80# v03586
你先把操作過程描述一次,出現錯誤訊息後選按 "偵錯"
然後你再把接下來只到錯誤點的畫面告訴我。
我也蠻好奇是哪裡越界了?
請問你是使用上傳的  "人員人力回報表0907R1" 檔案測試的嗎?
作者: v03586    時間: 2016-9-9 20:54

本帖最後由 v03586 於 2016-9-9 20:55 編輯

回復 81# c_c_lai


    我是用#79樓最新版本 , 點選 『出勤更新』的 Userfrom 就出錯了!! 應該是我有改到什麼, 我在研究一下
作者: v03586    時間: 2016-9-9 21:22

回復 81# c_c_lai


    確認後,,, 是我個人修改錯誤問題....已修正....另外想問一下
   目前程式出現一個問題,  就是新增第二班人員後, 人員回報資料表『第二班總人數』不會自動加總 !! 有測試過 1 , 3 班都沒問題
     

       另程式部分 K組  條件我之前設錯了  我有修改 ,  K組 禮拜一 是例假日 , 禮拜二是休息日
      程式碼修改如下 !! 應該沒錯誤吧@@....我去出勤更新去判斷是正確的!!
  1. Private Function OverTime(組別 As Variant) As String
  2.      '  <= 6   V組 六-休息日 /  P組 日-休息日 / K組 二-休息日
  3.      '  >6     V組 日-休息日 /  P組 六-休息日 / K組 二-休息日
  4.      '  If Month(xDay) <= 6 And (Weekday(xDay) = 7 Or Weekday(xDay) = 6) Then OverTime = True
  5.      '  If Month(xDay) > 6 And (Weekday(xDay) = 1 Or Weekday(xDay) = 7) Then OverTime = True
  6.      OverTime = "出勤日"
  7.      If Month(xDay) <= 6 Then
  8.         Select Case 組別.Name
  9.              Case "V"
  10.                 If Weekday(xDay) = 7 Then OverTime = "休息日"
  11.                 If Weekday(xDay) = 1 Then OverTime = "例假日"
  12.             Case "K"
  13.                 If Weekday(xDay) = 3 Then OverTime = "休息日"
  14.                 If Weekday(xDay) = 2 Then OverTime = "例假日"
  15.             Case Else
  16.                 If Weekday(xDay) = 1 Then OverTime = "休息日"
  17.                 If Weekday(xDay) = 7 Then OverTime = "例假日"
  18.         End Select
  19.     ElseIf Month(xDay) > 6 Then
  20.         Select Case 組別.Name
  21.              Case "P"
  22.                 If Weekday(xDay) = 7 Then OverTime = "休息日"
  23.                 If Weekday(xDay) = 1 Then OverTime = "例假日"
  24.              Case "K"
  25.                 If Weekday(xDay) = 3 Then OverTime = "休息日"
  26.                 If Weekday(xDay) = 2 Then OverTime = "例假日"
  27.             Case Else
  28.                 If Weekday(xDay) = 1 Then OverTime = "休息日"
  29.                 If Weekday(xDay) = 7 Then OverTime = "例假日"
  30.         End Select
  31.     End If
  32. End Function
複製代碼

作者: v03586    時間: 2016-9-9 21:55

回復 81# c_c_lai


    Sorry sir .....
莫名其妙又好了! 造成不便之處請原諒....
作者: c_c_lai    時間: 2016-9-10 05:18

回復 84# v03586
再多多測試,如此才能測出其穩定、正確性。
作者: c_c_lai    時間: 2016-9-10 06:33

本帖最後由 c_c_lai 於 2016-9-10 08:16 編輯

回復 84# v03586
我在人員回報前加了一段清除 "Actual (D3 欄)"等欄值的動作,
以觀察其資料是否正確寫入。
  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.     '  2016/9/10  Modified by C. C. Lai
  11.     With Sheets("人員回報")
  12.         For Each e In Array(.Range("D5"), .Range("D28"), .Range("D51"))
  13.             e.Resize(3).Value = ""                 '  Actual (D3 欄)
  14.             e.Offset(, 1) = ""                     '  ** (班別) 總人數
  15.             e.Offset(4, -1).Resize(8).Value = ""   '  ** (班別各專長) 人數
  16.         Next
  17.     End With
  18.    
  19.     For cts = 1 To 2   '  第一階段(cts=1)以正常班別為判斷基準;第二階段(2)則純以加班班別為判斷基準。
複製代碼

作者: v03586    時間: 2016-9-11 02:41

回復 86# c_c_lai


    感謝c_c_lai 大的用心~系統已經Release給人員使用 ,這幾天持續觀察 , 是否有問題!!!
作者: c_c_lai    時間: 2016-9-11 07:45

回復 87# v03586
別客氣!
其實你應該謝謝開始時幫你解題的 yifan2599、jeffrey628litw 兩位大大;
在此修正中著墨最深的莫過於 GBKEE 版大了,他的構思、程式模組結構之細膩,
使得流程得以如此順暢,應全歸功於 GBKEE 版大了。
我只不過是沾沾醬油而已。
Parallel Run 後如有問題再提出吧!
作者: v03586    時間: 2016-9-19 12:59

回復 88# c_c_lai


    謝謝各位的幫忙...!! 中秋連假的使用者在系統操作大致上沒問題
    只是有幾個問題 不知道Excel 是否能做到這樣的優化
     因使用者發問說, 工廠上班 休假的少 出勤的多, 如果一筆一筆Key in  時間夠長,
     不曉得Excel VBA 能否做到批次處理
           ex : V組編輯出勤 一鍵全部打勾, 不出勤的就自己不打勾 , 在去編輯出勤資料
                                ex :專長是DA的 更改操機數 , 是否有加班的 !!!

     可否讓系統預設 操機數 一開始基本2台 , 如後續要調整 在自己選擇 1, 3 , 4 ??
作者: c_c_lai    時間: 2016-9-19 16:43

回復 89# v03586
不太清楚你的表述,一次全部打勾?
(將該 V 組資料一次全寫入 "出勤資料庫" ?)
[attach]25271[/attach]
作者: v03586    時間: 2016-9-20 04:09

回復 90# c_c_lai

    就是Checkbox 功能.... 但感覺使用ListBox 無法與 Checkbox 做搭配
    [attach]25273[/attach]
作者: c_c_lai    時間: 2016-9-20 10:12

回復 91# v03586
[attach]25274[/attach]
作者: c_c_lai    時間: 2016-9-20 17:51

回復 91# v03586
請用白話說明一下。
作者: v03586    時間: 2016-9-22 03:59

本帖最後由 v03586 於 2016-9-22 04:00 編輯

回復 93# c_c_lai


    Sorry  C_C_lai 大 , 由於大夜班時差大亂,  這麼晚回覆 , 真是抱歉
     如下圖, 原系統內建 , 只要選擇到專長是DA , 系統會自動帶可操機數1 台
    這部分可否改為   選到DA  就自動帶  2台 , 另外只要有選擇到的人員 , 出勤時數自動帶8h
   
   另外問, 如大大以把Listbox 與 Checkbox 結合在一起 , 想問是否有一個是可以”全選    ”
   當有選擇時 , 出勤時數自動帶8h

[attach]25291[/attach]
作者: c_c_lai    時間: 2016-9-22 09:35

回復 94# v03586
測試看看,我要出門去看眼診了。
[attach]25292[/attach]
作者: c_c_lai    時間: 2016-9-22 10:48

本帖最後由 c_c_lai 於 2016-9-22 10:50 編輯

回復 94# v03586
這個剛剛稍稍修改 (全選畫面)。
[attach]25295[/attach]
作者: v03586    時間: 2016-9-23 15:25

回復 96# c_c_lai


    挖!!! 原來Excel 這麼強大....Listbox 與 Checkbox 可以一起應用
   


     我有一個這三個禮拜來測試後的一些小疑問

  1.   目前出勤資料庫達到2000筆 , 發生了回報頁面  1ST 都無法計算出來   『當班出勤率』『當班總人力』『各組人力』『各專長人數』
      只有早班 1ST 會出現這個問題耶???

  2.  測試後大大新修改的版本, 批次寫入 會將原本專長 Sub / PT / ....等不是DA站別的  強制變成DA站別
        能否加入判斷 主要專長是DA才寫入呢?

  感謝大大用心 ... 注意身體健康!!! 並祝早日康復
作者: c_c_lai    時間: 2016-9-23 18:26

回復 97# v03586
試試這個
[attach]25313[/attach]
作者: v03586    時間: 2016-9-24 05:19

本帖最後由 v03586 於 2016-9-24 05:21 編輯

回復 98# c_c_lai

    1.  感謝大大的修復 , 目前測試出線如下問題, 一樣是早班才會出現出勤率問題, 附檔是大大提供的最新版本下去修正的
    [attach]25317[/attach]
   
  2.    另一個問題是, 批次寫入雖然已經有判斷DA 才加入開機數,  今日隨機測試 不是DA站別得『批次輸入』 , 發現不會自動帶出 出勤時數
  3.   最後一個問題是 , 批次輸入後 其他組別會變成無法再次批次輸入 , 必須關掉在打開才可繼續批次輸入, 請問這是大大的設計嗎? 來預防什麼狀況的呢?
     [attach]25318[/attach]

請大大由這個檔案修改 ,  內有稍微修正大大取消出勤的錯誤程式碼!!
[attach]25319[/attach]
作者: c_c_lai    時間: 2016-9-24 09:48

本帖最後由 c_c_lai 於 2016-9-24 10:07 編輯

回復 99# v03586
修正兩個地方:
一、回報程式
        Main() Main_出勤率 Rng.Offset(-1), e & "" 修正為
        Main_出勤率 Rng.Offset(-1), e & "", cts
       第二迴圈延長加班應不予計列 。
二、說真的我也不知 "出勤時數" 欄為何會被設定為 False,
        查遍了也無特別地設定。結論是只好在 List_設定()  尾端加列
        出勤時數.Enabled = True。
[attach]25323[/attach]
你提及的  2. 另一個問題是, 批次寫入雖然已經有判斷DA 才加入開機數,  今日隨機測試 不是DA站別得『批次輸入』 , 發現不會自動帶出 出勤時數
還不太明瞭,能否白話一點舉例說明。自從眼睛手術後,看東西比較吃力,白話舉例較易明白。




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)