返回列表 上一主題 發帖

[發問] 如何用VBA 把SUBOROUTINE寫入特定WORKSHEET?

因為該工作表早已寫入一些subroutine,但刪除工作表時卻同時把工作表下的subroutine刪掉,請問有沒有方法加回那些subroutine?

這問題怪怪的,subroutine會寫在工作表下通常表示只有該工作表會用到,自然刪掉也無所謂;
如果是要給所有工作表都能用的sub,寫在一般模組就好了。

題外話:我發覺EXCEL在重複使用「With QueryTables.Add」多次(約100次以上)後,每次匯入的時間都會減慢

用QueryTables會建立連線,如果只是用來取得資料,不需要保持連線,取完後就馬上刪除連線吧
你可以檢查 資料>連線 裡是不是很多不必要的連線。

*usedrange 抓不到要的範圍,附檔會比較容易找問題;不然就依資料情況看能否採用currentRegion 或其他定位的方法
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 9# 小俠客
1. 附檔手動刪除攔 T:ND 重跑,UsedRange.Address 就會顯示 $A$1:$S$31
    或是 MsgBox Out.UsedRange.Address 也可以改為
    With Out
        MsgBox .Range(.Cells(1, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, .Cells(1, Columns.Count).End(xlToLeft).Column)).Address
    End With

2. 先手動刪除那些不用的連線
    在你用 QueryTable 的程式碼(附件沒有我找不到) , refresh 後面加一行 delete
    With ActiveSheet.QueryTables.Add(XXX)
        ..........
        .Refresh BackgroundQuery:=False
        .Delete
    End With

3. selection change 是工作表事件,那些 code 也能移植到 ThisWorkbook 的 Workbook_SheetSelectionChange,只要你多判斷是否是你要觸發的工作表。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

本帖最後由 stillfish00 於 2015-10-13 13:51 編輯

回復 15# 小俠客
看來是excel的問題,我把手動重現問題步驟描述如下
我也是excel2010,其他版本可試試:
1. 開新工作表
2. 選 B:D 欄,更改欄寬
3. 選 B:D 欄,群組
4. 點選群組左邊的1(第一層)
5. 點選群組左邊的2
6. 取消群組
7. 刪除 B:D 欄
8. VBA 執行 MsgBox ActiveSheet.UsedRange.Address

好像只要有動過群組的欄寬, 又去摺疊群組,之後就清不乾淨了(刪除也無效)
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

回復 22# lpk187
重點不是這個吧 ...
現在是在說明明沒資料沒格式的儲存格,usedrange 在某些情況會誤判為有使用。
表達不清、題意不明確、沒附檔案格式、沒有討論問題的態度~~~~~~以上愛莫能助。

TOP

        靜思自在 : 我們要做好社會的環保,也要做好內心的環保。
返回列表 上一主題