如何set excel,令佢可以不停print?

2009-01-06 9:10 pm
我公司一向用excel來發糧單
方法是在一個Excel 檔案內,e.g.payroll.xls
在payroll.xls內,有兩張sheet,
一張叫details,一張叫payroll.
Details內列明每位員工的薪金
Payroll則是一張standard的糧單


每月出糧時,
我就要從Details相應格內抄每位員工的薪金/名字入payroll的薪金/名字格
e.g. =Details!D1
這樣薪金就會顯示出來
接著再print出來

到下一位員工就改為 =Details!D2
再print,
直到print完全公司的payroll

但我知道應該是有一些program code,
可以讓它自動抄下Details內的資料到payroll再自動print出來,
不停loop至全公司也print完為止..

就請各大大幫忙,告訴我怎寫這個code?
雖然公司不太多人,但每月也要這樣抄百多個資料也是很煩惱的...

謝謝!!
更新1:

Re:kchan999999 但我公司沒有Access,要買一套SW公司又沒有錢, 所以唯有用原有方法..

更新2:

Re: shin_bingo_dog 感謝你的方法,但由於我實是Excel的白痴,可以告訴我在excel的那兒放入這段Code? 另我在這提供更多資料,希望你可以幫幫我完成: 'Details'=>由D2至D53為人工,需轉入payroll的'I14'和'd7' 由A2至A53為人名,需轉入payroll的'B7' 由P2至P53為payroll no. 需轉入payroll的'B8'

更新3:

就是這樣了, 另我想問一下,以後若果加/減人手時, 會有什麼setting嗎??

更新4:

RE : shin_bingo_dog 謝謝你提供的程式, 我自己試圖改成自己所需並執行: Sub Macro1() ' ' Ro = 1 Sheets("Sheet3").Select Cells(1, 1).Select en = ActiveCell.CurrentRegion.Rows.Count

更新5:

rep: Ro = Ro + 1 Sheets("Sheet3").Select Range("A2" & Ro).Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B7").Select ActiveSheet.Paste

更新6:

Sheets("Sheet3").Select Range("D2" & Ro).Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("I14").Select ActiveSheet.Paste

更新7:

Sheets("Sheet3").Select Range("P2" & Ro).Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B8").Select ActiveSheet.Paste

更新8:

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True If Ro < en Then GoTo rep End Sub

更新9:

但執行後出現: 執行階段錯誤'9': 陣列索引超出範圍 為什麼會這樣子>"

更新10:

感謝大家回答: Re:shin_bingo_dog 但我的Details真的是在sheet3 payroll在 sheet2 呢.. error繼續在.. Re:新田美香: execute後, 出現: 'Range方法('_Worksheet'物件)失敗' ><...

更新11:

在多次嘗試後, 我懷疑是否我入program的方法有問題? 我的方法是在payroll sheet中按'alt F11' 再'檢視'=>'程式碼' 這樣打下去..有錯嗎?

更新12:

多謝兩位的解答!! 不知怎的,在我原有的payroll.xls上run兩位的code都是會有error, 但在抄在另一個new_payroll.xls run卻沒有.. 問題總算解決了.. 但我想加多一項條件才決定給誰分數,請見諒...

更新13:

我想在new_payroll.xls內的details 加一項驗證, programme detect了該員工是'TRUE'的話,才把payroll print出來, 'FALSE'就不print.. 請問該如何加?? Thanks thanks!!

回答 (3)

2009-01-06 10:32 pm
✔ 最佳答案
因你沒有詳盡的資料, 我只能假設
1) sheet1 的 column A貯存 人名
2) sheet1 的 column B 貯存 人工
3) 人名 copy 在 sheet2 的 C3
4) 人工 copy 在 sheet2 的 D3
所需的 自動 印 PAYROLL 的 macro 如下:
Sub Macro1()
'
'
Ro = 1
Sheets("Sheet1").Select
Cells(1, 1).Select
en = ActiveCell.CurrentRegion.Rows.Count

rep:
Ro = Ro + 1
Sheets("Sheet1").Select
Range("A" & Ro).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet2").Select
Range("C3").Select
ActiveSheet.Paste
Sheets("Sheet1").Select
Range("B" & Ro).Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Sheet2").Select
Range("D3").Select
ActiveSheet.Paste

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

If Ro < en Then GoTo rep

End Sub
我已在excel 試行, 結果ok.
祝你也成功!



2009-01-07 14:39:12 補充:
en 是貯存著 sheet1 中員工表的 rows 的 數目, 因此, 你的 program 不能將 在 sheet1 抽取的 員工資料改為 sheet3:
Ro = 1
Sheets("Sheet1").Select
Cells(1, 1).Select
en = ActiveCell.CurrentRegion.Rows.Count

因為這一改動, 引致 program 出錯.

希望你成功.

2009-01-07 15:06:32 補充:
另外
Sheets("Sheet3").Select
Range("P2" & Ro).Select
中, "P2" 應作 "P".

2009-01-08 13:08:26 補充:
我已將 sample file 放上網, 請試試:
http://www.geocities.com/shin_bingo_dog/Payroll-VBA.xls
2009-01-08 6:39 am
感覺上, vba太多 activecell, select, copy, paste 不太高效, 現提供另一個code, 修改亦容易:
Sub printx()
Set arr = Range(Sheets("Details").[a2], Sheets("Details").[a65536].End(xlUp))
Sheets("payroll").Select
For Each a In arr
[I14] = a.Offset(0, 3)
[D7] = a.Offset(0, 3)
[B7] = a.Value
[B8] = a.Offset(0, 15)
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
Next
End Sub
code的內容:
1. 設 arr 為 Details 的 A2 至 A欄最后一個有內容的空格, 如最後一個姓名是 A53, arr 的範圍會自動設為 A2:A53
2. 用 For each a in arr 將arr 內每一格循環
將金額(D欄) 用 Offset(0,3) 放在 I14 和 D7;
姓名(即 arr本欄) 不需用 Offset, 放在 B7,
Payroll no.(即P欄) 用Offset(0,15), 放在B8
3. 列印


2009-01-08 12:58:19 補充:
不明實際情況, 不應與worksheet事件有關
不要按檢視, 改按 [插入], 選 模組, 在新視窗貼上code
注意, 將 “Details”改爲 “Sheet3”, “payroll” 改爲 “Sheet2”
2009-01-06 9:49 pm
其實你有百多個資料也應該改用Access 啦,用Access 來寫你現在Excel 的要求只是大概十分鍾時間,而且你可以擴充你的系統要求和controls,例如 export files 去銀行和稅局,打印員工稅單,一個Access 就可以做到所有的東西。

繼續用Excel只會加重你現在的工序,所以你應該要有一個宏觀去 review 整個系統自動化要求。

2009-01-07 20:31:01 補充:
見你寫了那麽多東西,應該是一個有誠意的人,我不妨再寫兩個意見給你參考。
1。 我仍然覺得這個payroll system 是不應該用excel 寫的,最好使用Access, 既然你公司有預算問題,你應該在網上問人有沒有一些免費的database 軟件。 所以這個是一個長遠的solution 建議.

2。其實你是錯用了excel,依照你現在的用途,你應該保留detail 的excel sheet, 但用MS Word的mail merge function 去打印糧單,這樣的話,你就不需要花時間寫VBA, 容易用又容易改,何樂不爲?你公司既然有excel, 應該也有Word 吧。
希望幫到你。

2009-01-07 20:32:38 補充:
如果可以不需要用VBA, 就不要用它了。這才是明智啊


收錄日期: 2021-04-19 22:06:59
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20090106000051KK00501

檢視 Wayback Machine 備份