Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
ketxu

Cách đặt đối số hàm/sub theo list ??

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

ketxu    2.653

Em chưa động đến cách đặt đối số của hàm mà số lượng đối số thay đổi, nay nhờ các bác giúp 1 ví dụ khai báo cụ thể.

Ví dụ e muốn tạo 1 sub chèn 1 block vào list các tọa độ điểm, kiểu như

Sub IS ([listpoint],Block)

.....

P/S 2 : Srr vì chưa diễn đạt đúng ý.điều em không muốn làm là gom list trước khi chạy sub.Tức là thay vì khởi tạo 1 list các point trước khi gọi hàm, rồi khai báo list đó để dùng vòng lặp xử lý, mà em muốn khai báo kiểu như

Sub IS (x1,y1,z1,x2,y2,z2...,Block)

vẫn hàm đấy

E khai báo IS (x1,y1,z1,block) thì nó chèn vào điểm 1

E khai báo IS (x1,y1,z1,x2,y2,z2,block) thì nó chèn vào 2 điểm 1,2

Tức số lượng đối số thay đổi, mà VBA nó cứ tự gom 3 đối số liền nhau thành 1 nhóm, cái cuối cùng là Block ^^

Nếu không được e xin quay về phương án tạo list trước, không tự làm khó mình nữa ^^

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
Thaistreetz    515

nói cho dễ hiểu hơn nữa đuợc không hả ketxu? mình đọc 1 hồi mấy lần thì luận nó ra như thế này:

(defun IS (listpoint blockname)

(foreach L listpoint

(command "insert" "blockname" L ....)))

nhưng mình không chắc đã đúng ý bạn vì làm như trên thì với bạn là chuyện nhỏ.

Edit: ah, minh nhầm, bạn post bài ở box VBA, cứ tưởng box autolisp :rolleyes:

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
ketxu    2.653

Em srr vì chưa diễn đạt hết ý, đã edit thêm ở PS2 ^^ Tức là e muốn tìm hiểu cách khai báo mà số đối số thay đổi, chứ không phải số lượng point trong list thay đổi ^^

  • 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
anhcos    177

VB không hỗ trợ hàm có số lượng tham số thay đổi.

 

VB.NEt bạn có thể dùng kiểu khai báo hàm ghi đè:

Sub AAA()

Sub AAA(a as integer)

Sub AAA(a as integer, b as integer)

...

 

hoặc dùng từ khóa

Sub AAAByVal ParamArray a() As Integer)

 

C# hỗ trợ nhiều tham số như khai báo sau:

Sub AAA(params int a)

 

Lúc đó ta có thể dùng như sau

AAA(2,5,3,1)

AAA(6,2,6,1,34)

....

  • 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
khatamxd    21

mình hay khai báo kiểu này ko bít có đúng ý bạn chưa!

Sub xu_ly(array_diem() As diem, ByVal dem)

for i=1 to dem

 

end sub

Trong đó

array_diem: là mảng chứa biến các điểm

dem: là số lượng điểm trong mảng array_diem

  • 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
ketxu    2.653

Hì..Đó là cách tạo list điểm trước rồi ^^ Như vậy thì dem của bạn = Ubound(array_diem) rồi đúng hok ^^

Phần khai báo như C# ví dụ bác anhcos kia chính là vấn đề mình thắc mắc có hay không trong VB ^^

  • 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
gia_bach    1.442

VB không hỗ trợ hàm có số lượng tham số thay đổi.

 

VB.NEt bạn có thể dùng kiểu khai báo hàm ghi đè:

Sub AAA()

Sub AAA(a as integer)

Sub AAA(a as integer, b as integer)

...

 

hoặc dùng từ khóa

Sub AAAByVal ParamArray a() As Integer)

 

C# hỗ trợ nhiều tham số như khai báo sau:

Sub AAA(params int a)

 

Lúc đó ta có thể dùng như sau

AAA(2,5,3,1)

AAA(6,2,6,1,34)

....

Tuơng tựC#, VB cũng hỗ trợ nhiều tham số, khai báo như sau:

Function calcSum(ByVal ParamArray args() As Double) As Double

vd :

Public Function calcSum(ByVal ParamArray args() As Double) As Double

calcSum = 0

If args.Length <= 0 Then Exit Function

For i As Integer = 0 To UBound(args, 1)

calcSum += args(i)

Next i

End Function

gọi :

calcSum(4, 3, 2, 1)

calcSum(3, 2, 1)

calcSum(3, 2, 1)

 

tham khảo :

- Parameter Arrays (Visual Basic)

- Params (C# Reference)

 

Nhưng nói chung, VB hay C# cũng vẫn xử lý như 1 Array (hay List trong AutoLisp)

  • 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
ketxu    2.653

Cho e hỏi đây là cách khai báo trong VB.Net và không áp dụng được cho VBA đúng 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
gia_bach    1.442

Cho e hỏi đây là cách khai báo trong VB.Net và không áp dụng được cho VBA đúng không ạ ?

Trích từ VBA help:

 

Understanding Parameter Arrays

A parameter array can be used to pass an array of arguments to a procedure. You don't have to know the number of elements in the array when you define the procedure.

 

You use the ParamArray keyword to denote a parameter array. The array must be declared as an array of type Variant, and it must be the last argument in the procedure definition.

 

The following example shows how you might define a procedure with a parameter array.

 

Sub AnyNumberArgs(strName As String, ParamArray intScores() As Variant)

Dim intI As Integer

 

Debug.Print strName; " Scores"

' Use UBound function to determine upper limit of array.

For intI = 0 To UBound(intScores())

Debug.Print " "; intScores(intI)

Next intI

End Sub

 

The following examples show how you can call this procedure.

 

AnyNumberArgs "Jamie", 10, 26, 32, 15, 22, 24, 16

AnyNumberArgs "Kelly", "High", "Low", "Average", "High"

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
phantuhuong    204

Tốt nhất là em tạo 1 Function, có đối số là điểm và block. Sau đó tạo 1 thủ tục gọi hàm đó ra, đối số của hàm gán trực tiếp trong thủ tục đó!

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  

×