Board logo

標題: 隱藏功能 [打印本頁]

作者: myleoyes    時間: 2014-9-18 21:46     標題: 隱藏功能

各位前輩你們好!!   
      前輩!
          選取任意欄  按AA鈕
          就可以隱藏不想讓他人使用的功能
          請問點選任意儲存格  按BB鈕
          同樣也可以隱藏不想讓他人使用的功能
          不知程式如何寫?
          請知道的前輩,不吝賜教謝謝再三!!  
sub AA()
   Application.CommandBars("Column").Controls(1).Enabled = False '剪下
   Application.CommandBars("Column").Controls(3).Enabled = False '貼上
   Application.CommandBars("Column").Controls(6).Enabled = False '刪除
   Application.CommandBars("Column").Controls(7).Enabled = False '清除內容
End Sub
作者: 蝕光迴狼    時間: 2014-10-23 19:52

回復 1# myleoyes


建議您最好詳細說明,如此才能讓有心人士幫忙您解答。

例如:
 1.表格內設立按鈕,來開啟或關閉功能。

 2.依您字面意思所述,如果是要關閉【貼上】【刪除】【清除內容 】【剪下】功能不讓別人使用,
  最好是在開啟表格時就執行巨集程式,比輸入aa還要好。

 3.又或者您擔心動要Excel表格內容,請善用【保護 - 鎖定】【保護 - 隱藏】功能。
作者: myleoyes    時間: 2014-10-23 22:36

回復 2# 蝕光迴狼
   前輩!因為有程式在跑所以無法用
          保護工作表的方式
          如附程式所訴
          請不吝賜教謝謝再三!!
  1. Sub 權限功能()
  2.     Dim i
  3.     Dim hwd As Long
  4.    '讓A:AR欄的區域加入以下功能
  5.    'Application.CommandBars("Column").Controls(1).Enabled = False '剪下
  6.    'Application.CommandBars("Column").Controls(3).Enabled = False '貼上
  7.    'Application.CommandBars("Column").Controls(6).Enabled = False '刪除
  8.    'Application.CommandBars("Column").Controls(7).Enabled = False '清除內容
  9.    '就能點選任意儲存格可以隱藏不想讓他人使用的功能以免程式跑出來的數據失貞
  10.     If [BB:CT].EntireColumn.Hidden = False Then
  11.           [F21] = "=Text(sheet1!A1, 0)"
  12.           [BB:CT].EntireColumn.Hidden = True
  13.           Application.CommandBars("Column").Controls(11).Enabled = False
  14.     ElseIf [BB:CT].EntireColumn.Hidden = True And [F21] <> "" Then
  15.     For i = 1 To 3
  16.        lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
  17.        ZZ = InputBox("輸入權限密碼", "請輸入檔案管理者密碼!!")
  18.        If ZZ = "" Then End
  19.        If ZZ = [F21] Then
  20.           Application.CommandBars("column").Controls(11).Enabled = True
  21.           [BB:CT].EntireColumn.Hidden = False
  22.           ActiveWindow.ScrollColumn = 53
  23.           [F21] = ""
  24.           End
  25.         '恢復:AR欄的區域功能
  26.         'Application.CommandBars("Column").Controls(1).Enabled = True '剪下
  27.         'Application.CommandBars("Column").Controls(3).Enabled = True '貼上
  28.         'Application.CommandBars("Column").Controls(6).Enabled = True '刪除
  29.         'Application.CommandBars("Column").Controls(7).Enabled = True '清除內容
  30.        ElseIf ZZ <> [F21] Then
  31.           MsgBox "※密碼錯誤!!你有(3次)機會除檔案管理者外無法使用OK!"
  32.        End If
  33.        If i = 3 Then ThisWorkbook.Close SaveChanges:=False
  34.     Next
  35.     End If
  36. End Sub
複製代碼

作者: myleoyes    時間: 2014-10-23 22:42

回復 2# 蝕光迴狼
前輩!抱歉忘了附檔
作者: GBKEE    時間: 2014-10-24 09:11

本帖最後由 GBKEE 於 2014-10-24 12:57 編輯

回復 4# myleoyes
選取任意欄  按AA鈕,就可以隱藏不想讓他人使用的功能
點選任意儲存格  按BB鈕,    同樣也可以隱藏不想讓他人使用的功能

請問 按AA鈕,按BB鈕 的差異點在哪裡??
   
前輩!因為有程式在跑所以無法用, 保護工作表的方式

