標題:
工作表保護(在以保護下,當某個區塊填寫資料後,整個工作表都是保護不能填寫資料)
[打印本頁]
作者:
hugh0620
時間:
2014-12-15 09:16
標題:
工作表保護(在以保護下,當某個區塊填寫資料後,整個工作表都是保護不能填寫資料)
Dear 大大
詢問一下保護工作表的功能,如下圖及附件所示,
一般保護工作表,都是為了不讓整個資料結構被修改或移動,避免導致資料在撈取時,所產生的錯誤,
所以,都會設定某些欄位是開放給填寫者填寫,
但現在的需求是:當填寫者填寫完後,該資料是要被上鎖,避免下個審核者去修改到填寫者的資料,
想請教大大們,對於這一個問題,可以賜教、解惑。
[attach]19803[/attach]
[attach]19804[/attach]
作者:
stillfish00
時間:
2014-12-15 16:56
回復
1#
hugh0620
要的是這樣嗎? 按按鈕後 刪除"允許使用者編輯範圍"內的設定
Private Sub CommandButton1_Click()
Unprotect Password:="1234"
ActiveSheet.Protection.AllowEditRanges(1).Delete
Protect Password:="1234"
End Sub
複製代碼
作者:
hugh0620
時間:
2014-12-15 18:29
本帖最後由 hugh0620 於 2014-12-15 18:30 編輯
回復
2#
stillfish00
Dear stillfish00
謝謝你提供的方式,可以達到需求功能,
但是否有其他種方式,既可以保留用本允許使用者的範圍,又可以將其保護起來。
delete 的方式,希望是最後一種考慮的方式。
作者:
stillfish00
時間:
2014-12-15 21:04
回復
3#
hugh0620
不知道,大概不能
我自己一般是將可輸入的儲存格用名稱管理員先定義
然後控制各名稱範圍內的儲存格"鎖定"或"不鎖定"
然後再保護工作表
允許使用者編輯感覺是無視有沒有鎖定都可編輯,我是比較少用的。
作者:
hugh0620
時間:
2014-12-16 00:21
本帖最後由 hugh0620 於 2014-12-16 00:23 編輯
回復
4#
stillfish00
Dear stillfish00
用名稱管理員來定義,聽起來也許是另一條適合達到我需求的方式
能否請您做一個簡單的範本,提供給我參考看看,感恩。
(個人比較少對保護有所使用或研究,不是很熟悉更深入的方式,請使用最簡單的保護操作)
作者:
stillfish00
時間:
2014-12-16 10:31
回復
5#
hugh0620
先定好名稱 IN_DATA1 的範圍
Private Sub CommandButton1_Click()
LockInput
End Sub
Private Sub UnlockInput()
Unprotect Password:="1234"
Range("IN_DATA1").Locked = False
Protect Password:="1234"
End Sub
Private Sub LockInput()
Unprotect Password:="1234"
Range("IN_DATA1").Locked = True
Protect Password:="1234"
End Sub
複製代碼
[attach]19823[/attach]
作者:
hugh0620
時間:
2014-12-17 09:01
本帖最後由 hugh0620 於 2014-12-17 09:04 編輯
回復
6#
stillfish00
Dear stillfish00
您提供的方式,可以解決我遇到的問題,在空白頁上,執行是ok的
但我已經把我需要寫的部分,寫了蠻多的了,
結果,運用您提供的方式, 產生如下的錯誤產生,
也把相關該設定的地方,改成跟空白頁執行十一樣。
ex. 在名稱定義上已經設定好了
允許使用者編輯範圍清空,改用您提供的方式
就是在執行 Range("AAA").Locked = False (or True) 時,產生錯誤
[attach]19841[/attach]
[attach]19842[/attach]
作者:
stillfish00
時間:
2014-12-17 09:36
本帖最後由 stillfish00 於 2014-12-17 09:38 編輯
回復
7#
hugh0620
光是這樣看不出問題,debug不是只有錯誤代碼就能debug............最好是附檔啦
1. 按偵錯
2. 在即時運算視窗輸入 ?Range("AAA").address , 看是否會出錯
3. 檢查此時是否能手動對輸入範圍的儲存格做鎖定: 右鍵>儲存格格式>保護>鎖定
作者:
hugh0620
時間:
2014-12-17 11:38
本帖最後由 hugh0620 於 2014-12-17 11:50 編輯
回復
8#
stillfish00
Dear stillfish00
提共一個類似情境的範本
[attach]19851[/attach]
如您所說的方式執行如下:
1. 按偵錯 (不解)
2. 在即時運算視窗輸入 ?Range("AAA").address , 看是否會出錯
[attach]19850[/attach]
3. 檢查此時是否能手動對輸入範圍的儲存格做鎖定: 右鍵>儲存格格式>保護>鎖定
[attach]19849[/attach]
作者:
stillfish00
時間:
2014-12-17 14:06
回復
9#
hugh0620
含合併儲存格,改這樣:
For Each x In Range("AAA")
x.MergeArea.Locked = False
Next
作者:
hugh0620
時間:
2014-12-17 16:25
回復
10#
stillfish00
Dear stillfish00
謝謝你的指教,我發覺到問題了"合併儲存格"
最後採用的方式:在定義名稱上儲存格的設定調整一下
(Ex. A1&B1是合併儲存格,那樣在定義名詞時範圍原本只會跑出A1,那只要修改成A1:B1,就可以使用下面的語法)
就可以用保護工作表+下面的語法來完成
Unprotect Password:="1234"
Range("定義名稱").Locked = True (or False)
Protect Password:="1234"
(以上詳細說明,僅為後續有人與我有相同需求時,能了解怎麼處理)
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)