返回列表 上一主題 發帖

[發問] 怎麼抓取A資料表假日上班的日期與時間到B資料表的儲存格中

回復 19# GBKEE

大大您好

剛誤會您了,我先KEYIN姓名後進去程式碼裡按執行發現有列印出來!
真是太厲害了

疑問:
1.一開始我設這麼多空白的申請表是因為想要一張紙印兩份剛剛好,有這種方式是可以一張A4印兩張申請表的嗎(想節省紙資源)

2.中英文姓名對照表後方我新增了社員編號(如圖),如果社員編號我想跟姓名一樣在假日出勤申請單裡對照過去的話,那我要從哪裡修改程式碼呢?

感恩
不會EXCALL的笨蛋

TOP

本帖最後由 GBKEE 於 2013-11-20 12:23 編輯

回復 21# prince0413
  1. Const 早 = "10:00~18:00"
  2. Const 全日 = "10:30~18:30"
  3. Const 晚 = "11:00~19:00"
  4. Sub Ex()
  5.     Dim Rng(1 To 3) As Range, i As Integer, ii As Integer, 出勤 As String, 日期 As Range, Print_x As Integer
  6.     Dim 出勤單 As Range, E As Range
  7.     Set 出勤單 = Sheets("假日出勤單").Range("B3,D3,A5,B5,D5")   '第1張出勤單要導入資料的位置
  8.     For i = 0 To 3                                              '出勤單: 第1張到 第4張的位置 間格 14 列
  9.         出勤單.Offset(i * 14) = ""                              '清除 資料
  10.     '************    但第 2- 3張出勤單 間格 15 列 你需調整一下   *************************************
  11.     Next
  12.     Print_x = 0                                                 '印列 A4紙張 的變數
  13.     Set Rng(1) = Sheets("假日出勤單").Range("J2")               '設定社員 英文,中文,編號 (可以是 Abby,丁千芸,136)
  14.     Do While Rng(1) <> ""                                       '執行迴圈的條件: 社員<>""
  15.         With Sheets("11月")
  16.              Set Rng(3) = Nothing                               '物件: 釋放
  17.              Set Rng(2) = Sheets("中英文姓名對照表").Range("A:C").Find(Rng(1), LOOKAT:=xlWhole)
  18.                                                                  '英文,中文,編號:裡搜尋
  19.              If Not Rng(2) Is Nothing Then
  20.                 Set Rng(2) = Rng(2).Parent.Range("A" & Rng(2).Row)  '英文,中文,編號的第一欄 (英文)
  21.                 For i = 1 To 3                                      '如社員為中文 Sheets("11月")沒有 中文
  22.                     Set Rng(3) = Sheets("11月").Range("A:B").Find(Rng(2).Cells(i), LOOKAT:=xlWhole)
  23.                     If Not Rng(3) Is Nothing Then Exit For           '找到 英文 或 編號
  24.                 Next
  25.             End If
  26.             If Not Rng(3) Is Nothing Then
  27.                 i = 3                                         '第3欄 :C
  28.                 Do While IsNumeric(.Cells(4, i))              '執行迴圈的條件:第4列是數字
  29.                     If (.Cells(5, i) = "六" Or .Cells(5, i) = "日") And Trim(.Cells(Rng(3).Row, i)) <> "" Then
  30.                         出勤 = ""                             '歸零
  31.                         Set 日期 = .Cells(4, i)
  32.                         If .Cells(Rng(3).Row, i) Like "*早*" Then
  33.                             出勤 = 早
  34.                         ElseIf .Cells(Rng(3).Row, i) Like "*晚*" Then
  35.                             出勤 = 晚
  36.                         ElseIf .Cells(Rng(3).Row, i) Like "*全日*" Then
  37.                             出勤 = 全日
  38.                         End If
  39.                         If 出勤 <> "" Then                                  '預防沒有 [全日,早,晚]的班別
  40.                             Print_x = IIf(Print_x = 4, 1, Print_x + 1)
  41.                             With 出勤單.Offset((Print_x - 1) * 14)          '第 Print_x 的位置
  42.                                 .Range("A1") = Rng(2).Offset(, 1)           '社員中文
  43.                                 .Range("C1") = Rng(2).Offset(, 2)           '社員編號
  44.                                 .Cells(3, 0) = DateSerial(2013, 11, 日期)   '日期
  45.                                 .Range("A3") = 出勤                         '時間
  46.                                 .Range("C3") = IIf(日期.Offset(1) = "六", "(星期六)", "(星期日)") & "沙龍營業"
  47.                             End With
  48.                             If Print_x = 4 Then                             '滿4筆印列
  49.                                 出勤單.Parent.PrintOut                      '印列出勤單
  50.                                 For ii = 0 To 3
  51.                                    出勤單.Offset(ii * 14) = ""              '清空已印列資料
  52.                                 Next
  53.                             End If
  54.                         End If
  55.                     End If
  56.                     i = i + 1
  57.                 Loop
  58.             End If
  59.             Rng(1).Offset(, 1) = IIf(Rng(3) Is Nothing, "請檢查 : 假日出勤單 , 對照表 找不到 ", "")
  60.         End With
  61.         Set Rng(1) = Rng(1).Offset(1)    '下一位姓名
  62.     Loop
  63.     If Print_x > 0 And Print_x <= 3 Then 出勤單.Parent.PrintOut 1, Round(Print_x / 2) ' 未滿 4 筆的資料沒印列
  64. End Sub
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

