Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 tqt37c2

tqt37c2

    Chưa sử dụng CAD

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

Đã gửi 03 June 2008 - 03:26 PM

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

#2 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 05 June 2008 - 01:22 PM

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
Hình đã gửi
Sau đó nhấn alt+F8 và chọn file & đuờng dẫn mới dc load lên và nhấn Run
Hình đã gửi

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

#3 bubuacute

bubuacute

    biết pan

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

Đã gửi 29 December 2008 - 04:59 PM

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

#4 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 02 January 2009 - 09:56 AM

....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?
......


  • 0

#5 sson

sson

    biết zoom

  • Members
  • Pip
  • 18 Bài viết
Điểm đánh giá: 11 (tàm tạm)

Đã gửi 14 January 2009 - 08:04 AM

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

#6 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 14 January 2009 - 11:39 AM

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

#7 ntluyen

ntluyen

    biết vẽ ellipse

  • Members
  • PipPip
  • 54 Bài viết
Điểm đánh giá: 19 (tàm tạm)

Đã gửi 09 February 2009 - 04:09 PM

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

#8 bubuacute

bubuacute

    biết pan

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

Đã gửi 23 February 2009 - 09:50 AM

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

#9 hoa35ktxd

hoa35ktxd

    biết lệnh move

  • Members
  • PipPipPip
  • 125 Bài viết
Điểm đánh giá: 38 (tàm tạm)

Đã gửi 27 February 2009 - 11:08 AM

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

#10 xuanthu189

xuanthu189

    biết zoom

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

Đã gửi 04 March 2009 - 10:55 AM

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