Chào các bác.
Em có 1 worbook, nay em muốn khi nó Active thì tất cả các thanh công cụ và hệ thống menu bị ẩn, khi nó Deactive thì trả lại nguyên dạng.
Các bác giúp em nhé. Cảm ơn các bác nhiều.
Sub RemoveToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = True
.CommandBars("Full Screen").Visible = False
.CommandBars("Worksheet Menu Bar").Enabled = False
End With
On Error GoTo 0
End Sub
Sub RestoreToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = False
.CommandBars("Worksheet Menu Bar").Enabled = True
End With
On Error GoTo 0
End Sub
Private Sub Workbook_Activate()
RemoveToolbars
End Sub
Private Sub Workbook_Deactivate()
RestoreToolbars
End Sub
Bạn thêm các dòng màu xanh vào nha, trong đó "MyToolbar" là của bạn.
Sub RemoveToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = True
.CommandBars("Full Screen").Visible = False
.CommandBars("Worksheet Menu Bar").Enabled = False .CommandBars("MyToolbar").Enabled = True
.CommandBars("MyToolbar").Visible = True End With
On Error GoTo 0
End Sub
Sub RestoreToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = False
.CommandBars("Worksheet Menu Bar").Enabled = True .CommandBars("MyToolbar").Enabled = False
End With
On Error GoTo 0
End Sub
Private Sub Workbook_Activate()
RemoveToolbars
End Sub
Private Sub Workbook_Deactivate()
RestoreToolbars
End Sub
Các bác ơi, sau khi thực hiện các đoạn code trên thì chỉ có menu bị ẩn còn các thanh công cụ vẫn hiện hữu, sau đó Excel của em bị mất dòng title, cứ phải restore.
Lưu ý: Tất cả những ví dụ cho trang này đều là ẩn commandbar/toolbar/control (False).
Nếu như bạn muốn thay đổi từ ẩn sang hiện thì bạn đổi False Thành True.
Làm sao để ẩn Command bar
Đây là đoạn code để ẩn Worksheet Menu Bar
PHP:
Application.CommandBars("Worksheet Menu Bar").Enabled = False
Đây là đoạn code để ẩn Cell menu (Khi chúng ta nhấn chuột phải ở 1 cell nào đó)
PHP:
Application.CommandBars("Cell").Enabled = False
Lưu Ý: Điều quan trọng là bạn phải luôn sử dụng tiếng Anh trên thanh Command bar ở trong code.
Nếu bạn sử dụng tên hiện thời thì nó sẽ không hoạt động.
Nếu bạn không biết tiếng Anh thì bạn có thể chạy đoạn code sau, nó sẽ tự động liệt kê tên bằng tiếng hiện thời office bạn đang sử dụng và tiếng Anh bằng 1 sheet khác.
PHP:
Sub Get_Commandbars_Names()
Dim Cbar As CommandBar
Dim NewWS As Worksheet
Dim RNum As Long
RNum = 1
Set NewWS = Worksheets.Add
On Error Resume Next
ActiveSheet.Name = "CommandBarNames"
On Error GoTo 0
For Each Cbar In Application.CommandBars
NewWS.Cells(RNum, "A").Value = Cbar.Name
NewWS.Cells(RNum, "B").Value = Cbar.NameLocal
RNum = RNum + 1
Next Cbar
NewWS.Columns.AutoFit
End Sub
Làm sao để ẩn tất cả Command bars
Nếu bạn muốn khôi phục lại chúng sau khi chạy đoạn code sau thì thay False = True
PHP:
Sub Disable_Command_Bars_1()
'This will disable all Command bars
Dim Cbar As CommandBar
For Each Cbar In Application.CommandBars
Cbar.Enabled = False
Next
End Sub
Làm sao để ẩn 1 Menu hay 1 control
Ẩn menu trên Worksheet Menu Bar
Cả 2 ví dụ sau sẽ ẩn trình đơn “File” ở Worksheet Menu Bar
1) Sử dụng tên của command bar control
PHP:
Application.CommandBars("Worksheet Menu Bar").Controls("File").Enabled = False
Nhưng trường hợp này nó sẽ không chạy nếu như bạn sử dụng Office không phải là phiên bản tiến Anh
2) Sử dụng số ID của command bar control ( Nó chạy cho tất cả các ngôn ngữ )
PHP:
Application.CommandBars("Worksheet Menu Bar").FindControl(ID:=30002).Enabled = False
Ví dụ trên chỉ ẩn 1 trình đơn “File” tương ứng mã 30002
Ẩn 1 control
Đây là code ẩn View - Full Screen ở Worksheet Menu Bar
PHP:
Application.CommandBars("Worksheet Menu Bar").FindControl _
(ID:=178, Recursive:=True).Enabled = False
Đây là ví dụ sẽ ẩn "Copy" ở thanh Standard Toolbar
Và ví dụ dưới đây sẽ ẩn tòan bộ chức năng "Copy" .
Note: Tất cả chức năng "Copy" ở thanh Menu Bar, Toolbars và khi click chuột phải.
Nếu bạn sử dụng Excel 2000-2003 bạn có thể dung code sau:
PHP:
Sub MenuControl_False()
' Excel 2000 - 2003
Dim Ctrl As Office.CommandBarControl
For Each Ctrl In Application.CommandBars.FindControls(ID:=19)
Ctrl.Enabled = False
Next Ctrl
End Sub
Nếu sử dụng Excel 97 thì dung code này (Nó cũng chạy được cả phiên bản 2000-2003)
PHP:
Sub MenuControl_Enabled_False()
' Excel 97 - 2003
Dim Ctl As CommandBarControl
Dim Cbar As Integer
On Error Resume Next
For Cbar = 1 To Application.CommandBars.Count
For Each Ctl In Application.CommandBars(Cbar).Controls
Application.CommandBars(Cbar).FindControl(ID:=19, _
Recursive:=True).Enabled = False
Next Ctl
Next Cbar
On Error GoTo 0
End Sub
3) Vô hiệu hóa phím nóng
Bạn có thể sử dụng Application.OnKey để làm điều đó.
Để biết them thong tin bạn nên tham khảo VBA help.
Ví dụ ẩn tổ hợp phím Ctrl+C (Cho chức năng Copy)
PHP:
Application.OnKey "^c", ""
Để mở lại bạn dung:
PHP:
Application.OnKey "^c"
4) Khác
Vô hiệu hóa right click trên thenh worksheet menu .
PHP:
On Error Resume Next
Application.CommandBars("Toolbar List").Enabled = False
On Error GoTo 0
Sự kiện này ngăn chặn người sử dụng double-clicking ở vùng Toolbar để mở nó.
(Customize Toolbars) ở Excel 2002 và ở trên
PHP:
Application.CommandBars.DisableCustomize = True
Nếu bạn muốn lọai bỏ “Type a question for Help” ở thanh Worksheet Menu bạn có thể sử dụng nó ở Excel 2002 như trên. True = ẩn và False = hiện
Bạn có thể dung code này để tránh gây ra lổi ở Excel 2000
PHP:
If Val(Application.Version) > 9 Then
CallByName CommandBars, "DisableCustomize", VbLet, True
CallByName CommandBars, "DisableAskAQuestionDropdown", VbLet, True
End If
5) Reset lại commandbar
PHP:
Application.CommandBars("Worksheet Menu Bar").Reset
To dofoowear
Bài viết của bạn rất hay, tỉ mỉ giúp nhiều cho những bạn như tôi muốn học hỏi về VBA.Nhân tiện đây tôi muốn cách nào để biết các Mã số Menu Bar của 2003 khi cần , chứ nhìn Mã của bạn kiếm ra để học thuộc ...chắc mệt xỉu ( ý tôi là khi cần Mã nào thì mình biết cách kiếm ra nó ).
Cảm ơn bạn
Chào
To dofoowear
Bài viết của bạn rất hay, tỉ mỉ giúp nhiều cho những bạn như tôi muốn học hỏi về VBA.Nhân tiện đây tôi muốn cách nào để biết các Mã số Menu Bar của 2003 khi cần , chứ nhìn Mã của bạn kiếm ra để học thuộc ...chắc mệt xỉu ( ý tôi là khi cần Mã nào thì mình biết cách kiếm ra nó ).
Cảm ơn bạn
Chào
Thì chạy code thí nghiệm là biết liền!
Ví dụ bạn muốn biết các ID của Sub Menu có trong menu File, dùng code này:
PHP:
Sub Test()
Dim Bar As CommandBarControl, i As Long
For Each Bar In Application.CommandBars("File").Controls
i = i + 1
Cells(i, 1) = Bar.Caption
Cells(i, 2) = Bar.ID
Next Bar
End Sub
Code sẽ liệt kê ra: Cột A là tên, cột B là ID
Bạn thử xem!
Thì chạy code thí nghiệm là biết liền!
Ví dụ bạn muốn biết các ID của Sub Menu có trong menu File, dùng code này:
PHP:
Sub Test()
Dim Bar As CommandBarControl, i As Long
For Each Bar In Application.CommandBars("File").Controls
i = i + 1
Cells(i, 1) = Bar.Caption
Cells(i, 2) = Bar.ID
Next Bar
End Sub
Code sẽ liệt kê ra: Cột A là tên, cột B là ID
Bạn thử xem!
To dofoowear
Bài viết của bạn rất hay, tỉ mỉ giúp nhiều cho những bạn như tôi muốn học hỏi về VBA.Nhân tiện đây tôi muốn cách nào để biết các Mã số Menu Bar của 2003 khi cần , chứ nhìn Mã của bạn kiếm ra để học thuộc ...chắc mệt xỉu ( ý tôi là khi cần Mã nào thì mình biết cách kiếm ra nó ).
Cảm ơn bạn
Chào
Bạn ơi! Xin đừng nói thế mà mất tình đoàn kết! Trên GPE này có thiếu gì SƯ PHỤ, trong khi tôi chỉ là lính mới tò te.. là hạt cát.. không dám xưng là thầy của ai cả (vì thực chất tôi cũng đang học hỏi từ các bậc đàn anh)
Option Explicit
Private Sub Workbook_Activate()
cmb False
End Sub
Private Sub Workbook_Deactivate()
cmb True
End Sub
Private Sub cmb(gia_tri As Boolean)
Dim tbar As CommandBar
For Each tbar In Application.CommandBars
tbar.Enabled = gia_tri
Next
End Sub
Cảm ơn các bác đã quan tâm giúp đỡ.
Từ code của các bác em làm ra file đính kèm. Khi sheet "Hide" mà Active thì ẩn thanh công cụ và menu, khi nó Deactive thì hiện trở lại. Em chạy thấy rất "nuột" trên Excel2003, không hiểu trên Excel2007 (or more) thì thế nào nhỉ, ẩn hệ thống Ribon chắc khác. Các bác tiếp tục giúp em nhé.
Cho mình hỏi sử dụng code nào để ẩn tất cả các thanh công cụ, nhưng sau khi thoát thì tự phục hồi lại các thanh đó (Nghĩa là chỉ áp dụng cho file chứa code đó thôi)
Sub RemoveToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = True
.CommandBars("Full Screen").Visible = False
.CommandBars("Worksheet Menu Bar").Enabled = False
End With
On Error GoTo 0
End Sub
Sub RestoreToolbars()
On Error Resume Next
With Application
.DisplayFullScreen = False
.CommandBars("Worksheet Menu Bar").Enabled = True
End With
On Error GoTo 0
End Sub
Private Sub Workbook_Activate()
RemoveToolbars
End Sub
Private Sub Workbook_Deactivate()
RestoreToolbars
End Sub
Chào các bạn
Khi RemoveToolbars thì tôi vẫn muốn hiện thanh Title Bar, thì làm cách nào
----------------------------
P/s : Tôi mày mò cả 01 ngày mà chưa ra
Thì chạy code thí nghiệm là biết liền!
Ví dụ bạn muốn biết các ID của Sub Menu có trong menu File, dùng code này:
PHP:
Sub Test()
Dim Bar As CommandBarControl, i As Long
For Each Bar In Application.CommandBars("File").Controls
i = i + 1
Cells(i, 1) = Bar.Caption
Cells(i, 2) = Bar.ID
Next Bar
End Sub
Code sẽ liệt kê ra: Cột A là tên, cột B là ID
Bạn thử xem!
anh NDU ơi, em thắc mắc là code này có kiểm tra được số ID các thành phần trong filter gồm (auto filter, show all, advanded filter) của Data > Filter > (? auto filter, ? show all, ?advanded filter) không anh?
Chào các anh, chị.
Sưu tầm code trên đây em làm ra file đính kèm với mục đích thiết lập menu riêng, nhưng bí ở chỗ ẩn thanh công cụ hiện thời, khi thoát thì nó lại hiện lại các thanh đó (tình trạng ban đầu). Và thêm nữa muốn hoạt động tương tự trên Excel >2003 thì phải làm thế nào?
Các anh, chị trợ giúp nhé. Cảm ơn nhiều.