返回列表 上一主題 發帖

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

回復 1# prince0413
你上傳的檔案少了副檔名,
我自行在後面加上 .zip 後才看到檔案.

你看看是否可以符合你的需求:
請假&出勤申請單-a.zip (47 KB)
  1. Private Sub cbCrtTbl_Click()
  2.   Dim iDate%, iLoc%, iTbl%, iEnd%
  3.   Dim lRow&
  4.   Dim sStr$
  5.   Dim wsSou As Worksheet, wsTar As Worksheet
  6.   
  7.   Set wsSou = Sheets("11月")
  8.   Set wsTar = Sheets("假日出勤單")
  9.   wsTar.Activate
  10.   
  11.   lRow = 11
  12.   With wsSou
  13.     iTbl = 0
  14.     Do While .Cells(lRow, 4) <> ""
  15.       sStr = .Cells(lRow, 6)
  16.       iLoc = InStr(1, sStr, "/") + 1
  17.       Do While iLoc < Len(sStr)
  18.         iEnd = InStr(iLoc, sStr, ".")
  19.         If iEnd = 0 Then iEnd = Len(sStr) + 1
  20.         iDate = Mid(sStr, iLoc, iEnd - iLoc)
  21.         wsTar.Cells(5 + iTbl * 14, 1) = CDate("2013/11/" & iDate)
  22.         wsTar.Cells(5 + iTbl * 14, 2) = .Cells(lRow, 4)
  23.         If iTbl = 1 Then
  24.           wsTar.PrintPreview
  25.           iTbl = -1
  26.         End If
  27.         iLoc = iEnd + 1
  28.         iTbl = iTbl + 1
  29.       Loop
  30.       lRow = lRow + 1
  31.     Loop
  32.     If iTbl = 1 Then
  33.       wsTar.Cells(5 + iTbl * 14, 1) = ""
  34.       wsTar.Cells(5 + iTbl * 14, 2) = ""
  35.       wsTar.PrintPreview
  36.     End If
  37.     .Activate
  38.   End With
  39. End Sub
複製代碼

TOP

回復 3# prince0413
如果你確定 Sheets("11月") 的
F11=11/9.23.30               
F12=11/3.10.17.24               
F13=11/2.9.23.30               
那應該就不會有錯,
不如你把檔案傳上來看看.

PS. 我的程式是依你提供的範例檔做出來的,
抓的是如下圖中 Mark 起來的6個儲存格中的資料,
請再確認一下:

TOP

本帖最後由 luhpro 於 2013-11-14 22:35 編輯
回復  luhpro
大大你好
這是我貼你的程式的版本
按按鈕執行時  出來的日期怪怪的   而且"出勤事由"那裡的星期X也沒有抓到資料呢~"~
prince0413 發表於 2013-11-14 17:16

日期怪怪的? 應該不會的啊, 你看我的抓圖 :
第一頁
第二頁
第四頁
第六頁
至於 "出勤事由" 內沒資料這個問題,
上面的程式我本來就沒做這個部份.
因為不確定你的事由是否要由程式自動產生,
亦或是之後再由手寫補上.
既然你希望程式自動產生,
那就再調整一下囉.
  1. Sub cbCrtTbl_Click()
  2.   Dim iDate%, iLoc%, iTbl%, iEnd%
  3.   Dim lRow&
  4.   Dim sStr$
  5.   Dim wsSou As Worksheet, wsTar As Worksheet

  6.   Set wsSou = Sheets("11月")
  7.   Set wsTar = Sheets("假日出勤單")
  8.   wsTar.Activate
  9.   lRow = 11

  10.   With wsSou
  11.     iTbl = 0
  12.     Do While .Cells(lRow, 4) <> ""
  13.       sStr = .Cells(lRow, 6)
  14.       iLoc = InStr(1, sStr, "/") + 1
  15.       Do While iLoc < Len(sStr)
  16.         iEnd = InStr(iLoc, sStr, ".")
  17.         If iEnd = 0 Then iEnd = Len(sStr) + 1
  18.         iDate = Mid(sStr, iLoc, iEnd - iLoc)
  19.         wsTar.Cells(5 + iTbl * 14, 1) = CDate("2013/11/" & iDate)
  20.         wsTar.Cells(5 + iTbl * 14, 2) = .Cells(lRow, 4)
  21.         wsTar.Cells(5 + iTbl * 14, 4) = "(星期" & Choose(Weekday(CDate("2013/11/" & iDate), 2), _
  22.                             "一", "二", "三", "四", "五", "六", "日") & ")沙龍營業"
  23.         
  24.         If iTbl = 1 Then
  25.           wsTar.PrintPreview
  26.           iTbl = -1
  27.         End If

  28.         iLoc = iEnd + 1
  29.         iTbl = iTbl + 1
  30.       Loop
  31.       lRow = lRow + 1
  32.     Loop

  33.     If iTbl = 1 Then
  34.       wsTar.Cells(5 + iTbl * 14, 1) = ""
  35.       wsTar.Cells(5 + iTbl * 14, 2) = ""
  36.       wsTar.Cells(5 + iTbl * 14, 4) = ""
  37.       wsTar.PrintPreview
  38.     End If
  39.     .Activate
  40.   End With
  41. End Sub
複製代碼
請假&出勤申請單-a.zip (51.03 KB)

TOP

本帖最後由 luhpro 於 2013-11-15 22:51 編輯
回復  luhpro
這是我有針對"11月"資料表稍為修改後的檔案(新增假日有分早晚班及全日班)
但是貼您的程式執行後出來的日期並不是該人假日上班的日期呢
請問我是哪裡有設定錯誤嗎?!prince0413 發表於 2013-11-15 14:51

請參閱上方 4# 內有說明 :
抓的是如該篇文內下方圖中 Mark 起來的6個儲存格中的資料(即 本月假日出勤時段 那個表格, 因為只有那個表有時間資料),
並沒有參考上方的表中的資料.

若你想要套用至多人,
建議你把 本月假日出勤時段 那個表格放到最上面,(若你不希望變更位置, 那我將會改採最後一列資料的相對位置來抓取此表格<會較容易出錯>)
然後 Princey 資料那一列的下方再新增至少一個人的資料,
這樣做出來的程式才容易符合你的需求,
請先依上述調整一下該 Sheet 內容後再上傳檔案,
不然之後程式做好了照樣還是要再改一次.

開題時若提出的範例能儘量符合實際需求,
這樣幫忙的人會比較快做出你要的東西,
如本串的例子,
只抓上表 或 只抓下表, 亦或是兩表都抓,
做出來的程式是可能會有很大的不同的喔.

TOP

        靜思自在 : 知識要用心體會,才能變成自己的智慧。
返回列表 上一主題