hỏi cách chèn lệnh mở file *.exe và file excel từ VBA ??

Liên hệ QC

cloudtifa

Thành viên mới
Tham gia
27/2/09
Bài viết
18
Được thích
2
e viết code trong VBA là :
Mã:
Sub AddMenu()MyMenu = Application.MenuBars(xlWorksheet).Menus.Count + 1
MenuBars(xlWorksheet).Menus.Add "Ten Ich Cong Viec", MyMenu
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:="Ma Vach", before:=1, OnAction:=fileopen = Shell("D:\3 code\barcode.exe", vbNormalFocus)
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:="nhap du lieu goc", before:=2, OnAction:=fileopen = Shell("D:\dulieu\du lieu goc.xls", vbNormalFocus)
MenuBars(xlWorksheet).Menus(MyMenu).MenuItems.Add Caption:="lam nhan dan' hop", before:=2, OnAction:=fileopen = Shell("D:\dulieu\nhan.xls", vbNormalFocus)
End Sub
untitled-7.jpg

Mục đích của em là muốn khi mình click vào "Ma Vach" thì nó sẽ mở file barcode.exe, "lam nhan dan' hop" và "nhap du lieu goc" là mở file *.xls . Em dùng code fileopen nhưng khi click vào thì nó không hiện lên như ý muốn. không biết code trên có đúng ko ạ . cho em hỏi thêm nữa là, em đã save file này ra thành *xla và vào Tool --> Add-ins, nhưng nó chỉ hiện ở mỗi file mình save thôi, em muốn là lúc mình add vào rồi thì khi mình mở Excel lên là nó sẽ tự có, như các Add-ins mà em được mọi người chia sẽ trên 4rum mình ạ... Mong nọi người giúp em với, Em cám ơn !
 
Khai báo Object đương nhiên là được rồi, có điều bạn sẽ không tận dụng được thằng AutoList xổ xuống sau dấu chấm (sẽ không biết được thuộc tính và các phương thức của Object là cái gì)
-----------
Để biết thằng "ông nội" MyMenu là thuộc dạng gì, ta có thể dùng TypeName để kiểm tra
Ví dụ:
Khi nhận được MsgBox, ta biết ngay phải khai báo MyMenu As.. cái giống gì liền
Ẹc... Ẹc...
Dạ! nó là menu! "thầy" đúng là "thầy", "cạnh" đúng là "cạnh"! Vậy theo thầy nó đúng nhất ở điểm gì ạh? Em cũng lờ mờ lắm!

To bác Learning_Excel: Active hay Deactive em không bàn tới, Vấn đề bàn tới là khi reset thì những cái menu tự tạo khác nó cũng bị clear trong code của thầy NDU mà!

Em cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
To bác Learning_Excel: Active hay Deactive em không bàn tới, Vấn đề bàn tới là khi reset thì những cái menu tự tạo khác nó cũng bị clear trong code của thầy NDU mà!
Em cảm ơn!

Thay vì Reset, thì chọn Delete cái Menu nào đó muốn Delete, ta chỉ khéo sử dụng thôi.
 
Upvote 0
Thay vì Reset, thì chọn Delete cái Menu nào đó muốn Delete, ta chỉ khéo sử dụng thôi.

Vâng! Thì em đã nhắc tới ở bài #7 mà! Có gì khác đâu ah!

attachment.php



Dạ vâng! Nhưng cho em hỏi khai báo là Menu để nó thả xuống AutoList làm gì ạh? Thầy test giùm em (run vài lần):
PHP:
Sub CreateMyMenu()
  Dim MyMenu As Menu
  Dim T As String
  On Error Resume Next
  MyMenu.Caption = "Aha"
  Set MyMenu = MenuBars(xlWorksheet).Menus("My Menu")
  MyMenu.Caption = "Aha1"
  If MyMenu Is Nothing Then
    With MenuBars(xlWorksheet).Menus.Add("My Menu")
      .MenuItems.Add "Menu Item 1", "Macro1"
      .MenuItems.Add "Menu Item 2", "Macro2"
      .MenuItems.Add "Menu Item 3", "Macro3"
    End With
  Else
    T = TypeName(MyMenu) '"'" & MyMenu.Caption & "' da ton tai"
  End If
  MyMenu.Caption = "Aha2"
  MyMenu.Delete
  End Sub

Vấn đề ở đây là khi tạo xong thì nó mới hiểu là Menu, Nếu debug thì thầy thấy là: khi chưa hoàn thành Sub: MyMenu là nothing, sau khi hoàn thành nó mới hiểu MyMenu là menu. Vậy trong code tạo menu khai báo đúng nhất phải là menu để là gì ạh? khi mà sử dụng thuộc tính nó vô tác dụng?

