Hỏi về đối tượng menu của Excel trong VB6 (1 người xem)

Liên hệ QC

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

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,201
Được thích
24,662
Trong VBA, đối tượng menu nói chung được khai báo như sau:
Dim MenuTKe As CommandBarControl
Tuy nhiên trong VB6, khi khai báo thì tôi không thể tìm được đối tượng này (Excel.Application).

Bác nào biết xin chỉ giúp, cám ơn!
 
Gửi anh Hướng

Em chưa hiểu ý của bác lắm, bác định tham chiếu tới đối tượng menu của Excel trong VB hay là gọi đối tượng menu được tạo bởi VB
Do máy em chưa cài VB nên chỉ có thể đóng góp cho bác một vài ý kiến như sau:

- Nếu bác đã viết Code chương trình trên VB rồi thì tốt nhất là xây dựng Menu và các Module chương trình trên VB, còn các số liệu và đối tượng trên Excel bác dùng kĩ thuật Automation (Dim obEx As Excel.Application ... ) để tham chiếu đến hoặc dùng ConectionString coi số liệu trong Excel là một Database
- Nếu bác định truyền số liệu nhập từ VB sang Excel để nhờ các hàm của Excel xứ lý thì sẽ rất chậm và khó kiểm soát được chương trình

----------------------------------------------------------------------
P.s: Dạo này bác bỏ "món" VBA rồi à, bác đã về HN chưa, nhóc con có khỏe không, nhìn ảnh em thấy nhóc đẹp trai ra phết, tuy nhiên trông không giống bố :-= :-= :-=. Em đang ở CP
 
Lần chỉnh sửa cuối:
Cám ơn em, anh đã làm như kiểu em rồi nhưng tìm mãi không thấy (kể cả đã khai báo thư viện Excel trong VB6). Thông thường các đối tượng khác thì lại tìm thấy dễ dàng.
-----------

Cu nhóc vừa bị ốm, mới 1 tháng đã phải tiêm vì dịch ho, viêm phế quản. Tội nghiệp, 2 chị em cùng ốm. Hình trên avatar là con cún 1.5 tuổi
 
Lần chỉnh sửa cuối:
PhanTuHuong đã viết:
Trong VBA, đối tượng menu nói chung được khai báo như sau:
Tuy nhiên trong VB6, khi khai báo thì tôi không thể tìm được đối tượng này (Excel.Application).
Bác nào biết xin chỉ giúp, cám ơn!
Tôi thường tạo menu trên thanh menu của Excel bằng cách viết đơn giản. Ví dụ tạo menu Tieng Viet, click vào có 2 menu con là Sap xep tieng VietChuyen ma thì cú pháp như sau:

Sub tạo menu Tieng Viet
Sub AddMenu()
MyMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
MenuBars(xlWorksheet).Menus.Add "Tieng Viet", MyMenu
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:="Sap xep Tieng Viet", before:=1, OnAction:="SubSapXep"
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:="Chuyen ma", before:=2, OnAction:="SubChuyenMa"
End Sub
Tùy số lượng menu con viết thêm dòng
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:=" " before:= , OnAction:=" "

Add Caption:= tên của menu con
before:= vị trí của menu con trong danh sách, bắt đầu từ 1
OnAction:= tên Sub sẽ thực hiện khi click vào menu con
Nếu muốn tạo phím tắt cho menu, bạn gõ "&" trước từ cần làm phím tắt. Ví dụ "&Sap xep Tieng Viet" thì menu sẽ là Sap xep Tieng Viet với phím tắt là S

Sub xóa menu Tieng Viet
Private Sub DeleteMenus()
For Each MenuName In MenuBars(xlWorksheet).Menus
If MenuName.Caption = "Tieng Viet" Then MenuName.Delete
Next
End Sub
 
Cám ơn bác Long, đành phải sử dụng kiểu cổ điển vậy.
 
Trong VBE, anh phải vào menu Tools->Reference và chọn tới file MSO.DLL , file này nằm đường dẫn C:\Program Files\Common Files\Office...
 
Bé nhà anh Hướng xinh quá nhỉ, chúc mừng anh nhé.
Đơn giản nhất là excel cho ghi thành một file toolbar.
khi nào cần thì load file này vào