可參考 這裡  [保護工作表有許多選項,可參考VBA說明, Protect 方法]

加強一下,限制的權限.
  1. Option Explicit
  2. Dim Ar()
  3. Sub Ex_限制的權限()
  4.     Ar = Array("複製", "剪下", "貼上", "刪除", "清除內容", "取消隱藏")
  5.     '限制設置 True
  6.     限制設置 False
  7.     Application.CommandBars("Column").ShowPopup
  8. End Sub
  9. Private Sub 限制設置(Msg As Boolean)
  10.     Dim Com As CommandBar, C As Object, Cc As Object
  11.     On Error Resume Next
  12.     If Msg Then
  13.         For Each Com In Application.CommandBars
  14.             Com.Reset   '應用程式中的命令列的重設(恢復原設定)
  15.         Next
  16.         Exit Sub
  17.     End If
  18.     For Each Com In Application.CommandBars
  19.         For Each C In Com.Controls
  20.             限制設置_副程式 C, Msg
  21.             For Each Cc In C.Controls
  22.                 限制設置_副程式 Cc, Msg
  23.             Next
  24.         Next
  25.     Next
  26. End Sub
  27. Private Sub 限制設置_副程式(C As Object, xMsg As Boolean)
  28.     Dim A As Variant
  29.     For Each A In Ar
  30.         If C.Caption Like A & "*" Then C.Enabled = xMsg
  31.     Next
  32. End Sub
複製代碼

作者: myleoyes    時間: 2014-10-26 07:52

回復 5# GBKEE
良師!
     這樣程式是OK!
     但有另一個困擾也就是說
     一但範例檔執行限制功能之後
     再開啟的任意檔案都同樣也
     會受限相同功能而無法使用
     這樣是錯誤的...
     應該是A檔執行限制功能
     就只適用於A檔而不牽涉到
     其他檔才有意義
     不知可否有解?
     關於
     按AA鈕,按BB鈕 的差異點在哪裡??
     AA鈕是限制隱藏測試用
     BB鈕是限制複製,剪下,貼上,刪除,清除內容測試用
     辛苦囉!謝謝再三!!
作者: GBKEE    時間: 2014-10-26 08:27

回復 6# myleoyes
  1. Option Explicit
  2. 'ThisWorkbook模組 的程式碼
  3. Private Sub Workbook_Open()
  4. 'ThisWorkbook 檔案開啟時自動執行的預設事件
  5.     限制設置 False
  6. End Sub
  7. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  8. 'ThisWorkbook 檔案關閉時自動執行的預設事件
  9.     限制設置 True
  10. End Sub
  11. Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  12. 'ThisWorkbook 視窗(活頁簿)為作用中的視窗時自動執行的預設事件
  13.     限制設置 False
  14. End Sub
  15. Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
  16. 'ThisWorkbook 視窗(活頁簿)不是作用中的視窗時自動執行的預設事件
  17.     限制設置 True
  18. End Sub

  19. '******* 限制設置的程式碼 可置於一般模組為公用程序
  20. Sub 限制設置(Msg As Boolean)
  21.     Dim COM As CommandBar, C As Object, Cc As Object, AR()
  22.     AR = Array("複製", "剪下", "貼上", "刪除", "清除內容", "取消隱藏")
  23.     On Error Resume Next
  24.     For Each COM In Application.CommandBars
  25.         For Each C In COM.Controls
  26.             限制設置_副程式 C, Msg, AR
  27.             For Each Cc In C.Controls
  28.                 限制設置_副程式 Cc, Msg, AR
  29.             Next
  30.         Next
  31.     Next
  32. End Sub
  33. Private Sub 限制設置_副程式(C As Object, xMsg As Boolean, AR As Variant)
  34.     Dim A As Variant
  35.     For Each A In AR
  36.         If C.Caption Like A & "*" Then C.Enabled = xMsg
  37.     Next
  38. End Sub
複製代碼

作者: myleoyes    時間: 2014-10-28 06:25

回復 7# GBKEE
良師!早安!!
     謝謝!!
     程式雖然可以解決檔案受限的問題
     但是 權限功能鈕
     確失去意義如附動畫檔所示
     小弟繞來繞去的修改測試還是無法找出
     兩全其美的方法沒辦法名師卻出笨徒
     只好再次麻煩良師
     辛苦囉!謝謝再三!!
作者: GBKEE    時間: 2014-10-28 10:59

本帖最後由 GBKEE 於 2014-10-28 11:05 編輯

