返回列表 上一主題 發帖

[發問] VBA 清除、還原請教

[發問] VBA 清除、還原請教

請問各位大大
小弟有做一個訂餐表
且有設置一個清除按鈕
當換新月份時就可以按清除按鈕來清除內容

但現在有一個問題
如果不小心點到清除的按鈕
請問可以還原被清除的內容嗎?


日程表 20230530_V01 問題.rar (26.28 KB)

回復 1# 星空乂羽翼


    謝謝前輩發表此主題與範例檔
後學建議
1.在清除前先複製一個相同的工作表,命名為"備份表"
2.隱藏此備份表
3.在還原時刪除現表,顯示備份表,更名為原現表名
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 2# Andy2483

謝謝前輩回復
這的確是個好方法

但我主要是想要避免如果誤觸清除按鈕時的情況
所以才問看看能不能還原資料

TOP

回復 3# 星空乂羽翼


    謝謝前輩回復
後學建議如下,請前輩參考

Option Explicit
Public CLearr, xR As Range
Sub 清除III()
Dim N1%, N2%
Set xR = [訂餐日程表!C6:AG38]
N1 = xR.Count
On Error GoTo Rear
N2 = xR.SpecialCells(2).Count
If N2 < (N1 \ 100) Then GoTo Rear
CLearr = xR: xR.ClearContents
Rear: End Sub
Sub 還原III()
If Not xR Is Nothing Then xR = CLearr
End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 4# Andy2483
謝謝前輩回復
測試過後
還原按鈕只有偶爾成功過
請問前輩能幫忙除錯嗎?

TOP

回復 5# 星空乂羽翼


1.還原III 只執行 清除III 的還原
2.其他動作的還原需使用Excel 復原功能
3.請上傳範例
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 6# Andy2483
謝謝前輩回復
我測試的確是先清除後按還原
但只有成功還原一兩次
再麻煩前輩除錯,感謝

以下為測試檔
日程表 20230530_V01 問題 - 無法還原.zip (29.02 KB)

TOP

回復 7# 星空乂羽翼

指定巨集需設為 還原III
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

回復 8# Andy2483

疑,我有指定過押@@
不好意思,這麼簡單的問題還浪費前輩您的寶貴時間。

TOP

回復 9# 星空乂羽翼


    謝謝前輩回復

Option Explicit
Public CLearr, xR As Range
'↑宣告全域變數
'↑因為(CLearr,xR)設為全域變數又變數沒有被釋放掉,
'所以用此方式還原,純屬亂拼湊的,非專業方法,拋磚引玉請各位前輩指教

Sub 清除III()
Dim N1%, N2%
'↑宣告變數
Set xR = [訂餐日程表!C6:AG38]
'↑令xR變數是 [訂餐日程表!C6:AG38]儲存格
N1 = xR.Count
'↑令N1變數是 儲存格數量
On Error GoTo Rear
'↑令程序遇到錯誤時就跳到標示 Rear位置繼續執行
N2 = xR.SpecialCells(2).Count
'↑令N2變數是 xR變數非空格的數量 (如果沒有非空格會出錯)
'↑防止重複按 清除III

If N2 < (N1 \ 100) Then GoTo Rear
'↑如果非空格儲存格少於1%? 是就跳到標示 Rear位置繼續執行
'↑臆測 清除III只會在月底或每月第1天才執行,
'所以資料太少不能清除

CLearr = xR: xR.ClearContents
'↑如果程序有跑到這裡就令 CLearr變數是 二維陣列,以xR儲存格值帶入,
'↑令xR儲存格值清除

Rear: End Sub

Sub 還原III()
If Not xR Is Nothing Then xR = CLearr
'↑如果xR變數有物件? 是就令xR儲存格寫入 CLearr陣列值
'因為還沒有執行 清除III 之前xR Is Nothing

End Sub
用行動裝置瀏覽論壇學習很方便,謝謝論壇經營團隊
請大家一起上論壇來交流

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題