Board logo

標題: 工作表保護(在以保護下,當某個區塊填寫資料後,整個工作表都是保護不能填寫資料) [打印本頁]

作者: hugh0620    時間: 2014-12-15 09:16     標題: 工作表保護(在以保護下,當某個區塊填寫資料後,整個工作表都是保護不能填寫資料)

Dear 大大

         詢問一下保護工作表的功能,如下圖及附件所示,
         一般保護工作表,都是為了不讓整個資料結構被修改或移動,避免導致資料在撈取時,所產生的錯誤,
         所以,都會設定某些欄位是開放給填寫者填寫,
         但現在的需求是:當填寫者填寫完後,該資料是要被上鎖,避免下個審核者去修改到填寫者的資料,
         想請教大大們,對於這一個問題,可以賜教、解惑。
      
       [attach]19803[/attach]
       [attach]19804[/attach]
作者: stillfish00    時間: 2014-12-15 16:56

回復 1# hugh0620
要的是這樣嗎? 按按鈕後 刪除"允許使用者編輯範圍"內的設定
  1. Private Sub CommandButton1_Click()
  2.   Unprotect Password:="1234"
  3.   ActiveSheet.Protection.AllowEditRanges(1).Delete
  4.   Protect Password:="1234"
  5. 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 的範圍
  1. Private Sub CommandButton1_Click()
  2.   LockInput
  3. End Sub

  4. Private Sub UnlockInput()
  5.   Unprotect Password:="1234"
  6.   Range("IN_DATA1").Locked = False
  7.   Protect Password:="1234"
  8. End Sub

  9. Private Sub LockInput()
  10.   Unprotect Password:="1234"
  11.   Range("IN_DATA1").Locked = True
  12.   Protect Password:="1234"
  13. 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/)