回復 8# myleoyes
參考看看
ThisWorkbook的程式碼
  1. Private Sub Workbook_Open()
  2. ' 檔案開啟時自動執行的預設事件
  3.     權限功能
  4. End Sub
  5. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  6.     'ThisWorkbook 檔案關閉時自動執行的預設事件
  7.     限制設置 True
  8. End Sub
  9. Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  10. 'ThisWorkbook 視窗(活頁簿)為作用中的視窗時自動執行的預設事件
  11.     限制設置 檔案管理者   
  12. End Sub
  13. Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
  14. 'ThisWorkbook 視窗(活頁簿)不是作用中的視窗時自動執行的預設事件
  15.     限制設置 True
  16. End Sub
複製代碼
Module1的程式碼
  1. Public 檔案管理者 As Boolean
  2. Sub 權限功能()
  3.     Dim zz As String, i As Integer
  4.     i = 3
  5.     Do
  6.         zz = InputBox("41821 輸入權限密碼" & vbLf & "你有(" & i & "次)機會可用!", "請輸入檔案管理者密碼!!")
  7.         i = i - 1
  8.     Loop Until zz = [F21] Or i <= 0 Or zz = ""
  9.     If zz = Sheet2.[F21] Then
  10.         檔案管理者 = True
  11.         限制設置 檔案管理者        
  12.     ElseIf zz <> Sheet2.Range("F21") Then
  13.         檔案管理者 = False
  14.         限制設置 檔案管理者
  15.         'ThisWorkbook.Close SaveChanges:=False
  16.     End If
  17. End Sub
  18. Sub 按鈕1()  '取消 檔案管理者
  19.     檔案管理者 = False
  20. End Sub
複製代碼
Sheet2的程式碼
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2.     If 檔案管理者 = False Then 權限功能
  3. End Sub
複製代碼

作者: myleoyes    時間: 2014-11-1 21:12

回復 9# GBKEE
良師!
     抱歉!近日來加班延誤回覆
     程式OK!方法如下
  1. Private Sub Workbook_WindowActivate(ByVal Wn As Window)
  2. 'ThisWorkbook 視窗(活頁簿)為作用中的視窗時自動執行的預設事件
  3.     限制設置 True
  4. End Sub
  5. Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
  6. 'ThisWorkbook 視窗(活頁簿)不是作用中的視窗時自動執行的預設事件
  7.     限制設置 True
  8. End Sub
  9. Sheet2的程式碼
  10.   Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  11.      If [BB:CT].EntireColumn.Hidden = False Then
  12.        限制設置 True
  13.      ElseIf [BB:CT].EntireColumn.Hidden = True Then
  14.        限制設置 False
  15.      End If
  16.   End Sub
  17. Sub 權限功能()
  18.     Dim zz As String, i As Integer
  19.     Dim hwd As Long
  20.     If [BB:CT].EntireColumn.Hidden = False Then
  21.           [F21] = "=Text(sheet1!A1, 0)"
  22.           [BB:CT].EntireColumn.Hidden = True
  23.           限制設置 False
  24.     ElseIf [BB:CT].EntireColumn.Hidden = True And [F21] <> "" Then
  25.        i = 3
  26.        Do
  27.        lTimeID = timeSetEvent(10, 0, AddressOf TimeProc, 1, 1)
  28.        zz = InputBox("輸入權限密碼" & vbLf & "你有(" & i & "次)機會可用!", "請輸入檔案管理者密碼

  29. !!")
  30.        i = i - 1
  31.        Loop Until zz = [F21] Or i <= 0 Or zz = ""
  32.            If zz = "" Then
  33.                End
  34.            ElseIf zz = Sheet2.[F21] Then
  35.                [BB:CT].EntireColumn.Hidden = False
  36.                [F21] = ""
  37.                限制設置 True
  38.            ElseIf zz <> Sheet2.[F21] Then
  39.                ThisWorkbook.Close SaveChanges:=False
  40.            End If
  41.     End If
  42. End Sub
複製代碼
小弟另一問題請教執行下列程式
Private Sub ComboBox1_Change()
        [B5] = ComboBox1.Value
        Sheet1.ComboBox2.Activate
        Application.SendKeys "%{DOWN}"
     End Sub
     Private Sub ComboBox2_Change()
        [C5] = ComboBox2.Value
        [G5].Selec
     End Sub
    鍵盤的Num lock燈為何會自動熄滅
     請不吝賜教辛苦囉!謝謝再三!!




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