Làm sao để menu tự tạo chỉ tồn tại trong file chứa code (1 người xem)

  • Thread starter Thread starter nad582
  • Ngày gửi Ngày gửi

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

nad582

Thành viên thường trực
Tham gia
7/6/11
Bài viết
317
Được thích
48
Chào các a(c) trong GPE?
e có câu hỏi thế này:
khi e đã tạo 1 cái lệnh trong thanh manu để chạy 1 macro nào đó của 1 file excel(1), nhưng khi tắt file excel(1) đó đi rồi mở lại 1 file excel(2) mới thì cái lệnh đã tạo trong thanh công cụ vẫn còn!! vậy làm sao để khi tạo 1 lệnh trong thanh menu của 1 file excel(1) mà khi mở thêm 1 file excel(2) khác không có lệnh trong file excell(2) mới!!
View attachment 127065
màu đỏ là nút lệnh e đã tạo cho file excell(1)
tóm lại là tạo nút lệnh trên thanh menu của file excell nào thì chỉ mỗi file excell đó có thôi khi mở file mới lên thì ko có!!
e dùng excell 2003!!
 
tóm lại là tạo nút lệnh trên thanh menu của file excell nào thì chỉ mỗi file excell đó có thôi khi mở file mới lên thì ko có!!
e dùng excell 2003!!

Bạn biết tạo menu đương nhiên phải biết xóa?
Đặt câu lệnh xóa menu trong Sub Auto_Close là được
Mã:
Sub Auto_Close()
  'Lệnh xóa menu menu
End Sub
Đóng file, menu sẽ được xóa
 
Upvote 0
Bạn biết tạo menu đương nhiên phải biết xóa?
Đặt câu lệnh xóa menu trong Sub Auto_Close là được
Mã:
Sub Auto_Close()
  'Lệnh xóa menu menu
End Sub
Đóng file, menu sẽ được xóa
cảm ơn a Ndu!!như vậy nếu khi xóa rồi mà e muốn sử dụng lại file excell đó thì phải làm lại cái menu đó sao? nhưng ý của e là:
khi e đã tạo 1 cái lệnh trong thanh manu để chạy 1 macro nào đó của 1 file excel(1),
nhưng khi tắt file excel(1) đó đi rồi mở 1 file excel(2) mới thì cái lệnh đã tạo trong thanh công cụ vẫn còn!!
vậy làm sao để khi tạo 1 lệnh trong thanh menu của 1 file excel(1) mà khi mở thêm 1 file excel(2) khác không có lệnh trong file excell(2) mới!!
View attachment 127065
màu đỏ là nút lệnh e đã tạo cho file excell(1)
 
Upvote 0
cảm ơn a Ndu!!như vậy nếu khi xóa rồi mà e muốn sử dụng lại file excell đó thì phải làm lại cái menu đó sao? nhưng ý của e là:

Ủa gì kỳ vậy? Cái file đó bạn mở lên và nó tự tạo ra menu (chắc dùng Auto_Open hoặc sự kiện Workbook_Open). Vậy thì bây giờ bạn cứ mở file lên là menu nó tự có thôi (Code xóa menu chỉ làm việc khi đóng file)
 
