Board logo

標題: 保護工作表問題 [打印本頁]

作者: hugh0620    時間: 2016-3-25 12:35     標題: 保護工作表問題

大大們,遇到問題。
描述如下:
               原先是希望在儲存前,可以先把一些需要上鎖的工作表上鎖後
               再進行儲存檔案。
               但因為另存新檔時,有產生錯誤,所以調整成在打開時,將工作表上鎖。
               因為若打開時設定,在關閉或離開EXCEL,就會跳出是否儲存的視窗。
               請大大們,指導一下,問題產再生哪,如何解決在另存新檔時的錯誤。
              作法1、 另存新檔時,產生錯誤。  (如何解決)
              Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
                      AP1 = 工作表1.Range("L1")       '密碼位置
                     工作表1.Protect Password:=AP1   '保護工作表  車台表    '產生錯誤視窗。
                             '=====保護工作表  工段表
                                    工作表3.Unprotect Password:=AP1   '取消保護工作表
                                    工作表3.Columns("F:G").Hidden = True '隱藏欄位
                                    工作表3.Protect Password:=AP1   '保護工作表
                              '===================
                     工作表5.Protect Password:=AP1   '保護工作表  LBF-B
              End Sub

              作法2、打開檔案時,工作表上鎖。 (另存新檔,沒有問題。)
              Private Sub Workbook_Open()
                     AP1 = 工作表1.Range("L1")       '密碼位置
                     工作表1.Protect Password:=AP1   '保護工作表  車台表
                             '=====保護工作表  工段表
                                    工作表3.Unprotect Password:=AP1   '取消保護工作表
                                    工作表3.Columns("F:G").Hidden = True '隱藏欄位
                                    工作表3.Protect Password:=AP1   '保護工作表
                              '===================
                     工作表5.Protect Password:=AP1   '保護工作表  LBF-B
              End Sub
作者: stillfish00    時間: 2016-3-25 13:46

回復 1# hugh0620
作法1的錯誤視窗寫啥?  我測試沒跳出錯誤

你用保護工作表的目的是?
個人認為保護工作表是用來防止其他人使用這份文件時不小心修改到特定工作表(或儲存格)
那麼你就做一次保護工作表的動作,儲存,就好了。
照理說使用者打開時就是保護狀態了,需要每次儲存前都保護的理由是啥?
作者: hugh0620    時間: 2016-3-28 19:05

回復 2# stillfish00

你用保護工作表的目的是?
個人認為保護工作表是用來防止其他人使用這份文件時不小心修改到特定工作表(或儲存格)
Ans:你的保護工作表的目的或許是不想要讓人去修改到資料,
           我的需求是保護某些機密的資料。

照理說使用者打開時就是保護狀態了,需要每次儲存前都保護的理由是啥?
Ans:在文中已經有寫清楚原因,因為若打開時設定,在關閉或離開EXCEL,就會跳出是否儲存的視窗。
           若是再儲存前,先將保護設定好,在下次打開時,只要沒有修改到內容,
           這樣是不用跳出一個儲存畫面,你還需要將牠點掉。
           在設計的過程中,還是要考慮到使用者的方便性。
作者: stillfish00    時間: 2016-3-28 19:43

回復 3# hugh0620
我的意思是盡量不要在Workbook_BeforeSave 或 Workbook_Open 內每次都重新設定。
而是寫成一次性的Sub myLock()和 Sub myUnlock(),要給使用者前跑過一次myLock 再儲存給使用者就好了,而開發者要開發修改前跑一次myUnlock。

當然你若覺得必要還是可以那樣做,只是你還是沒說錯誤視窗寫啥??
作者: hugh0620    時間: 2016-3-28 20:12

本帖最後由 hugh0620 於 2016-3-28 20:14 編輯

回復 4# stillfish00

Sub myLock()和 Sub myUnlock(),要給使用者前跑過一次myLock 再儲存給使用者就好了,而開發者要開發修改前跑一次myUnlock。
ANS:所設計的EXCEL工具,是讓不同單位的人共同使用,可以分兩種:
             1、可觀看機密資料、可以修改資料的人==>所以,他們需要解鎖,但它們會忘記上鎖。
             2、不可以觀看機密資料、不可以修改資料的人
            當你在同一個工具不同階層的人使用時,設計時,就要思考到使用者的習性,及工具的開放性。
            站在你設計的角度思考,針對的是一個較封閉的方式,開發者直接鎖死工作表,
            無法滿足,同一個工具讓不同層級的人共同使用。
            所以,我需要的是在打開或儲存前,還原工具的原始設定(保護工作表及按鈕設定)。
            以避免操作者的不當,讓資料外洩,導致不必要的問題產生。
            不同的需求,會有不同的設計方式,在設計之初,就會把需求及使用者的習慣考慮進去,
            才能更有效的撰寫出使用者需求的工具。
            很抱歉,沒有說清楚。
            但需要的是程式碼該如何修改,非是如何設計。
作者: 准提部林    時間: 2016-3-29 13:22

回復 5# hugh0620


Private Sub Workbook_Open()
AP1$ = Sheet1.Range("L1")

Sheet1.Protect AP1

Sheet3.Unprotect AP1
Sheet3.Columns("F:G").Hidden = True
Sheet3.Protect AP1

Sheet5.Protect AP1

ThisWorkbook.Saved = True  這一行可以在無更改任何動作時, 關閉檔案時不顯示提醒視窗
End Sub
作者: 准提部林    時間: 2016-3-29 13:34

Workbook_BeforeSave 另存新檔, 我也測不出錯誤, 是否有其它程式衝突?

另使用 OPEN 來鎖定, 若原來存檔前未加鎖定, 而使用者不開巨集也是沒用!!!
作者: hugh0620    時間: 2016-3-29 13:57

回復 7# 准提部林


    感恩!! 我會試看看。




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