ketxu 2.984 Báo cáo bài đăng Đã đăng Tháng 3 19, 2011 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 539 Báo cáo bài đăng Đã đăng Tháng 3 19, 2011 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.984 Báo cáo bài đăng Đã đăng Tháng 3 19, 2011 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 ^^ 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 196 Báo cáo bài đăng Đã đăng Tháng 3 22, 2011 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) .... 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 Báo cáo bài đăng Đã đăng Tháng 3 22, 2011 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 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.984 Báo cáo bài đăng Đã đăng Tháng 3 23, 2011 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 ^^ 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.549 Báo cáo bài đăng Đã đăng Tháng 3 23, 2011 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) 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.984 Báo cáo bài đăng Đã đăng Tháng 3 23, 2011 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 ạ ? 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.549 Báo cáo bài đăng Đã đăng Tháng 3 23, 2011 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 218 Báo cáo bài đăng Đã đăng Tháng 3 30, 2011 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