Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
tqt37c2

Tham số cho VBA macro khi chạy từ Command Line?

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

Chào các bác,

Tui có chuyện thế này, giả sử tui có modul 123, trong đó có 1 Sub là ABC với 3 tham số X1, X2, X3:

Sub ABC(X1#, X2#, X3#)

....

End Sub

 

Giừ tui muốn gọi sub ABC từ Command Line hay từ Lisp thì cú pháp câu lệnh như thế nào?

#: Tui đã dùng ("command "_-vbarun" "123.ABC X1, X2, X3")

hay

("command "_-vbarun" "123.ABC X1 X2 X3")

đều không được.

Các bác có cao kiến gì không?

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
Tui đã dùng ("command "_-vbarun" "123.ABC X1, X2, X3")

hay

("command "_-vbarun" "123.ABC X1 X2 X3")

đều không được.

 

 

Việc load lệnh vba không cần biết đến bên trong là cái gì vẫn chạy bình thường.. Nó cũng giống như file vlx đâu cần biết tác giả viết cái gì trong đâu chỉ cần biết tên lệnh là gì thôi..

 

VD: Trước hết load 1 file *.dvb lên

dvb.jpg

Sau đó nhấn alt+F8 và chọn file & đuờng dẫn mới dc load lên và nhấn Run

Run.jpg

 

Còn nếu muốn đặt lệnh tắt để chạy như 1 lệnh bất kỳ thì lấy tên file + tên module ở đây là bcounter.dvb!Module1.BlockCounter

Vd : để đặt lệnh bc là lệnh đếm số block trong bv bằng vba thì ns:

;;;;;;;;;;;;;;;;;;;;;;

 

(defun C:BC ()

("command "_-vbarun" "bcounter.dvb!Module1.BlockCounter" )

)

 

;;;;;;;;;;;;;;;;;;;;;;;;;

Fần module tự xuất hiện khi load Module1.BlockCounter

  • 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

to tqt37c2: tôi nghĩ bạn có thể dùng 1 cách đơn giản để gọi modul đó thông qua 1 modul khác không có tham số:

Sub GoiABC()

ABC X1,X2,X3

End sub

các tham số Xi có thể khai báo là biễn toàn cục (public) và định giá trị (không khó)

 

to tranchan: ông này chưa đọc dõ câu hỏi đừng vội chê người khác, 1 hàm hay chương trình (modul) có tham số mà Run được kiểu của ông thì :cheers:

 

nếu ai có cách nào khác xin chia sẻ mọi người cùng học tập

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
....to tranchan: ông này chưa đọc dõ câu hỏi đừng vội chê người khác, 1 hàm hay chương trình (modul) có tham số mà Run được kiểu của ông thì :cheers: ...

 

Haha... chắc bạn là một caothủ VBA.. nhưng tôi nghĩ là bạn chưa đọc kỹ câu hỏi mơi đúng...

 

....

Giừ tui muốn gọi sub ABC từ Command Line hay từ Lisp thì cú pháp câu lệnh như thế nào?

......

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
Chào các bác,

Tui có chuyện thế này, giả sử tui có modul 123, trong đó có 1 Sub là ABC với 3 tham số X1, X2, X3:

Sub ABC(X1#, X2#, X3#)

....

End Sub

 

Giừ tui muốn gọi sub ABC từ Command Line hay từ Lisp thì cú pháp câu lệnh như thế nào?

#: Tui đã dùng ("command "_-vbarun" "123.ABC X1, X2, X3")

hay

("command "_-vbarun" "123.ABC X1 X2 X3")

đều không được.

Các bác có cao kiến gì không?

 

Chắc bác là 1 cao thủ về Command Dos, đây cũng là 1 kiểu truyền tham số cho hàm tôi thử rồi không được đâu, bác chịu khó làm như bác bubuacute.

Bác tranchan chưa hiểu ý câu hỏi này rồ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

Thế này vậy, bạn thử down myutils.dvd là vba cho CAD theo

http://www.cadviet.com/forum/index.php?showtopic=4414

và làm như tôi nói xem có được ko, chứ ko bàn đến chuyện đúng sai, chuyện cú pháp lập trình có Function hay Sub mặc kệ.. chỉ biết nếu là vba for CAD thì cuối cùng có chạy dc trên CAD hay ko vậy thôi..!?

 

Có lẽ theo ý bạn là Run trong môi trường lập trình thì chọn Run macro(F5) chứ gì? Thì nếu vậy vẫn chạy đuợc thôi, nhưng chả lẽ mỗi lần vẽ CAD fải vào môi trường VBA rồi gọi lệnh bằng nhấn F5 à? Cũng đc, nhưng thao tác lâu hơn thôi. Nhu trên đã ví dụ thì chỉ gõ lệnh "BC" thì thủ tục hàm trong vba cũng thực hiệ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

Theo tôi ban nên dùng lệnh của alisp để gọi ham này thep cách sau :

- trước tiên bạn định nghĩa 1 hàm ABC trong Alisp

- trong VBA bạn vào AcadDocument_BeginCommand

- Kiểm tra "CommandName=abc" thì thực hiện hàm ABC(X1,X2,...)

chú ý định nghĩa hàm trong lisp không dùng defun c:ABC mà dùng "(vlax-add-cmd "ABC" 'ABC)"

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ế này vậy, bạn thử down myutils.dvd là vba cho CAD theo

http://www.cadviet.com/forum/index.php?showtopic=4414

và làm như tôi nói xem có được ko, chứ ko bàn đến chuyện đúng sai, chuyện cú pháp lập trình có Function hay Sub mặc kệ.. chỉ biết nếu là vba for CAD thì cuối cùng có chạy dc trên CAD hay ko vậy thôi..!?

 

Có lẽ theo ý bạn là Run trong môi trường lập trình thì chọn Run macro(F5) chứ gì? Thì nếu vậy vẫn chạy đuợc thôi, nhưng chả lẽ mỗi lần vẽ CAD fải vào môi trường VBA rồi gọi lệnh bằng nhấn F5 à? Cũng đc, nhưng thao tác lâu hơn thôi. Nhu trên đã ví dụ thì chỉ gõ lệnh "BC" thì thủ tục hàm trong vba cũng thực hiện.

 

tôi kô hiểu bạn đưa ra ví dụ này để làm j vì thực chất các Sub (AutoPlot, ChangeCase, ...) trong các module (AutoPlot, QuantityUtils, TextUtils) mà project myutils.dvd này đều là các Sub() - Không hề có tham số, thế nên bạn có thể gọi dẽ dàng bằng câu lệnh (command "-vbarun" "macro name") ("BC" hay "BB" j đó chỉ là cách tạo lệnh tắt bằng AutoLisp mà thôi).

Bây giờ tôi sửa cái macro của bạn thành

 

Sub Count(lock as byte)

'chon cac doi tuong

.....

End sub

 

bạn thử nhấn F5 xem có chạy nổi không? :cheers:

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
Chào các bác,

Tui có chuyện thế này, giả sử tui có modul 123, trong đó có 1 Sub là ABC với 3 tham số X1, X2, X3:

Sub ABC(X1#, X2#, X3#)

....

End Sub

 

Giừ tui muốn gọi sub ABC từ Command Line hay từ Lisp thì cú pháp câu lệnh như thế nào?

#: Tui đã dùng ("command "_-vbarun" "123.ABC X1, X2, X3")

hay

("command "_-vbarun" "123.ABC X1 X2 X3")

đều không được.

Các bác có cao kiến gì không?

Bạn muốn truyền tham số từ dòng lệnh như cách trên thì trong thủ tục của bạn phải có bước hỏi về tham số ví dụ:

Sub ABC()

Dim A$, B%, C%

A = ThisDrawing.Utility.GetString(True, "Nhập giá trị A: ")

B = ThisDrawing.Utility.GetInteger("Nhập giá trị B: ")

C = ThisDrawing.Utility.GetInteger("Nhập giá trị C: ")

MsgBox A & ":" & B + C

End Sub

Sau khi đăng ký tên lệnh với Cad bạn có thể truyền tham số ngay khi gọi lệnh.

(command "-vbarun" "ABC" "Tổng giá trị của A và B là" "356" "567")

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
Theo tôi ban nên dùng lệnh của alisp để gọi ham này thep cách sau :

- trước tiên bạn định nghĩa 1 hàm ABC trong Alisp

- trong VBA bạn vào AcadDocument_BeginCommand

- Kiểm tra "CommandName=abc" thì thực hiện hàm ABC(X1,X2,...)

chú ý định nghĩa hàm trong lisp không dùng defun c:ABC mà dùng "(vlax-add-cmd "ABC" 'ABC)"

Chào bác.Bác có thể lấy 1 ví dụ cụ thể được không.Tui thì chỉ biết VBA thôi chứ LISp thì chưa đả động tới.Mong bác nhiệt tình giúp đỡ.Tui đang mò mãi mà khôg ra!

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  

×