Đến nội dung


Hình ảnh
- - - - -

[Help] Gọi lisp bằng VBA


  • Please log in to reply
10 replies to this topic

#1 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2013 - 08:40 AM

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
Hình đã gửi
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!
  • 0

#2 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 17 January 2013 - 03:39 PM

Mod nào biết giúp em với ạ!
  • 0

#3 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5685 Bài viết
Điểm đánh giá: 2606 (tuyệt vời)

Đã gửi 17 January 2013 - 11:42 PM

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ả ^^
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#4 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 18 January 2013 - 08:13 AM

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
  • 0

#5 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 18 January 2013 - 09:49 AM

Đơ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.
  • 0

#6 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 18 January 2013 - 10:09 AM

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 ạ!
  • 0

#7 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 18 January 2013 - 10:30 AM

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 !
  • 1

#8 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 18 January 2013 - 11:05 AM

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 ạ?
  • 1

#9 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 18 January 2013 - 11:27 AM

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
  • 1

#10 Mọt Sách

Mọt Sách

    biết zoom

  • Members
  • Pip
  • 16 Bài viết
Điểm đánh giá: 3 (bình thường)

Đã gửi 21 January 2013 - 10:24 AM

Bây giờ em muốn có Sub con của Sub Menu 1 thì thêm code như thế nào ạ?
  • 0

#11 NguyenNgocSon

NguyenNgocSon

    biết dimbaseline

  • Members
  • PipPipPipPipPip
  • 368 Bài viết
Điểm đánh giá: 39 (tàm tạm)

Đã gửi 21 January 2013 - 11:27 AM

Bạn tải cuốn Lập trình trong VBA của bộ mộn Tự động hóa trường - ĐHGTVT có cái bạn cần nhé. Trong thư viện của CV có rồi nhé !
Thân.
  • 0