Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
Mọt Sách

[Help] Gọi lisp bằng VBA

Các bài được khuyến nghị

Em có code tạo menu bằng VBA như sau:

Sub TaoMenu()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
Dim newMenu As AcadPopupMenu
On Error Resume Next
Set newMenu = currMenuGroup.Menus.Add("My Program")
If Err <> 0 Then
   	Set newMenu = currMenuGroup.Menus("My Program")
   	Dim menuEnt As AcadPopupMenuItem
   	For Each menuEnt In newMenu
       	menuEnt.Delete
   	Next
End If
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
openMacro = "-vbarun SubMenu1 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 1", openMacro)
openMacro = "-vbarun SubMenu2 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 2", openMacro)
openMacro = "-vbarun SubMenu3 "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 3", openMacro)
currMenuGroup.Menus.InsertMenuInMenuBar "My Program", ""
End Sub
Sub SubMenu1()
MsgBox "Sub Menu 1"
End Sub
Sub SubMenu2()
MsgBox "Sub Menu 2"
End Sub

e90c9e48fdba761375a1756b225cb471_52642915.untitled.700x0.jpg

Và em có một lisp có lệnh bh tạo lại boundary cho hatch bị mất như sau :

;; free lisp from cadviet.com
;;; this lisp was downloaded from http://www.cadviet.com/forum/index.php?showtopic=51566
(defun c:bh( / sl n)
 (setq sl (acet-ss-to-list(ssget '((0 . "HATCH")))))
 (foreach n sl
(command "hatchedit" n "b" "p" "y" "")
)
 )

 

1.Bây giờ em muốn gán lệnh bh này vào menu Sub Menu 1 để mỗi lần kích vào nó sẽ tự động gọi lệnh bh lên thì làm như thế nào ạ?

2.Em muốn làm tiếng Việt cho menu trên thì làm như thế nào ạ?

 

Em nhờ các anh chị chỉ giúp ạ!

Em cảm ơn!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như bạn nhầm giữa gọi bằng VBA với gọi bằng MENU. Bạn thử search lại xem, chắc chắn sẽ có kết quả ^^

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Hình như bạn nhầm giữa gọi bằng VBA với gọi bằng MENU. Bạn thử search lại xem, chắc chắn sẽ có kết quả ^^

Em hiểu quy trình nôm na thế này:

+ Viết lisp gọi Menu VBA

+ Viết lisp gọi các Macro tương ứng với các Sub Menu

 

Nhưng ý em muốn hỏi là : Em chỉ viết menu bằng VBA thôi , còn mỗi lần em kích vào Sub Menu sẽ gọi lisp mà mình đã gán vào Sub Menu đó có được không ạ?

Kiểu như là : Bình VBA, rượu LISP

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Đơn giản thế này nhé. Load lisp này

;Goi lenh tao Menu khi khoi dong xong
(Defun C:Mnu()
(Command "Vbarun" "TaoMenu")
(princ))

Còn gọi Thủ tục trong Menu bằng lisp thì cũng tương tự thôi.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Còn gọi Thủ tục trong Menu bằng lisp thì cũng tương tự thôi.

Nếu viết VBA như thế này :

\\Dim openMacro As String

openMacro = "-vbarun SubMenu1 "

Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 1", openMacro)

\\

tức là gọi marco SubMenu1 và gán vào menu Sub Menu 1

 

Còn ý em là em muốn gán lisp bh vào Sub Menu 1 trong VBA (chứ không phải là viết lisp gọi VBA) . Khi kích vào Sub Menu 1 sẽ tự động gọi lisp bh đã được load từ trước.

 

Thanks ạ!

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Nếu viết VBA như thế này :

\\Dim openMacro As String

openMacro = "-vbarun SubMenu1 "

Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, "Sub Menu 1", openMacro)

\\

tức là gọi marco SubMenu1 và gán vào menu Sub Menu 1

 

Còn ý em là em muốn gán lisp bh vào Sub Menu 1 trong VBA (chứ không phải là viết lisp gọi VBA) . Khi kích vào Sub Menu 1 sẽ tự động gọi lisp bh đã được load từ trước.

 

Thanks ạ!

Bạn thử như sau xem

Sub Menu1()
ThisDrawing.SendCommand "bh "
End Sub

Thực thi dòng lệnh từ bàn phím. Sau đó bạn gọi như bình thường

Mình đã tạo Menu với VBA nhưng nhận thấy tạo Menu bằng CUI hay hơn nhiều mà mình gọi thủ tục thông qua "Lisp gọi VBA" còn nếu gọi Menu trong VBA bắt buộc các sub phải nằm cùng Module với Sub tạo menu đấy nhé !. Bạn check thử xem. Thân !

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Thực thi dòng lệnh từ bàn phím. Sau đó bạn gọi như bình thường

Mình đã tạo Menu với VBA nhưng nhận thấy tạo Menu bằng CUI hay hơn nhiều mà mình gọi thủ tục thông qua "Lisp gọi VBA" còn nếu gọi Menu trong VBA bắt buộc các sub phải nằm cùng Module với Sub tạo menu đấy nhé !. Bạn check thử xem. Thân !

Mục đích của em là đưa tiếng Việt vào Menu thôi. Em thấy viết bằng VBA thì dễ hơn là LISP . Bác cho em xin email để trao đổi 1 chút kinh nghiệm được không ạ?

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Mục đích của em là đưa tiếng Việt vào Menu thôi. Em thấy viết bằng VBA thì dễ hơn là LISP . Bác cho em xin email để trao đổi 1 chút kinh nghiệm được không ạ?

Đưa tiếng việt vào Menu bằng VBA thì phải dùng hàm API chuyển mã hơi dài dòng trong khi đó bằng CUI bạn tạo menu trực tiếp luôn nhé.

Email: nguyenngocson@live.com

  • Vote tăng 1

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

Đăng nhập để thực hiện theo  

×