Save more than one toolbar configuration

  1. Make any changes you want to the built-in menu and toolbars, create any custom toolbars you want to save, and then display the toolbars the way you want them to appear. How?
    1. On the Tools menu, click Customize.
    2. Click the Toolbars tab.
    3. Click New.
    4. In the Toolbar name box, type the name you want, and then click OK.
    5. Click the Commands tab.
    6. Do one of the following: Add a button to the toolbar
      1. Click a category in the Categories box.
      2. Drag the command you want from the Commands box to the displayed toolbar.
      Add a built-in menu to the toolbar
      1. In the Categories box, click Built-in Menus.
      2. Drag the menu you want from the Commands box to the displayed toolbar.
    7. When you have added all the buttons and menus you want, click Close.
  2. Quit Excel.
  3. Locate the file Excel.xlb.
  4. Rename the file, retaining the .xlb extension. To use a saved configuration, click Open on the File menu and open the renamed file. When you next quit the program, Excel creates a new Excel.xlb toolbar settings file.
Chúc bác như ý.
 
Theo phương pháp của Tuân là OK! :-=
Có phải cậu dùng phương pháp "dò" để tìm hiểu nguồn gốc các đối tượng không?

Gửi Long: Em đọc kỹ nội dung 1 chút, mục tiêu là tự động tạo menu trong Excel từ VB6 chứ không phải tạo thủ công trong Excel.

Các bác cho hỏi thêm là thế nào thực hiện thủ tục từ file *.exe đó cho các menu tạo từ VB6.0 mà không thực hiện từ VBA (tránh trường hợp cảnh báo và quét macro).
 
PhanTuHuong đã viết:
Các bác cho hỏi thêm là thế nào thực hiện thủ tục từ file *.exe đó cho các menu tạo từ VB6.0 mà không thực hiện từ VBA (tránh trường hợp cảnh báo và quét macro).

Có hai cách:

1) Tạo file.xla có các thủ tục để chạy từ menu
Ví dụ
Sub ThongBao()
Dim objMsg As Object
Set objMsg = CreateObject("FileVB_DLL.Class")
objMsg.ThongBao()
Set objMsg = Nothing​
End Sub

2) Dùng kỹ thuật Class, Wrap đối tượng (không cần tạo gì trong EXCEL)
Kỹ thuật này em đã viết vài bài gửi trên GPE này rồi, anh chịu khó đọc lại nhé!
 
Có thể viết được menu con và cháu...trong Excel bằng VBA không các bác? Giống như các menu trong Excel hoặc Word? Nếu được thì các đoạn mã VBA như thế nào? Cám ơn!
 
Có thể viết được menu con và cháu...trong Excel bằng VBA không các bác? Giống như các menu trong Excel hoặc Word? Nếu được thì các đoạn mã VBA như thế nào? Cám ơn!

Trong VBA có nhiều cách tạo menu lắm bạn vào thư viện hình như cũng có, không thì gõ tìm kiếm.
 
Tạo hệ thống thanh trình đơn (menu) trong Excel

Các bước tạo hệ thống Menu như sau:
1. Phác thảo trình đơn cần tạo và chức năng tương ứng
2. Viết mã lệnh cho từng MenuItem. Mỗi đoạn mã lệnh này được chứa trong trình con dạng Sub.
3. Tham chiếu đến MenuBar nơi cần tạo trình đơn tùy biến.
4. Tạo Menu và MenuItem
5. Gán các lệnh đã tạo ở bước 2 cho từng MenuItem
Tham chiếu đến MenuBar :
Dim mnuBar As ComandBar
Set mnuBar=Application.Commands("Worksheet Menu Bar")
Để tạo Menu và MenuItem sử dụng phương thức Add có tong tập đối tượng Controls.
Ví dụ sau tạo hệ thống Menu :
1. Cấu trúc của Menu như sau :
*Ví dụ Menu
**Tinh tong
**Tinh tich
**Menu cap 2
***Lua chon 1
***Lua chon 2
(theo dạng sơ đồ cây)
2. Viết mã lệnh cho từng MenuItem :
Code:
HTML:
' Ma lenh cho MenuItem: Tinh tong
Sub Macro1()
  MsgBox "Ban da chon MenuItem: Tinh tong"
  End Sub
' Ma lenh cho MenuItem: Tinh tich
Sub Macro2()
  MsgBox "Ban da chon MenuItem: Tinh tich"
  End Sub
' Ma lenh cho MenuItem: Lua chon 1
Sub Macro3()
  MsgBox "Ban da chon MenuItem: Lua chon 1"
  End Sub
' Ma lenh cho MenuItem: Lua chon 2
Sub Macro4()
  MsgBox "Ban da chon MenuItem: Lua chon 2"
  End Sub
