vba 修改access表的链接地址_神奇的VBA编程:禁止修改Excel工作表名称
職場中經常需要將做好的Excel表格/模板發給他人或者存放在公共路徑上共享使用,此時需要禁止別人更改已經設定好的工作表名稱。或者某些工作簿中有公式使用了對某些工作表的外部引用,如果工作表名稱發生變化,那么這些外部引用會失效。又或是其它VBA程序或者其它程序使用表名稱定位工作表,那么工作表名稱的改變會導致程序無法執行!
那么如何禁止用戶更改工作表名稱呢?
假設以下案例:
禁止用戶修改宏工作簿中名稱為“生產計劃表”,“銷售計劃表”和“財務計劃表”的表名稱。
本篇中《神奇的VBA》將提供四種思路和相應的VBA代碼范例。
思路1:?保護工作簿結構
如果不采用VBA編程,最常用且有效的方法就是保護工作簿結構。
PrivateSub?Workbook_Open()???ActiveWorkbook.Unprotect???ActiveWorkbook.Protect?Structure:=True,Windows:=FalseEnd Sub該方法簡單常用,保護工作簿結構,禁止修改修改“生產計劃表”,“銷售計劃表”和“財務計劃表”的表名時也禁止對其它工作表表名稱進行修改,同時表結構無法更改,表順序,刪除,隱藏等功能也無法執行。
注意:對Excel不是太熟悉的用戶千萬不要將保護工作簿結構和工作表保護搞混。??
思路2:在工作簿模塊中,鼠標右擊工作表標簽時,禁止彈出菜單,進而無法手動更改工作表名稱。
PrivateSub Workbook_Activate()Application.CommandBars("Ply").Enabled = False'執行屏蔽右鍵菜單End SubPrivateSub Workbook_Deactivate()Application.CommandBars("Ply").Enabled = True '解除屏蔽右鍵菜單End Sub該方法簡單粗暴,區域主要在于右鍵點擊標簽時是否會彈出菜單。既然無法彈出菜單,那就無法手動修改工作名稱。既然無法彈出菜單,那么也就是無法使用菜單中的所有自動功能,也阻止了用戶執行如修改工作表標簽顏色等操作的念想。
思路3:在工作表模塊中,采用工作表Worksheet_Deactivate和Worksheet_SelectionChange事件恢復用戶對工作表名稱的修改并彈出警示框。
采用兩種不同事件的依據是日常手動修改工作表名稱通常有兩種常見的模式:
模式1:鼠標右鍵單擊工作表標簽修改表名后,點擊任意單元格完成名稱修改。
模式2:鼠標右鍵單擊工作表標簽修改表名后,點擊其它工作表標簽完成修改。
鑒于這兩種模式,同時采用Worksheet_SelectionChange工作表選區改變事件和Worksheet_Deactivate工作表解除激活事件將分別根據兩種操作模式觸發相應的事件。
Private?Sub?Worksheet_Deactivate()If?Me.Name?<>?"生產計劃表"?Then??? MsgBox?"禁止修改工作表"??? Me.Name?=?"生產計劃表"End?IfEnd SubPrivate Sub?Worksheet_SelectionChange(ByVal?Target?As?Range)If?Me.Name?<>?"生產計劃表"?Then??? MsgBox?"禁止修改工作表"??? Me.Name?=?"生產計劃表"End?IfEnd Sub該方法運行效果很好, 不過有心的同學們會發現,如果一個工作簿中30個表要對其中20個工作表名稱采用思路3的代碼方法,很顯然有點麻煩。如果集中對指定名稱的工作表執行禁止修改表名的操作呢?《神奇的VBA》介紹第4種思路。
思路4:在工作簿模塊中,綜合運用隱藏的Application事件, 字典以及工作表的代碼名稱(CodeName)。
Public WithEvents app As ApplicationDim dicPrivate Sub app_SheetDeactivate(ByVal Sh As Object)If dic.exists(Sh.CodeName) = False Then Exit SubIf dic(Sh.CodeName) <> Sh.Name Then MsgBox "你無權修改工作表名稱!" Sh.Name = dic(Sh.CodeName) End IfEnd SubPrivate Sub app_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)If dic.exists(ActiveSheet.CodeName) = False Then Exit SubIf dic(ActiveSheet.CodeName) <> ActiveSheet.Name Then MsgBox "你無權修改工作表名稱!" ActiveSheet.Name = dic(ActiveSheet.CodeName) End IfEnd SubPrivate Sub Workbook_Open() dic.Add "Sheet1", "Sheet1" dic.Add "Sheet2", "Sheet2" dic.Add "Sheet3", "Sheet3" Set app = ApplicationEnd Sub通過運行驗證該方法很好的滿足了本篇主旨的功能需求。此代碼通過在工作簿模塊編輯窗口頂層放置Public WithEvents app As Application語句中調出Application事件列表,使得我們可以像添加工作簿工作表事件一樣手動選擇添加內置的應用程序級事件。
通過應用程序級別的工作表選區改變事件和工作表解除激活事件,我們可以集中監控所有表。字典在工作簿打開時記載要禁止修改名稱的工作表名稱和代碼名稱(CodeName),工作表的代碼名稱為鍵,具有唯一性,工作表名稱為值,用戶可以隨便修改。在上述事件中通過判斷和對比觸發事件時的表名稱最終實現本篇的功能!
今天的分享就到這里,本篇中介紹的思路拋磚引玉,如果您有更多更好的思路歡迎分享!
歡迎轉發至朋友圈或點擊"在看"
更多Excel VBA編程知識(職場牛人必備秘技),請下載安裝使用一線城市職場牛人必備的參考和學習工具《神奇的VBA》插件,一款嵌入進Excel Ribbon界面,打開任意Excel工作簿就能隨時查閱學習VBA編程的Excel 插件。?
我還開發了免費的《Power Click》辦公增效插件,如您需要請自由下載安裝。
插件下載地址復制百度云盤鏈接:
鏈接:https://pan.baidu.com/s/1ACnntUozdWVkqkH_voTIQA?
提取碼:ch75?
或加入QQ群快速下載:群號:1027517316
總結
以上是生活随笔為你收集整理的vba 修改access表的链接地址_神奇的VBA编程:禁止修改Excel工作表名称的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sw接口是什么意思啊_为什么有些任务栏上
- 下一篇: vba htm转成图片_提取1000页P