返回列表 上一主題 發帖

[發問] Excel2003 remove duplicates相容性問題

[發問] Excel2003 remove duplicates相容性問題

各位好
目前工作交接時,發現離職同事行情使用VBA紀錄,進而開始摸索
因個人電腦版本需要把office2013的VBA改成office2003的版本

在收取行情時會每小時刪除重複的資料 ,此內容寫在模組中,執行時在指定的32個工作表刪除
在改寫時遇到remove duplicates相容性的問題,
有參考版上的文章嘗試改寫成2003的版本在工作表內可以正常執行,但在模組中有時會跳出錯誤
再度參考網路的資料後 改寫成下面的內容即可在模組中正常執行
但執行時發現除了效率變差外,資料量龐大時還可能會當機QQ

想請問大家對於RemoveDuplicates改寫為2003版可使用的版本時,是否有較好的寫法呢?
謝謝大家!!


原始office2013用法為
------------------------------------------------------------
Sub delete()

For i = 2 To 33

Sheet(i).Range("B4:AG65536").RemoveDuplicates Columns:=Array(2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33), Header:=xlNO

Next i
End Sub
------------------------------------------------------------

目前我參考網路資料改寫office2003為
------------------------------------
Sub delete()
For i = 2 To 33

Dim r As Range, Rng As Range

Sheets(i).Select

With Sheets(i).UsedRange
.Columns("B:AG").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Dim g%
Application.ScreenUpdating = False
For g = ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1 To ActiveSheet.UsedRange.Row Step -1
If Rows(g).Hidden = True Then
Rows(g).EntireRow.delete
End If
Next
Application.ScreenUpdating = True

End With
Next i

End Sub
------------------------------------------------------------

回復 11# 准提部林


    謝謝准大! 非常感謝您無私的幫助 我本來正在嘗試用您網站的提供的程式來修改

結果就有新的回覆了! 我來試試看實際跑起來能不能成功!

TOP

Sheets(1).Cells(Me.Index + 1, 2) = [A3]
改成以下才對:
Sheets(1).Cells(Me.Index, 2) = [A3]
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

基本架構:
1) AH1 放資料變動檢測公式, 若有變動, 則加一筆新記錄,     
    例外:B2:AG2有[錯誤值]時, 或 B2 非數值(沒有時間值), 則不記錄~~
2) 在B3:AG3同時存放這筆記錄, 供下次比對是否變動
3) A3累計筆數, 同時記錄到MAIN表相對應儲存格

這麼多表同時觸發程式, 會不會打架.產生錯誤.或漏記錄, 不得而知,
自行去測, 並依實際運用去自行修改公式或程式, 能幫的就這樣:
DDE_main_01.rar (40.1 KB)
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 8# 准提部林


  謝謝兩位的回覆!

關於准大的建議 我正在參考您的部落格研究可以怎麼修正

這程式原本在2013跑得蠻順的 改成2003就一堆狀況 我也很苦惱QQ 只能持續摸索了

TOP

回復 7# sunshine010


    如准大所言
看過所有程序後我所猜測的問題也是如此,
Dynamic Data Exchange(簡稱:DDE)的架構我也不是很懂,
我是用Application Programming Interface(簡稱:API)方式銜接資料。

沒接觸過股票...看不懂裡面資料什麼是重覆什麼不是重覆...
在我看起來怎麼每個都很像...
一分努力,一分收穫。
發問題前可以先搜索內文是否有相關範例。

TOP

本帖最後由 准提部林 於 2018-9-10 13:18 編輯

回復 7# sunshine010

1) 去重覆, 應該只針對B欄的[時間]處理, 若逐欄處理, 那最後的資料也不正確
2) VBA以[公式重算]觸發, 同時間記錄的資料一定會重覆很多筆, 這是Worksheet_Calculate的弊病
3) 刪除重覆同時又觸發程式, 也會造成不可預料的錯誤

根本解決方法:
設一暫存列, 存放上一筆記錄的內容, 再用一個公式判斷資料是否有變動,
若無變動, 即使公式重算也不記錄, 這樣根本不須再去執行刪除重覆

這DDE非我所長, 幫不上忙~~
EXCEL參考資料:
http://blog.xuite.net/smile1000mile/blog

TOP

回復 6# faye59


    faye59大 您好

Microsoft Excel物件資料夾下有33個Sheet
我需要他跑工作表2到工作表33
聽不太懂您的意思QQ

決定把檔案放上來 再麻煩您查看 謝謝您!

PS. 執行的程式 放在"模組"的DDE裡面的delete()

DDE_main - 更改.zip (70.97 KB)

TOP

回復 5# sunshine010


是不是顯示"執行階段錯誤'9':陣列索引超出範圍" ?
檢視你的Microsoft Excel物件資料夾下有幾個Sheet,
因為程序中For i = 2 To 33這是固定值,
33並不是用Sheet的總和。

如果還是有問題請附檔,實際測試才知道問題在哪。
一分努力,一分收穫。
發問題前可以先搜索內文是否有相關範例。

TOP

回復 4# GBKEE


    GBKEE大 非常謝謝您的幫忙  我今天早上試了一下

發現他會在Set Rng(1) = Sheets(i).Range("B4:AG65536")跳出錯誤

訊息為"陣列索引超出範圍" 不是很清楚這個錯誤的原因  

想請問您是否知道為什麼範圍沒超過工作表限制仍會錯誤嗎

TOP

        靜思自在 : 謊言像一朵盛開的鮮花,外表美麗,生命短暫。
返回列表 上一主題