Board logo

標題: [發問] VBA 清除、還原請教 [打印本頁]

作者: 星空乂羽翼    時間: 2023-6-6 15:56     標題: VBA 清除、還原請教

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

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


[attach]36532[/attach]
作者: Andy2483    時間: 2023-6-6 16:45

回復 1# 星空乂羽翼


    謝謝前輩發表此主題與範例檔
後學建議
1.在清除前先複製一個相同的工作表,命名為"備份表"
2.隱藏此備份表
3.在還原時刪除現表,顯示備份表,更名為原現表名
作者: 星空乂羽翼    時間: 2023-6-7 08:18

回復 2# Andy2483

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

但我主要是想要避免如果誤觸清除按鈕時的情況
所以才問看看能不能還原資料
作者: Andy2483    時間: 2023-6-7 08:50

回復 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
作者: 星空乂羽翼    時間: 2023-6-7 13:34

回復 4# Andy2483
謝謝前輩回復
測試過後
還原按鈕只有偶爾成功過
請問前輩能幫忙除錯嗎?
作者: Andy2483    時間: 2023-6-7 13:58

回復 5# 星空乂羽翼


1.還原III 只執行 清除III 的還原
2.其他動作的還原需使用Excel 復原功能
3.請上傳範例
作者: 星空乂羽翼    時間: 2023-6-7 14:11

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

以下為測試檔
[attach]36546[/attach]
作者: Andy2483    時間: 2023-6-7 14:29

回復 7# 星空乂羽翼

指定巨集需設為 還原III
[attach]36547[/attach]
作者: 星空乂羽翼    時間: 2023-6-7 15:13

回復 8# Andy2483

疑,我有指定過押@@
不好意思,這麼簡單的問題還浪費前輩您的寶貴時間。
作者: Andy2483    時間: 2023-6-7 15:46

回復 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
作者: 星空乂羽翼    時間: 2023-6-8 08:57

回復 10# Andy2483
感謝前輩的解說

想再請教一下
On Error GoTo Rear
'↑令程序遇到錯誤時就跳到標示 Rear位置繼續執行

上面這段的Rear位置是什麼意思呢?

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

上面這段前輩您猜的沒錯,只有在月底或每月第1天進行清除
想請教一下
如果%數想改高要怎麼改呢?
例如1%→90%

不好意思,麻煩前輩了
作者: Andy2483    時間: 2023-6-8 09:39

回復 11# 星空乂羽翼


    謝謝前輩繼續一起學習

1.Rear
[attach]36550[/attach]

2.90%
N2 < (N1 * 0.9)

PS:
N1 /100 = N1 的 1% = N1 * 0.01
N1 的 90%= N1 * 0.9
作者: 星空乂羽翼    時間: 2023-6-9 16:02

回復 12# Andy2483

感謝前輩的耐心教學及回復

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

這一段後學看不太懂,不懂這一段的意思@@
再麻煩前輩解說,謝謝!
作者: 准提部林    時間: 2023-6-10 10:07

可以清除資料的只有特定人吧!
1) 清除時設一至二道INPUTBOX, 輸入指定數字才可執行清除
2) 不要設清除按鈕, 利用一個儲存格, 輸入特定數字來執行清除
作者: 星空乂羽翼    時間: 2023-6-10 21:22

回復 14# 准提部林

謝謝版主大大的建議
的確這也是個方式

不過這個表格實際上只有一個人在使用喔
所以不太有被其他人清除的情況

感謝版主大大想法的分享!
作者: 准提部林    時間: 2023-6-11 11:30

回復 15# 星空乂羽翼


設個備份區或備份表, 清除時將資料丟進去,
免得清除後又儲存關檔, 重開時資料全沒了
作者: 星空乂羽翼    時間: 2023-6-11 12:58

回復 16# 准提部林

謝謝版大的想法建議
一開始的確有這樣的想法
礙於功力不夠,不知道如何實現
還需麻煩版大指導指導!謝謝!
作者: Andy2483    時間: 2023-6-12 07:24

回復 13# 星空乂羽翼


    [attach]36566[/attach]
作者: Andy2483    時間: 2023-6-12 07:25

本帖最後由 Andy2483 於 2023-6-12 07:27 編輯

回復 16# 准提部林

設個備份區或備份表, 清除時將資料丟進去,
免得清除後又儲存關檔, 重開時資料全沒 ...
准提部林 發表於 2023-6-11 11:30 [/quote]



    請前輩指導
作者: 星空乂羽翼    時間: 2023-6-12 10:30

回復 18# Andy2483

謝謝前輩耐心指導!
作者: ML089    時間: 2023-6-15 10:18

回復 1# 星空乂羽翼

這專人用 訂餐統計表
誤按 清除 時,不要存檔,重新開原始檔案,資料依舊存在。

結合 個人每日訂餐表,直接統計也不怕 統計表 清除,重新統計就可以

沒實質貢獻,純聊天
作者: 星空乂羽翼    時間: 2023-6-15 18:36

回復 21# ML089
感謝前輩的回覆

的確不要存檔重開就好
但因為避免手指太習慣按Ctrl+s了
所以還是設計一個還原按鈕比較好~

另外結合個人每日訂餐表這個建議很好
只可惜敝司是人工手動去紙本表單上填寫
所以這方式不適用,但是個好點子,感謝您!
作者: 准提部林    時間: 2023-6-16 11:06

安心方案//
1) 清除時自動備份至DATA表
2) 最新的資料放最上方並標示1, 舊的標示NA, 每月結束後, 可將NA行刪除, 只保留第一筆
3) 每月保留第一筆, 可還原檢視, 但舊月度的還原, 清除時不會再備份

[attach]36607[/attach]
作者: Andy2483    時間: 2023-6-16 11:26

回復 23# 准提部林


    謝謝前輩指導
前輩心思縝密,自嘆弗如
作者: 准提部林    時間: 2023-6-17 10:41

改版//
1) 避免本月初無法備份上月資料
2) 還原時在A1標記年月, 避免動到C1及F1而轉存覆蓋別的月份
3) 每月只保存一筆資料, 下次清除直接覆蓋

[attach]36609[/attach]
作者: Quake    時間: 2023-6-18 21:17

只針對清除及還原兩個按鈕來動作,不著墨其他細節。
[attach]36617[/attach]
作者: 星空乂羽翼    時間: 2023-6-29 08:42

回復 25# 准提部林

感謝前輩的想法及作法分享
讓後學可以多多學習!
感謝您!

另外想法分享
因考慮使用者為Excel小白
故DATA分頁可設為隱藏
避免被使用者誤刪
導致資料無法還原
作者: 星空乂羽翼    時間: 2023-6-29 08:43

回復 26# Quake

感謝前輩的做法分享
後學可以多多學習不同做法
謝謝!
作者: brabus    時間: 2023-8-10 14:23

如果是怕誤觸的話
加設密碼核對就可以解決
作者: 星空乂羽翼    時間: 2023-8-14 09:07

回復 29# brabus

這也是一個good idea
不過還是會依使用者方便使用為主~




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)