PDA

View Full Version : Ẩn/hiện thanh công cụ



nncb2008
02-08-09, 04:29 AM
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.

tqhung65
02-08-09, 07:00 AM
Bạn thêm macro này vào


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

nncb2008
02-08-09, 09:25 PM
Cảm ơn tqhung65.
Em chỉ muốn ẩn thanh công cụ của Excel, còn thanh công cụ của em vẫn còn. Các bác giúp em nhé.

tqhung65
03-08-09, 09:16 AM
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

nncb2008
03-08-09, 06:27 PM
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.

Hai Lúa Miền Tây
04-08-09, 07:39 AM
Nhân tiện đây cho mình "ké" chút xíu.

Ẩn Command bars và controls ở Excel 97-2003

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

Application.CommandBars("Worksheet Menu Bar").Enabled = False
Đây là đoạn code để ẩn Standard toolbar

Application.CommandBars("Standard").Enabled = False
Đây là đoạn code để ẩn Cell menu (Khi chúng ta nhấn chuột phải ở 1 cell nào đó)

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.

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

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
http://i216.photobucket.com/albums/cc43/domfootwear/menubar1.jpg

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ữ )
http://i216.photobucket.com/albums/cc43/domfootwear/menubar2.jpg

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

Application.CommandBars("Worksheet Menu Bar").FindControl _
(ID:=178, Recursive:=True).Enabled = False

Đây là ví dụ sẽ ẩn "Copy" ở thanh Standard Toolbar

Application.CommandBars("Standard").FindControl(ID:=19).Enabled = False

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:

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)

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

Hai Lúa Miền Tây
04-08-09, 07:41 AM
Mời các bạn tham khảo các mã số Menu Bar Excel 2003 như sau:

http://i216.photobucket.com/albums/cc43/domfootwear/menubar1.jpg

http://i216.photobucket.com/albums/cc43/domfootwear/menubar2.jpg

http://i216.photobucket.com/albums/cc43/domfootwear/File.png

http://i216.photobucket.com/albums/cc43/domfootwear/Edit.png

http://i216.photobucket.com/albums/cc43/domfootwear/View.png

http://i216.photobucket.com/albums/cc43/domfootwear/Insert.png

http://i216.photobucket.com/albums/cc43/domfootwear/Format.png

http://i216.photobucket.com/albums/cc43/domfootwear/Tools.png

http://i216.photobucket.com/albums/cc43/domfootwear/Data.png

http://i216.photobucket.com/albums/cc43/domfootwear/Window.png

Hai Lúa Miền Tây
04-08-09, 07:42 AM
http://i216.photobucket.com/albums/cc43/domfootwear/Help.png

Một số ví dụ hữu dụng khác
1) Làm thế nào để chạy tự động 1 code khi bạn di chuyển qua lại giữa các Worksheet, đóng mở file

Private Sub Workbook_Activate()
'Tên macro của bạn
End Sub
Private Sub Workbook_Deactivate()
'Tên macro của bạn
End Sub

Hay sử dụng 2 sự kiện sau:

Private Sub Workbook_Open()
'Tên macro của bạn
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Tên macro của bạn
End Sub

2) Ẩn thanh FormulaBar và StatusBar

Application.DisplayFormulaBar = False
Application.DisplayStatusBar = False

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)

Application.OnKey "^c", ""
Để mở lại bạn dung:

Application.OnKey "^c"
4) Khác
Vô hiệu hóa right click trên thenh worksheet menu .

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

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

Application.CommandBars.DisableAskAQuestionDropdow n = True
Bạn có thể dung code này để tránh gây ra lổi ở Excel 2000

If Val(Application.Version) > 9 Then
CallByName CommandBars, "DisableCustomize", VbLet, True
CallByName CommandBars, "DisableAskAQuestionDropdown", VbLet, True
End If

5) Reset lại commandbar

Application.CommandBars("Worksheet Menu Bar").Reset

tranttoan
04-08-09, 08:47 AM
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

ndu96081631
04-08-09, 08:56 AM
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:


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!

tranttoan
04-08-09, 09:01 AM
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:


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!
Tôi nghỉ khỏi cần phải thử, vì bạn " là bậc thầy cúa GPE " chắc chắc sẽ đúng 101 % rồi.
Cảm ơn bạn

Hai Lúa Miền Tây
04-08-09, 09:51 AM
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
Nếu rãnh bạn vào trang sau:

http://www.erlandsendata.no/english/index.php?d=endownloadcommandbars

Tham khảo và tải ví dụ về từ từ nghiên cứu nhé
Thân

ndu96081631
04-08-09, 10:05 AM
Tôi nghỉ khỏi cần phải thử, vì bạn " là bậc thầy cúa GPE " chắc chắc sẽ đúng 101 % rồi.
Cảm ơn bạn
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)

tranttoan
04-08-09, 10:27 AM
Nếu thế thì mình phải sửa lại thôi " là một trong những bậc thầy cúa GPE ".Bạn khiêm tốn thật đấy .
Cảm ơn các bạn nhiều

chibi
04-08-09, 12:09 PM
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.
Đây là 1 cách

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

nncb2008
04-08-09, 10:31 PM
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é.

yeu_excel
22-11-10, 06:45 PM
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)

ducdinh1987
24-05-11, 10:38 PM
Bạn tham khảo ở link này nè:
http://www.giaiphapexcel.com/forum/showthread.php?49056-cho-em-h%E1%BB%8Fi-v%E1%BB%81-code-%E1%BA%A9n-v%C3%A0-hi%E1%BB%87n-menu-bar

dongducnhiem
09-01-12, 02:01 PM
Bạn thêm macro này vào


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

qtm1987
24-02-12, 09:34 AM
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:


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?

nncb2008
22-09-13, 08:36 PM
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.