Trong khi đó, khi nó chưa được tạo ra thì phải hiểu nó là object mới đúng bản chất vấn đề. Vì nó chưa được sinh ra thì ta phải cho nó là một đối tượng (object) nào đó chưa cụ thể, khi sinh ra rồi object(đối tượng) đó mới hiểu là gì (ở đây là menu).

Giống như quả trứng nở ra gà. Ta biết nó là gà, nhưng nở ra rồi mới biết gà trống hay gà mái. vậy ta có cần quân tâm tới lúc nó đang là quả trứng thì sẽ nở ra gà mái không? Vậy phải định nghĩa (khai báo) là "trứng nở ra gà mái" hay "trứng nở ra gà"? Đương nhiên khai báo "Trứng nở ra gà" mới là dúng nhất! Vì "Trứng nở ra gà" nó có "nội hàm" lớn hơn!! --=0

Em cảm ơn!
 
Lần chỉnh sửa cuối:
Upvote 0
]Vấn đề ở đây là khi tạo xong thì nó mới hiểu là Menu, Nếu debug thì thầy thấy là: khi chưa hoàn thành Sub: MyMenu là nothing, sau khi hoàn thành nó mới hiểu MyMenu là menu. Vậy trong code tạo menu khai báo đúng nhất phải là menu để là gì ạh? khi mà sử dụng thuộc tính nó vô tác dụng?
Đâu có vấn đề gì chứ
Bạn khai báo rõ ràng sẽ tiết kiệm cho bộ nhớ máy tính
Cũng giống như Dim Sh as Worksheet ---> Lúc đầu Sh chưa là cái gì cả nhưng ta vẫn khai báo nó là Worksheet đấy thôi
"Nó" là Nothing hay là gì không quan trọng ---> Ta phải có động tác Set... thì nó mới được gán ---> Vấn đề ở đây là khai báo đúng thì máy tính đở mất công tính toán xem "nó" thật sự là biến nhớ nào ---> Đây cũng là thuật toán tăng tốc đấy!
 
Upvote 0
Thật ra nếu không khai báo, thì biến mặc định là Variant, tôi ví dụ, nếu như Variant là 1 cái tủ có nhiều ngăn, mỗi ngăn chứa một kiểu biến (long, double, string, menu, control v.v...). Nếu khai biến rõ ràng, thì xem như chúng ta có ngay cái key để mở hộc tủ, còn không thì cầm một đống chìa khóa để mở, thử xem chìa nào mới đúng cái hộc tủ đó. Và như vậy, thời gian sẽ mất đi nhiều hơn. Với máy tính thì dung lượng khi dùng Variant sẽ chiếm nhiều bộ nhớ hơn.
 
Upvote 0
Dạ! em cảm ơn!

Đúng là học cái kiểu quay tới cùng, thắc mắc tới cùng vui thật! May mà các thầy, các bác không giận mà vẫn nhiệt tình chỉ bảo!
Nếu nói ngay từ đầu: TypeName, Tăng tốc độ, giảm bộ nhớ thì còn gì hứng thú nữa! hiii

Cho em hỏi (thành nết rồi ạh!) Object chiếm hết bao nhiêu và Menu hết bao nhiêu bộ nhớ thế ạh?
 
Upvote 0
chào cả nhà. Em là thành viên mơi nên chưa biết cách post bai mới thế nào mà em đọc trên diễn đàn không hiểu. Em có một bài tập thế này các bác giúp em với View attachment DE_23.XLS
 
Upvote 0
Dạ! em cảm ơn!


Cho em hỏi (thành nết rồi ạh!) Object chiếm hết bao nhiêu và Menu hết bao nhiêu bộ nhớ thế ạh?

Trong Help (VBA) có cái này:
Object Data Type
Object variables are stored as 32-bit (4-byte) addresses that refer to objects. Using the Set statement, a variable declared as an Object can have any object reference assigned to it.

Long Data Type
Long (long integer) variables are stored as signed 32-bit (4-byte) numbers ranging in value from -2,147,483,648 to 2,147,483,647. The type-declaration character for Long is the ampersand (&).

Bạn cứ gõ xxx Data Type, với xxx là tên của biến trong Help thì sẽ thấy rõ dung lượng của từng biến.
 
Upvote 0
Upvote 0
Cho em hỏi (thành nết rồi ạh!) Object chiếm hết bao nhiêu và Menu hết bao nhiêu bộ nhớ thế ạh?
Thật ra tôi cũng không dám chắc khai báo As Menu so với As Object thì sẽ tiết kiệm được bao nhiêu. Tuy nhiên có thể suy luận logic cũng thấy được vấn đề:
- Object là nói chung của mọi biến đối tượng
- Worksheet, Workbook, CommandBar, Menu... vân vân đều là 1 phần nhỏ của Object
Vậy đương nhiên cái phần nhỏ ấy phải chiếm ít bộ nhớ hơn phần lớn chứ! Đúng không nào?
 
Upvote 0
Web KT

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

Back
Top Bottom