3. Tạo hệ thống Menu và gán mã lệnh cho từng MenuItem
Sub TaoMenu()
Dim cb As CommandBar
Dim cpop As CommandBarPopup
Dim cpop2 As CommandBarPopup
Dim cbtn As CommandBarButton
'Lay tham chieu den thanh trinh don
Set cb = Application.CommandBars("Worksheet Menu Bar")
'Tao Menu: "Vi du Menu" (CommandBarPopup)
Set cpop = cb.Controls.Add(msoControlPopup, , , , True)
cpop.Caption = "&Vi du Menu"
'Tao Menu: "Tinh tong" (CommandBarButton)
'Them MenuItem vao Menu1:"Menu Vi du"
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
'Gan thuoc tinh cho MenuItem
cbtn.Caption = "Tinh tong" 'Gan tieu de
cbtn.OnAction = "Macro1" 'Gan ma lenh
'Tao Menu: "Tinh tich" (CommandBarButton)
'Them MenuItem vao Menu1:"Menu Vi du"
Set cbtn = cpop.Controls.Add(msoControlButton, , , , True)
'Gan thuoc tinh cho MenuItem
cbtn.Caption = "Tinh tich" 'Gan tieu de
cbtn.OnAction = "Macro2" 'Gan ma lenh
'Tao "Menu cap 2" (CommandBarPopup)
'Day la MenuItem bat dau mot nhom trinh don khac
Set cpop2 = cpop.Controls.Add(msoControlPopup, , , , True)
cpop2.Caption = "Menu cap 2"
'Them SeparatorBar vao phia truoc Menu nay
cpop2.BeginGroup = True
'Tao MenuItem: "Lua chon 1" (CommandBarButton)
Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &1"
cbtn.OnAction = "Macro3"
'Tao MenuItem: "Lua chon 2" (CommandBarButton)
Set cbtn = cpop2.Controls.Add(msoControlButton, , , , True)
cbtn.Caption = "Lua chon &2"
cbtn.OnAction = "Macro4"
End Sub
4.Xóa trình đơn tùy biến:
Sub XoaMenu()
Dim cb As CommandBar
Dim cbp As CommandBarPopup
'Lay tham chieu den thanh trinh don
Set cb = Application.CommandBars("Worksheet Menu Bar")
On Error Resume Next
'Tham chieu den thanh trinh don "Vi du Menu"
Set cbp = cb.Controls("Vi du Menu")
If Not IsNull(cbp) Then
cbp.Delete
End If
End Sub
Chúc mọi người thành công!!!
Thân!!!
 
Lần chỉnh sửa cuối:
Cám ơn bạn NguyenNgocSon có bài viết dễ hiểu và ứng dụng tốt! Chúc bạn một năm mới An khang, thịnh vượng, thành công.
 
Gán menu vào luôn trong excells 2007 khi khoi dong

Các bước tạo hệ thống Menu như sau:
1. Phác thảo trình đơn cần tạo và chức năng tương ứng
2. Viết mã lệnh cho từng MenuItem. Mỗi đoạn mã lệnh này được chứa trong trình con dạng Sub.
3. Tham chiếu đến MenuBar nơi cần tạo trình đơn tùy biến.
4. Tạo Menu và MenuItem
5. Gán các lệnh đã tạo ở bước 2 cho từng MenuItem
Tham chiếu đến MenuBar :
Dim mnuBar As ComandBar
Set mnuBar=Application.Commands("Worksheet Menu Bar")
Để tạo Menu và MenuItem sử dụng phương thức Add có tong tập đối tượng Controls.
Ví dụ sau tạo hệ thống Menu :
1. Cấu trúc của Menu như sau :
*Ví dụ Menu
**Tinh tong
**Tinh tich
**Menu cap 2
***Lua chon 1
***Lua chon 2
(theo dạng sơ đồ cây)
2. Viết mã lệnh cho từng MenuItem :
Code:
HTML:
' Ma lenh cho MenuItem: Tinh tong
Sub Macro1()
  MsgBox "Ban da chon MenuItem: Tinh tong"
  End Sub
' Ma lenh cho MenuItem: Tinh tich
Sub Macro2()
  MsgBox "Ban da chon MenuItem: Tinh tich"
  End Sub
' Ma lenh cho MenuItem: Lua chon 1
Sub Macro3()
  MsgBox "Ban da chon MenuItem: Lua chon 1"
  End Sub
' Ma lenh cho MenuItem: Lua chon 2
Sub Macro4()
  MsgBox "Ban da chon MenuItem: Lua chon 2"
  End Sub
3. Tạo hệ thống Menu và gán mã lệnh cho từng MenuItem

4.Xóa trình đơn tùy biến:

Chúc mọi người thành công!!!
Thân!!!
Bạn ơi vậy làm thế nào để gán trực tiếp lên menu luôn không phải cứ mỗi lần mở lại phải chạy macro lại!
cam on nhiều!
 
Ban them doan ma sau se tu dong tao menu khi mo excel
sub auto_open()
Taomenu
end sub
 
Web KT

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

Back
Top Bottom