Ex.zip.zip (53.38 KB) 回復 22# GBKEE

大大您好:
我有按照您說的複製程式碼貼入巨集,也有照您說的第2張~第3張出勤單間隔15列(如附件檔),但您說的第一張~第四張間隔14列是甚麼意思呢?
執行後也是只有單張列印一份出來而以呢,是我沒有設定到什麼嗎?還是印表機設定也需要改呢?

麻煩請您再幫我看看
感恩
謝謝

ps:會員編號確實有跟著對應出來了,這次的註解也更易懂,我會努力學習的,一直麻煩您真不好意思
不會EXCALL的笨蛋

TOP

回復 23# prince0413
出勤單: 第1張 第4張的位置 (都要)間格 14 列 ,第 2- 3張出勤單 間格 15 列 你需調整一下
請看圖示



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

TOP

回復 24# GBKEE

大大您好:
了解您的意思了!
經測試後成功了~
非常感謝您!

但剛測試有一個問題,如果遇到該人當月只有上1天假日班的話(等於只需要印1張申請表),我執行程式後連後面的3份空白申請表也跟著一起列印出來了呢
請問大大這有方法可以避免嗎?(上幾天班就印幾張申請表)

請大大指導
不會EXCALL的笨蛋

TOP

本帖最後由 GBKEE 於 2013-11-21 17:30 編輯

回復 25# prince0413
當月只有上1天假日班的話(等於只需要印1張申請表),我執行程式後連後面的3份空白申請表也跟著一起列印出

沒這問題的,有設計 當有4筆立即印列
  1. If Print_x = 4 Then                             '滿4筆印列
  2.                                 出勤單.Parent.PrintOut                      '印列出勤單
  3.                                 For ii = 0 To 3
  4.                                    出勤單.Offset(ii * 14) = ""              '清空已印列資料
  5.                                 Next
  6.                             End If
複製代碼
最後:未滿4筆的印列 程式碼
  1. If Print_x > 0 And Print_x <= 3 Then 出勤單.Parent.PrintOut 1, Round(Print_x / 2) ' 未滿 4 筆的資料沒印列
複製代碼
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

回復 26# GBKEE


大大您好:
會不會是我因為怕J欄的東西也跟著一起列印,所以設定列印範圍,導致這種錯誤呢?(如上圖)
我把列印格式清除後就無此問題了 , 謝謝大大的指教!

那麼之後的12月班表內如果出勤時間有變動我只需要修改程式碼的下列時間和資料表名稱就好了嗎?(如下圖紅色框框部分)   

不會EXCALL的笨蛋

TOP

回復 26# GBKEE


大大您好:
剛再測試時有發生一件小問題,就是如果該人當月只有上一天班時,系統會顯是錯誤訊息偵錯
然後把下列這段程式反黃呢~

If Print_x > 0 And Print_x <= 3 Then 出勤單.Parent.PrintOut 1, Round(Print_x / 2)      ' 未滿 4 筆的資料沒印列


這段程式的意思是如果上班日子筆數>0和<=3筆時,就列印的意思嗎?
那這樣的話只有一筆時應該也會列印才對呢

請大大指導
不會EXCALL的笨蛋

TOP

回復 28# prince0413
28# 月份更改,可如你所說試試看.
對的只有一筆時也會列印
感恩的心......(在麻辣家族討論區.用心學習會有進步的)
但資源無限,後援有限,  一天1元的贊助,人人有能力.

TOP

本帖最後由 prince0413 於 2013-11-21 17:42 編輯

回復 29# GBKEE

因為只有一筆時後面的程式就反黃錯誤呢(下面這段程式),也沒有列印~

" 出勤單.Parent.PrintOut 1, Round(Print_x / 2) "

我再想是不是因為 Print_x=1   ,  1 / 2 = 0.5  ,有小數點所以發生此錯誤

那是不是要把 Print_x 這變數換個宣告呢?   Print_x  As  Integer    改成可以有小數點的浮點數?
但我不太懂怎麼改呢

請大大指導~"~
不會EXCALL的笨蛋

TOP

        靜思自在 : 不怕事多,只怕多事。
返回列表 上一主題