Upvote 0
Ủa gì kỳ vậy? Cái file đó bạn mở lên và nó tự tạo ra menu (chắc dùng Auto_Open hoặc sự kiện Workbook_Open). Vậy thì bây giờ bạn cứ mở file lên là menu nó tự có thôi (Code xóa menu chỉ làm việc khi đóng file)
Căng quá e ko biết diễn tả sao đây!!
e nói chi tiết lần nữa xem sao!! e dùng Excell 2003
1. e mở file excell mới lên (e lưu đặt tên là AAA), sau đó e tạo ra 1 cái menu mới (tên About) trên menu thanh (e thực hiện theo mục 3.3 http://www.giaiphapexcel.com/forum/...cơ-bản-về-Visual-Basic-for-Applications-(VBA))
2. e mở mới hoàn toàn file excell khác lên (có tên mặt định là book2), thì nó mặc định trên menu thanh cũng có menu tên About mà e đã tạo ở file excell AAA.
Tình hình là như vậy đó!! vậy làm sao khi mở file AAA lên thì vẫn có menu About trên menu thanh (vì file AAA đã tạo rồi), khi mở file excell khác thì ko có menu About trên menu thanh (vì file khác chưa tạo menu).....
e cảm ơn
 
Upvote 0
Căng quá e ko biết diễn tả sao đây!!
e nói chi tiết lần nữa xem sao!! e dùng Excell 2003
1. e mở file excell mới lên (e lưu đặt tên là AAA), sau đó e tạo ra 1 cái menu mới (tên About) trên menu thanh (e thực hiện theo mục 3.3 http://www.giaiphapexcel.com/forum/...cơ-bản-về-Visual-Basic-for-Applications-(VBA))
2. e mở mới hoàn toàn file excell khác lên (có tên mặt định là book2), thì nó mặc định trên menu thanh cũng có menu tên About mà e đã tạo ở file excell AAA.
Tình hình là như vậy đó!! vậy làm sao khi mở file AAA lên thì vẫn có menu About trên menu thanh (vì file AAA đã tạo rồi), khi mở file excell khác thì ko có menu About trên menu thanh (vì file khác chưa tạo menu).....
e cảm ơn

Hiểu rồi!
Vậy thì
- Dùng sự kiện Workbook_Deactivate để xóa menu
- Dùng sự kiện Workbook_Activate để tạo menu
 
Upvote 0
Hiểu rồi!
Vậy thì
- Dùng sự kiện Workbook_Deactivate để xóa menu
- Dùng sự kiện Workbook_Activate để tạo menu
e tưởng chỉ cần điều chỉnh trong excell thôi chứ!! vì tạo 1 menu mới nó luôn mặc định!!
Nhờ a giải thích giúp e luôn được ko?
đề bài là:
-tạo 1 file excel tên thutuc
-tạo 1 menu trên menu thanh có tên là About
-trong menu About có 3 mục con là one, true, three
vậy nhờ a viết code khi mở file thutuc len thi có menu đã tạo còn mở file khác thì ko có!!
xin cảm ơn a!!mong hồi âm
 
Upvote 0
e tưởng chỉ cần điều chỉnh trong excell thôi chứ!! vì tạo 1 menu mới nó luôn mặc định!!
Nhờ a giải thích giúp e luôn được ko?
đề bài là:
-tạo 1 file excel tên thutuc
-tạo 1 menu trên menu thanh có tên là About
-trong menu About có 3 mục con là one, true, three
vậy nhờ a viết code khi mở file thutuc len thi có menu đã tạo còn mở file khác thì ko có!!
xin cảm ơn a!!mong hồi âm
Bạn có file đó thì đưa lên đây rồi người ta sửa cho chứ chẳng lẽ làm từ A đến Z sao?
 
Upvote 0
Bạn có file đó thì đưa lên đây rồi người ta sửa cho chứ chẳng lẽ làm từ A đến Z sao?
E tham khảo đoạn code trên diễn đàn (e quên tên người viết rồi), e đã điều chỉnh cho bài e rồi!! vậy nhờ a xem lại rồi sửa giúp em!! e cảm ơn!!
View attachment 127121
đây là file e đã tạo, khi bấm vào new hay mở file khác thì
View attachment 127122
nó vẫn mặc định vẫn còn hiện thị menu đã tạo!!
vậy làm sao khi bấm vào new hay mở file khác thì ko còn menu file nữa????????
 
Upvote 0
vậy làm sao khi bấm vào new hay mở file khác thì ko còn menu file nữa????????

Trong module có code:
Mã:
[COLOR=#0000cd]Private [/COLOR]Sub CreatMenu()
  Dim MenuName As Object, iMenu As Integer
  iMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
  MenuBars(xlWorksheet).Menus.Add "About", iMenu
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="One", Before:=1, OnAction:="Menu1"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="True", Before:=2, OnAction:="Menu2"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="Three", Before:=3, OnAction:="Menu3"
End Sub
[COLOR=#0000cd]Private [/COLOR]Sub DeleteMenu()
  Dim MenuName As Object
  For Each MenuName In MenuBars(xlWorksheet).Menus
    If MenuName.Caption = "About" Then MenuName.Delete
  Next
End Sub
Bạn hãy sửa thành:

Mã:
Sub CreatMenu()
  Dim MenuName As Object, iMenu As Integer
  [COLOR=#ff0000]DeleteMenu[/COLOR]
  iMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
  MenuBars(xlWorksheet).Menus.Add "About", iMenu
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="One", Before:=1, OnAction:="Menu1"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="True", Before:=2, OnAction:="Menu2"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="Three", Before:=3, OnAction:="Menu3"
End Sub
Sub DeleteMenu()
  Dim MenuName As Object
  For Each MenuName In MenuBars(xlWorksheet).Menus
    If MenuName.Caption = "About" Then MenuName.Delete
  Next
End Sub
Tức xóa chỗ màu xanh và thêm vào chỗ màu đỏ
Tiếp theo, trong Thisworkbook, bạn thêm 2 đoạn này vào:
Mã:
Private Sub Workbook_Activate()
  CreatMenu
End Sub
Private Sub Workbook_Deactivate()
  DeleteMenu
End Sub
 

File đính kèm

Upvote 0
Trong module có code:
Mã:
[COLOR=#0000cd]Private [/COLOR]Sub CreatMenu()
  Dim MenuName As Object, iMenu As Integer
  iMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
  MenuBars(xlWorksheet).Menus.Add "About", iMenu
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="One", Before:=1, OnAction:="Menu1"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="True", Before:=2, OnAction:="Menu2"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="Three", Before:=3, OnAction:="Menu3"
End Sub
[COLOR=#0000cd]Private [/COLOR]Sub DeleteMenu()
  Dim MenuName As Object
  For Each MenuName In MenuBars(xlWorksheet).Menus
    If MenuName.Caption = "About" Then MenuName.Delete
  Next
End Sub
Bạn hãy sửa thành:

Mã:
Sub CreatMenu()
  Dim MenuName As Object, iMenu As Integer
  [COLOR=#ff0000]DeleteMenu[/COLOR]
  iMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
  MenuBars(xlWorksheet).Menus.Add "About", iMenu
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="One", Before:=1, OnAction:="Menu1"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="True", Before:=2, OnAction:="Menu2"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="Three", Before:=3, OnAction:="Menu3"
End Sub
Sub DeleteMenu()
  Dim MenuName As Object
  For Each MenuName In MenuBars(xlWorksheet).Menus
    If MenuName.Caption = "About" Then MenuName.Delete
  Next
End Sub
Tức xóa chỗ màu xanh và thêm vào chỗ màu đỏ
Tiếp theo, trong Thisworkbook, bạn thêm 2 đoạn này vào:
Mã:
Private Sub Workbook_Activate()
  CreatMenu
End Sub
Private Sub Workbook_Deactivate()
  DeleteMenu
End Sub
Em cảm ơn a
.
e hỏi thêm chút:
Đó là đối với file excell 2003, nhưng khi e dùng excell 2007, 2010 mở file đó thi ko có tác dụng?
Vậy có cách nào vẫn cách thức đó mà khi dùng excell 2007, 2010 vẫn được ko a?
Tóm lại là đối với file trên, code trên mà dùng excell 2007, 2010 để mở thì vẫn cho kết quả như trên!! hoặc cách nào khác để khi dùng excell 2003 trở lên đều thực hiện được bài trên!!
e chân thành cảm ơn!! mong, a hồi âm!!
 
Upvote 0
e hỏi thêm chút:
Đó là đối với file excell 2003, nhưng khi e dùng excell 2007, 2010 mở file đó thi ko có tác dụng?
Vậy có cách nào vẫn cách thức đó mà khi dùng excell 2007, 2010 vẫn được ko a?
Tóm lại là đối với file trên, code trên mà dùng excell 2007, 2010 để mở thì vẫn cho kết quả như trên!! hoặc cách nào khác để khi dùng excell 2003 trở lên đều thực hiện được bài trên!!
e chân thành cảm ơn!! mong, a hồi âm!!

Bây giờ thì chắc phải làm từ A đến Z rồi --=0
1> Code trong Module:
Mã:
Private Sub Auto_Open()
  BuildBar
End Sub
Private Sub Auto_Close()
  DelBar
End Sub
Sub BuildBar()
  Dim cBar As CommandBar
  Dim ctlPop As CommandBarPopup, ctlBtt As CommandBarButton
  DelBar
  Set cBar = Application.CommandBars.Add("nad582")
  With cBar
    .Position = msoBarTop
    .Visible = True
    Set ctlPop = .Controls.Add(msoControlPopup)
    With ctlPop
      .Caption = "About"
      With .Controls.Add(msoControlButton)
        .Caption = "One"
        .Style = msoButtonIconAndCaption
        .OnAction = "Menu1"
        .FaceId = 39
      End With
      With .Controls.Add(msoControlButton)
        .Caption = "Two"
        .Style = msoButtonIconAndCaption
        .OnAction = "Menu2"
        .FaceId = 40
      End With
      With .Controls.Add(msoControlButton)
        .Caption = "Three"
        .Style = msoButtonIconAndCaption
        .OnAction = "Menu3"
        .FaceId = 41
      End With
    End With
  End With
End Sub
Sub DelBar()
  On Error Resume Next
  Application.CommandBars("nad582").Delete
End Sub
Private Sub Menu1()
  MsgBox "Chon Menu 1"
End Sub
Private Sub Menu2()
  MsgBox "Chon Menu 2"
End Sub
Private Sub Menu3()
  MsgBox "Chon Menu 3"
End Sub
2> Code trong Thisworkbook:
Mã:
Private Sub Workbook_Activate()
  BuildBar
End Sub
Private Sub Workbook_Deactivate()
  DelBar
End Sub
Xong!
Lưu ý: Cái này là tạo CommandBar chứ không phải Menu, như thế mới hiển thị được trên Excel 2003 và 2007. Tuy nhiên ta sẽ cố làm CommandBar dạng Popup để cho hình dáng nó gần giống với menu
-----------------------
Giao diện khi mở trên Excel 2003:

Untitled_1.jpg




























Giao diện khi mở trên Excel 2010


Untitled_2.jpg
 

File đính kèm

Upvote 0
Bạn hãy sửa thành:
Mã:
Sub CreatMenu()
  Dim MenuName As Object, iMenu As Integer
  [COLOR=#ff0000]DeleteMenu[/COLOR]
  iMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
  MenuBars(xlWorksheet).Menus.Add "About", iMenu
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="One",Before:=1,OnAction:="Menu1"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="True", Before:=2, OnAction:="Menu2"
  MenuBars(xlWorksheet).Menus(iMenu).MenuItems.Add Caption:="Three", Before:=3, OnAction:="Menu3"
End Sub
Sub DeleteMenu()
  Dim MenuName As Object
  For Each MenuName In MenuBars(xlWorksheet).Menus
    If MenuName.Caption = "About" Then MenuName.Delete
  Next
End Sub
code trên nếu ta thêm cái icon vào (menu con "one", "true", "three") nữa thì code viết thế nào a?
cảm ơn a
 
Upvote 0
code trên nếu ta thêm cái icon vào (menu con "one", "true", "three") nữa thì code viết thế nào a?
cảm ơn a

Vậy thì bạn phải viết kiểu khác mới được:
Mã:
Sub CreatMenu()
  Dim mObj As CommandBarPopup
  DeleteMenu
  Set mObj = Application.CommandBars(1).Controls.Add(msoControlPopup, , , , True)
  mObj.Caption = "About"
  With mObj.Controls.Add(msoControlButton, , , , True)
    .Caption = "One"
    .OnAction = "Menu1"
    [COLOR=#ff0000].FaceId = 39[/COLOR]
  End With
  With mObj.Controls.Add(msoControlButton, , , , True)
    .Caption = "Two"
    .OnAction = "Menu2"
   [COLOR=#ff0000] .FaceId = 40[/COLOR]
  End With
  With mObj.Controls.Add(msoControlButton, , , , True)
    .Caption = "Three"
    .OnAction = "Menu3"
   [COLOR=#ff0000] .FaceId = 41[/COLOR]
  End With
End Sub
Sub DeleteMenu()
  On Error Resume Next
  Application.CommandBars(1).Controls("About").Delete
End Sub
Private Sub Menu1()
  MsgBox "Chon menu 1"
End Sub
Private Sub Menu2()
  MsgBox "Chon menu 2"
End Sub
Private Sub Menu3()
  MsgBox "Chon menu 3"
End Sub
Chỗ màu đỏ chính là chỗ thêm Icon
Lưu ý: Dạng này không xài được trên Excel 2007
 
Upvote 0

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

Back
Top Bottom