✔ 最佳答案
我有以下好奇︰
1. 當第一報表重覆的資料有不同備註時,怎合併於第二報表﹖
2. 由於第一報表含所有資料(包括早期的),那麼,程式怎判斷哪些是需要轉至第二報表的新資料﹖
3. 如果用不存在於第二報表的資料作為轉至條件的話,當第一報表要修改舊資料時,第二報表怎辦﹖
4. 如果沒有轉至條件的話,每次都重新做一次的話,第二報表如果輸入了備註便會被抹去,那麼,其實第二報表是沒有作用的。
2011-12-02 14:30:43 補充:
你的意思是,每一天都有一個重新製作的第二報表,那麼,其實我還是有一點疑問︰
如果備註欄是第二報表列印後才用人手寫上的話… 咁到第二日你再整新的第二報表時,必定重覆了很多"昨天已列印資料"。難道,你用人眼將昨天與今天的第二報表逐行對,然後重新抄返一次已昨天已寫過的備註﹖............
2011-12-04 02:04:25 補充:
以下複製到模組後,在第一報表中執行。
Sub Bookcount()
cursht = ActiveSheet.Name
Sheets(cursht).Copy After:=Sheets(Worksheets.Count)
Sheets(Worksheets.Count).Select
Range("1:2").EntireRow.Delete
ttl = Range("A1").CurrentRegion.Rows.Count
Columns("D:D").Delete Shift:=xlToLeft
Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
CopyToRange:=Range("I1"), Unique:=True
Columns("A:H").Delete Shift:=xlToLeft
Columns("A:A").Copy
Columns("D:D").Insert Shift:=xlToRight
Sheets(cursht).Range("D3").Copy
Sheets(Worksheets.Count).Range("D1").Select
ActiveSheet.Paste
Range("D2").FormulaArray = _
"=SUMPRODUCT((" & cursht & "!R4C1:R" & ttl + 2 & "C1=RC1)*(" & cursht & _
"!R4C3:R" & ttl + 2 & "C3=RC3)*(IF(ISNUMBER(VALUE(RIGHT(" & cursht & _
"!R4C4:R" & ttl + 2 & "C4,1))),VALUE(" & cursht & "!R4C4:R" & ttl + 2 & _
"C4),VALUE(LEFT(" & cursht & "!R4C4:R" & ttl + 2 & "C4,LEN(" & cursht & _
"!R4C4:R" & ttl + 2 & "C4)-1)))))"
Range("D2").Copy
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
Columns("D:D").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("A1").CurrentRegion.Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, SortMethod:=xlStroke, DataOption1:= _
xlSortNormal, DataOption2:=xlSortNormal
Range("D2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.NumberFormatLocal = "#""本"""
Sheets(cursht).Rows("1:2").Copy
Sheets(Worksheets.Count).Select
Rows("1:1").Insert Shift:=xlDown
Application.CutCopyMode = False
Range("A1").Select
End Sub
2011-12-04 03:05:32 補充:
我在回答區寫了一個macro,請試一試!
2011-12-04 18:10:18 補充:
你能否發現你的原始檔有甚麼可能的異常﹖... 是否啟動了保護工作表既功能﹖
2011-12-04 18:18:20 補充:
你可以嘗試開一個新的活頁簿,然後將所有資料複製到新活頁簿的工作表內再執行程式,記住要像你的例子一樣,第三行必須為標題行。
2011-12-05 17:58:41 補充:
=o= 呢句出問題真係諗唔通… 不過我測試時沒問題...
你試下將以下呢幾段︰
Range("D2").Copy
Range("D3").Select
Range(Selection, Selection.End(xlDown)).Select
ActiveSheet.Paste
變成如下︰
[D2].AutoFill Range("D2:D" & Range("A1").CurrentRegion.Rows.Count)
睇下得唔得﹖
2011-12-06 17:53:36 補充:
唔洗,我諗就快解決到了!我以下落黎會出兩篇意見(009及010),因為字數所限009唔夠位貼,你將現在出錯果句一直到尾果句都換晒佢 (end sub唔洗換),睇下得唔得。
2011-12-06 17:53:55 補充:
[D:D].Copy
[D:D].PasteSpecial Paste:=xlPasteValues
[A1].CurrentRegion.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("C2"), Order2:=xlAscending, Header:=xlGuess
2011-12-06 17:56:10 補充:
[D2:D65536].NumberFormatLocal = "#""本"""
Sheets(cursht).[1:2].Copy
[1:1].Insert
Application.CutCopyMode = False
2011-12-07 16:03:31 補充:
我基於題目內的數據,自己模擬了一份,然後執行成功,所以macro是沒有問題的,明顯地,你的原始檔有點不同,至於甚麼不同… 我估唔到,其實你自己亦可以找出問題所在的,我建議你以下步驟︰
1. 不用系統製造的檔案,純自己模擬一份數據然後執行,這時應能成功;
2. 將系統製造的數據,逐少逐少咁複製到你成功執行的檔案中再測試,這時亦應不斷咁成功,直到出現問題你就會知問題係邊。
有以下兩點,你必須注意的是︰
a) 第三列必須為標題列;
b) 不要在macro製造出來的工作表執行macro。
2011-12-07 19:00:34 補充:
除了以上自我檢驗的步驟外,仲有另一樣野我所能諗到既,就係,你的題目例子中描述資料是由A欄至H欄,所以我無預你再有資料在H欄之後的其他欄,如有的話也會影響程式。解決方法是,複製A至H欄到新的工作表才執行macro 或者 刪除其他欄既資料才執行macro。
至此,我已經心力交瘁,最終問題能否解決就看你的熱誠及造化了,如不行的話,終極方案係再開一個新既知識+題目然後等其他高手大大幫忙 =o=""
希望幫到你~
2011-12-08 15:13:21 補充:
好奇一問,解決左未﹖
2011-12-08 16:36:39 補充:
嗯,在我既角度,程式其實係沒有錯… 所以你要自己學懂以小量資料去測試(甚至乎自己開新的空白活頁簿及自己打內容),因為咁樣就不受你原始檔既影響,然後將個測試範圍擴大,其實當小量資料測試可行的話就注定你最終會成功。