Giúp đỡ khôi phục CommandBarControl (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

phibonaxi

Thành viên mới
Tham gia
3/8/09
Bài viết
49
Được thích
1
Chào các anh chị GPE,
Tôi có tìm kiếm trên mạng đoạn code để ngăn không cho user delete sheet trong workbook 'Task Cotrol'.
Code như sau:

Private Sub Worksheet_Activate()
Dim CB As CommandBar
Dim Ctrl As CommandBarControl

For Each CB In Application.CommandBars
Set Ctrl = CB.FindControl(ID:=847, recursive:=True)
If Not Ctrl Is Nothing Then
Ctrl.OnAction = "RefuseToDelete"
Ctrl.State = msoButtonUp
End If
Next
End Sub

'-----------------------------------

Private Sub Worksheet_Deactivate()
Dim CB As CommandBar
Dim Ctrl As CommandBarControl

For Each CB In Application.CommandBars
Set Ctrl = CB.FindControl(ID:=847, recursive:=True)
If Not Ctrl Is Nothing Then Ctrl.Delete
Next
End Sub

Public Sub RefuseToDelete()

MsgBox "This sheet can not be deleted!", _
Buttons:=vbExclamation, _
Title:="Deletion is limited | Task Reminder"

End Sub

Code hoạt động rất tốt. Nhưng tôi gặp một vấn đề sau đó: khi tôi đóng workbook 'Task Cotrol', và muốn delete sheet ở workbooks khác thì không thể thực hiện được. Nó sẽ hiện thông báo ở Sub RefuseToDelete và mở luôn workbook 'Task Cotrol'.
Vậy phải thêm đoạn code nào để làm sao để khôi phục lại trạng thái ban đầu khi đóng workbook 'Task Cotrol'?
 
Chào các anh chị,
Không biết vấn đề nan giải của tôi có hướng giải quyết không.
Ngày nào tôi cũng mong để có cao thủ ra tay tương trợ. Hic hic
 
Upvote 0
Chào các anh chị,
Không biết vấn đề nan giải của tôi có hướng giải quyết không.
Ngày nào tôi cũng mong để có cao thủ ra tay tương trợ. Hic hic

Lúc đầu tôi tưởng Task Control là sheet hóa ra nó là workbook (do nhìn thấy Private Sub Worksheet_Activate() và Private Sub Worksheet_Deactivate). Tưởng là chỉ cấm xóa sheet Task Control còn cho phép xóa các sheet khác cùng workbook. Nếu cấm xóa mọi sheet trong workbook Task Control thì
trong Module, vd. Module1
Mã:
Public Sub RefuseToDelete()
    MsgBox "This sheet can not be deleted!", Buttons:=vbExclamation, Title:="Deletion is limited | Task Reminder"
End Sub
Public Sub BlockDelete()
Dim CB As CommandBar
Dim Ctrl As CommandBarControl
        For Each CB In Application.CommandBars
            Set Ctrl = CB.FindControl(ID:=847, recursive:=True)
            If Not Ctrl Is Nothing Then
                Ctrl.OnAction = "RefuseToDelete"
                Ctrl.State = msoButtonUp
            End If
        Next
End Sub
Public Sub ResetDefault()
Dim CB As CommandBar
Dim Ctrl As CommandBarControl
    For Each CB In Application.CommandBars
        Set Ctrl = CB.FindControl(ID:=847, recursive:=True)
        If Not Ctrl Is Nothing Then Ctrl.OnAction = ""
    Next
End Sub

Trong ThisWorkbook
Mã:
Private Sub Workbook_Activate()
   BlockDelete
End Sub
Private Sub Workbook_Deactivate()
    ResetDefault
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn siwton đã trả lời bài của tôi.
Nhưng còn một vấn đề, hy vọng sẽ giải quyết được.
Do trong lần trước tôi sử dụng lệnh delete, như bên dưới:

For Each CB In Application.CommandBars
Set Ctrl = CB.FindControl(ID:=847, recursive:=True)
If Not Ctrl Is Nothing Then Ctrl.Delete
Next


Nên giờ khi click chuột phải lên sheet để delete, thì mục 'Delete Sheet' không còn nữa. Bây giờ tôi muốn khôi phục lại hiện trạng ban đầu thì phải dùng lệnh gì?

Tôi upload file lên, các anh chị thử delete sheet trong file của tôi. Sao đó đóng file lại, ở một workbook khác, thử delete sheet bằng cách right click và chọn delete sheet, sẽ gặp vấn đề là nó sẽ không delete sheet được và mở luôn file của tôi lên.

Cám ơn các anh chị đã quan tâm và giúp đỡ.

P/S: do tôi còn 'gà' lắm, nên code có dài dòng xin đừng chê.
Tôi cũng đã thử chạy Sub ResetDefault của siwton, nhưng vẫn không khôi phục được.
 

File đính kèm

Upvote 0
Mình nghĩ bạn muốn khôi phục lấy commandbars giống như mặc định? Bạn test thử code này xem có được không
Mã:
Sub Resetbar()
Dim bar As CommandBar
For Each bar In Application.CommandBars
bar.Reset
Next
End Sub
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom