返回列表 上一主題 發帖

[發問] 考勤表VBA難題求助

[發問] 考勤表VBA難題求助

本人一直學習VBA及爬文, 發現單一VBA問題不大, 但要個功能就墮入困局, 又是考勤表問題, 期望給予協助:
考勤表 20150815.rar (109.15 KB)

從學習書內抄考用了相信是愚蠢的方法, 求教::Q

Sub match2()
'combine id card no and date for searching


Dim srcrange As Range, fndrange As Range
Dim fstaddress As String, i As Integer
Dim fc As Integer
Dim fr As Integer
Dim fr2 As Integer



Worksheets("attendance report").Activate

fc = 12
fr = 4
fr2 = 3

Set srcrange = Worksheets("data").Range("a4").CurrentRegion.Columns(9)
Set fndrange = srcrange.Find(what:=Range(fr, fc) & Range("v" & fr2).Value)

If Not fndrange Is Nothing Then

fstaddress = fndrange.Address

i = 5

Do
Cells(i, 22).Value = fndrange.Offset(, 0).Value
Cells(i + 1, 22).Value = fndrange.Offset(1, 0).Value
Cells(i + 8, 22).Value = fndrange.Offset(2, 0).Value
Cells(i + 9, 22).Value = fndrange.Offset(3, 0).Value

i = 1 + 1

Loop Until findrange.Address = fstaddress

Else

MsgBox "XX"
End If



End Sub

回復 2# lpk187

你好, 我改了但只可出現1個人及1日的資料, 那個LOOP不知如何處理::(

Dim srcrange As Range, fndrange As Range
Dim fstaddress As String, i As Integer
Dim fc As Integer
Dim fr As Integer
Dim fr2 As Integer

Worksheets("attendance report").Activate

fc = 1
fr = 4
fr2 = 3

Set srcrange = Worksheets("data").Range("a4").CurrentRegion.Columns(9)
Set fndrange = srcrange.Find(what:=Cells(fr, fc) & Cells(fr2, 11).Value)

If Not fndrange Is Nothing Then

fstaddress = fndrange.Address

i = 5
Do
Cells(i, 11).Value = fndrange.Offset(, -2).Value
Cells(i + 1, 11).Value = fndrange.Offset(3, -2).Value
Cells(i + 7, 11).Value = fndrange.Offset(2, -2).Value
Cells(i + 8, 11).Value = fndrange.Offset(1, -2).Value
i = 1 + 1
Loop Until fndrange.Address = fstaddress
Else
MsgBox "XX"
End If
End Sub

TOP

回復 4# lpk187

你好, 我的解說及要求, 有勞看看! 拜託:L

TOP

本帖最後由 missbb 於 2015-8-15 22:13 編輯

回復 6# lpk187

很多謝, 是這樣的想法, 但還有2點: (1) 如何做下一個員工呢, 因為共有200多人? (2)如果時間只有3個, 如7月1日, 程式中就多取了7月3日的第一個時間, 要作出限制如圖所示:感激不盡
考勤表 20150815 v4.rar (284.58 KB)

TOP

本帖最後由 missbb 於 2015-8-16 00:13 編輯

回復 8# lpk187
時間找取正確! 第5筆(或最後一筆)視為下班就對了, 其他會留空. 很厲害!
再次感激, 因為員工資料與打咭時間放在不同SHEETS, 請看圖內資料::D

TOP

回復 10# lpk187


    太感謝了, 我會學習當中運用, 有勞大司:'( 為我解決了頭痛多月的問題!

TOP

回復 12# lpk187

是呀, 用函數令FILE運作很慢才用VBA, 感謝細心的增值:'(

TOP

回復 14# GBKEE
想請教將("A4:AP23") COPY 等如員工人數的次數, 但出錯, 是甚麼原因?
  1. [code]Sub COPY_FORMAT()

  2. Dim i As Integer

  3.     Worksheets("attendance report").Activate
  4.    
  5.     QQQQ = Worksheets("ee data").Cells(Rows.Count, "b").End(xlUp).Row
  6.    
  7.     ActiveSheet.Range("A4:AP23").Select
  8.    
  9.     Selection.Copy
  10.    
  11. For i = 1 To QQQQ
  12.    
  13.     ActiveSheet.Range("A" & 1 + i * 20).Select
  14.     ActiveSheet.Paste
  15.   
  16. Next i
  17. End Sub

  18.         


  19.    
複製代碼
[/code]

TOP

回復 16# lpk187
多謝指導.

TOP

回復 14# GBKEE

想問為何可以取得姓名呢?因為我在EE DATA及EE內都找不到對應的欄?

           .Parent.Cells(.Row + X + 1, "d").Resize(20) = Rng

另可否從EE DATA一版內將員工編號及部門都放在ATTENDANCE內並顯示20列呢?

有勞賜教!

TOP

        靜思自在 : 道德是提昇自我的明燈,不該是呵斥別人的鞭子。
返回列表 上一主題