Ðề: Thư viện các hàm tự lập bằng VB
Tôi đang gặp vấn đề rất khó khăn. Mong cả nhà chỉ bảo. Tôi đang thực hiện một tool để kiểm xoát dữ liệu trong CAD bằng VBA.
Được mô tả như sau:
- Chương trình AutoCAD mở nhiều bản vẽ. Tôi có một đối tượng ở bản vẽ 1 được chuyển sang bản vẽ 2. Làm thế nào quản lý được ObjectID của nó. Bởi vì khi chuyển đối tượng đó từ 1 sang 2 thì ObjectID của nó bị thay đổi. Làm thế nào nhận ra đối tượng đó.
- Có cơ chế nào trong lập trình VBA chuyển đối tượng hay copy đối tượng từ bản vẽ 1 sang bản vẽ 2 mà vẫn kiểm xoát được ObjectID của nó không.
help me....
QUẢNG CÁO ĐẦU TRANG
Collapse
Thông báo
Collapse
No announcement yet.
Thư viện các hàm tự lập bằng VB
Collapse
X
-
Ðề: Thư viện các hàm tự lập bằng VB
Tôi cũng xin nói thêm về collection. Có thể coi là một danh sách liên kết các "objects".
Khi ta lập trình với Pascal thì ta trật vật tạo danh sách liên kết. Nhưng collection bao gồm toàn bộ dữ liệu và toàn bộ các object tồn tại. Cơ chế tìm kiếm và cơ chế thêm bớt rất tiện lợi.
Thời kỳ tôi làm đồ án tốt nghiệp, Nhờ một anh thế hệ trước chỉ bảo tôi. Mà tôi đã đơn giản được hàng đống code. Mà nhìn vào nó đã tôi phát ớn. Code được trình bày đơn giản rễ hiểu. Các anh em chỉ cần bật help của Vb hay VBA (Excel, AutoCAD, Word) với từ khóa collection.
Chúc anh em thành công.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Nếu dùng Redim Preserve Mang(0 to k) thì sẽ giữ lại được các giá trị mà mình đã Redim trước đó, nếu không nó sẽ xóa hết các giá trị cũ.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Hàm Redim dùng để cấp phát vùng nhớ cho các mảng động, ví dụn như sau:Nguyên văn bởi tien2005Các bác cho em hỏi sử dụng hàm Redim như thế nào?
Có thể khai báo giatri=redim(i,j,k)
sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
Cám ơn các Bác
Dim a() as Double 'Khai báo mảng động a() kiểu số thực
Redim a(1 to 100) 'cap phat vung nho 100 phan tu cho mang a()
Sao tu nhien khong viet tieng Viet duoc vay ta
?
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
'Tim cac cap noi luc tuong ung!
'Mai Khoa Nam -STU
'1-xuat bieu do bao vat lieu sang Excel(ko xuat cac TH to hop) de lay cac gia tri min,mac
'2--xuat cac truong hop to hop sang Excel (ko xuat bieu do bao vat lieu)
'3-Tu cac gia tri min mac di tim cac gia tri noi luc tuong ung co trong cac TH to hop thong qua ham tim kiem nay
'chuc cac ban thanh cong
Public Function timMtuongung(khoangP, khoangM3 As Range, Gt As Double)
Dim i As Integer
i = 0
Do While i < khoangP.Cells.Count
i = i + 1
If khoangP(i) = Gt Then
timMtuongung = khoangM3(i)
Exit Do
End If
If khoangP(i + 1) = Gt Then
timMtuongung = khoangM3(i + 1)
Exit Do
End If
Loop
End Function
Public Function timNtuongung(khoangM3, khoangP As Range, Gt As Double)
Dim i As Integer
i = 0
Do While i < khoangM3.Cells.Count
i = i + 1
If khoangM3(i) = Gt Then
timNtuongung = khoangP(i)
Exit Do
End If
If khoangM3(i + 1) = Gt Then
timNtuongung = khoangP(i + 1)
Exit Do
End If
Loop
End FunctionLast edited by maikhoanam; 11-06-2006, 07:54 PM.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Cám ơn bác Cuong gt41, tôi sẽ tìm hiểu thêm đối tượng Collection
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Theo tôi bác có thể dùng hàm Find để giải quyết công việc này sẽ tốt hơn vòng For (kinh nghiệm này có được khi tôi viết chương trình tính dự toán)Nguyên văn bởi PMXDXin chào mọi người!
Lâu nay tôi cũng chẳng lập thêm được hàm nào hay ho cả, các hàm thông thường có POST lên chắc cũng không hiệu quả. Để góp vui thêm cho Box, tôi thảo luận với anh em về 1 thuật toán mà trước đây tôi thu thập được.
'========
Đề bài: Cho một tập hợp N(gồm n phần tử),. Hãy tìm trong tập hợp N phần tử thỏa mãn tính chất A.
'========
Khi đọc đề bài này, chắc ai cũng nghĩ ngay đến thuật toán "VÉT CẠN", đó là dùng vòng For chạy từ đầu đến cuối tập hợp để tìm ra phần tử có thuộc tính A. Tuy nhiên, nếu số lượng phần tử rất rất nhiều thì vòng lặp này sẽ chạy rất lâu (Đặc biệt khi dùng ngôn ngữ VB) vì số phép tính là n!.
'========
Thuật toán "CHIA ĐÔI" (tôi quên tên chính xác rồi, cứ tạm gọi như vậy):Chia đôi tập hợp ban đầu thành 2 tập hợp con N1 và N2. Dùng 1 vòng lặp For chạy trong tập hợp N1. Nếu gặp phần tử thỏa mãn thuộc tính A thì kết thúc lặp, nếu chạy hết mà không gặp phần tử đó thì xét đến tập con N2. Trong tập con N2 lại chia thành 2 tập con N21 và N22 và làm tương tự.
Cứ như vậy thì số lượng phép toán sẽ giảm đi rất nhiều, tăng tốc độ chạy chương trình.
Nếu bạn nào dùng Delphi hoặc C++ chắc cũng chẳng cần để ý đến thuật toán này, nhưng tôi làm VB, nếu cứ "VÉT CẠN" nhiều khi chạy toàn "TREO MÁY"
Các bạn xem có gì đóng góp ý kiến
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Bác có thể dùng đối tượng thùng chứa của VB (Collection) Trong đó nhồi gì vào chẳng được...Nguyên văn bởi tien2005Các bác cho em hỏi sử dụng hàm Redim như thế nào?
Có thể khai báo giatri=redim(i,j,k)
sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
Cám ơn các Bác
Như của bác thì bác nên tạo ra một đối tượng có các thuộc tính tương ứng là i,j,k...
Rồi nhồi nó vào cái collection vừa tạo ra đấy.
(Collection : là mảng để chứa đối tượng bất kỳ Bác nên tìm hiểu cách sd nó vì nó rất hữu dụng. Chứ không cần thiết phải dùng redim đâu)
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Các bác cho em hỏi sử dụng hàm Redim như thế nào?
Có thể khai báo giatri=redim(i,j,k)
sau đó tìm giá trị k nào đó thì ta cũng tìm được giá trị i, j tương ứng
vd: i là phần tử, j là vị trí mặt cắt, k là giá trị moment
Cám ơn các Bác
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
ok. Đúng là n chứ không phải là n! . Khi cho chung chung như thế thì chỉ có cách làm for(i=1 to n). Còn khi muốn tối ưu thì phải xắp xếp theo một quy luật nhất định
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Mục đích của bài toán trên là lọc trong 1 tập hợp những phần tử thỏa mãn điều kiện nào đó. Theo tôi, số phép tính duyệt chỉ là n, bằng số phần tử của tập hợp, không phải là n!???
Không có cái nào tốt hơn và dễ hơn cách for i:=0 to n-1 do duyet(i)
Không cần bàn việc tối ưu ở đây, nếu bàn thì bài toán cần thêm dữ kiện.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Xin chào mọi người!
Lâu nay tôi cũng chẳng lập thêm được hàm nào hay ho cả, các hàm thông thường có POST lên chắc cũng không hiệu quả. Để góp vui thêm cho Box, tôi thảo luận với anh em về 1 thuật toán mà trước đây tôi thu thập được.
'========
Đề bài: Cho một tập hợp N(gồm n phần tử),. Hãy tìm trong tập hợp N phần tử thỏa mãn tính chất A.
'========
Khi đọc đề bài này, chắc ai cũng nghĩ ngay đến thuật toán "VÉT CẠN", đó là dùng vòng For chạy từ đầu đến cuối tập hợp để tìm ra phần tử có thuộc tính A. Tuy nhiên, nếu số lượng phần tử rất rất nhiều thì vòng lặp này sẽ chạy rất lâu (Đặc biệt khi dùng ngôn ngữ VB) vì số phép tính là n!.
'========
Thuật toán "CHIA ĐÔI" (tôi quên tên chính xác rồi, cứ tạm gọi như vậy):Chia đôi tập hợp ban đầu thành 2 tập hợp con N1 và N2. Dùng 1 vòng lặp For chạy trong tập hợp N1. Nếu gặp phần tử thỏa mãn thuộc tính A thì kết thúc lặp, nếu chạy hết mà không gặp phần tử đó thì xét đến tập con N2. Trong tập con N2 lại chia thành 2 tập con N21 và N22 và làm tương tự.
Cứ như vậy thì số lượng phép toán sẽ giảm đi rất nhiều, tăng tốc độ chạy chương trình.
Nếu bạn nào dùng Delphi hoặc C++ chắc cũng chẳng cần để ý đến thuật toán này, nhưng tôi làm VB, nếu cứ "VÉT CẠN" nhiều khi chạy toàn "TREO MÁY"
Các bạn xem có gì đóng góp ý kiến
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Bác PMXD cứ lập ra đi, đồng bào nhiều khi cũng chẳng chủ động lắm đâu. Nếu lập ra một thời gian mà thấy không có hiệu quả thì ta lại đóng lo gì. Bác là mod mà, tiếp thị thêm vài bài ở các chủ đề khác thế nào chả có người quan tâm. Tôi nghĩ mục đó cũng sẽ HOT đấy. Ít nhất bác cũng đã có 2 thành viên rồi nhé.Nguyên văn bởi PMXDRất cám ơn morpheus đã đóng góp ý kiến. Ở diễn đàn cũng hầu hết là các anh em xây dựng tự lập trình nên đôi lúc cũng không tránh khỏi việc thiếu tối ưu trong thuật toán. Ở bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộ.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Em cũng được học một ít về tin học thì được biết các bài toán mức độ tính toán phụ thuộc dữ liệu đầu vào thì không có giải thuật nào là tốt nhất. Mỗi giải thuật hay trong trường hợp này nhưng lại chưa hay trong trường hợp khác. Các bác cứ thử với 2 bộ số liệu (9,8,7,6,5,4,3,2,1,0) và (0,1,2,3,4,5,6,7,8,9) rồi dùng thử các hàm sort sẽ thấy mỗi giải thuật hay với bộ 1 nhưng chưa chắc đã hay với bộ 2 và ngược lại.Nguyên văn bởi morpheus
Các bác không chuyên rồi. Thuật toán "sủi bọt" (bubble sort) này là thuật toán cơ bản nhất khi học tin. Ở đây ta nên dùng với phép lặp điều kiện thì đúng hơn là với phép lặp đếm. Điều này cho phép chủ động dừng vòng lặp khi thuật toán đã hoàn tất (chứ không nhất thiết phải thực hiện toàn bộ 2 phép lặp chồng nhau) và sẽ không sót trường hợp nào.
Còn giải thuật nổi bọt theo lý thuyến vẫn có 2 vòng for ***g nhau, không biết có cách 2 như bác viết không.
Em ủng hộ.Nguyên văn bởi PMXDỞ bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộLast edited by minhtu; 30-05-2006, 01:11 PM.
Leave a comment:
-
Ðề: Thư viện các hàm tự lập bằng VB
Rất cám ơn morpheus đã đóng góp ý kiến. Ở diễn đàn cũng hầu hết là các anh em xây dựng tự lập trình nên đôi lúc cũng không tránh khỏi việc thiếu tối ưu trong thuật toán. Ở bài viết lần trước, tôi cũng đề xướng mở một chủ đề bàn về các thuật toán hay gặp khi lập trình cho các ứng dụng trong xây dựng, nhưng không thấy ai ủng hộ.Nguyên văn bởi morpheus
Các bác không chuyên rồi. Thuật toán "sủi bọt" (bubble sort) này là thuật toán cơ bản nhất khi học tin. Ở đây ta nên dùng với phép lặp điều kiện thì đúng hơn là với phép lặp đếm. Điều này cho phép chủ động dừng vòng lặp khi thuật toán đã hoàn tất (chứ không nhất thiết phải thực hiện toàn bộ 2 phép lặp chồng nhau) và sẽ không sót trường hợp nào.
Dim Mang() As Double
Dim i As Integer
Dim isNotYetSorted As Boolean
Do
isNotYetSorted = False
For i = Lbound(Mang) to Ubound(Mang) - 1
If Mang(i) > Mang(i + 1) Then
HoanVi(Mang(i), Mang (i+1))
isNotYetSorted = True
End If
Next
Loop Until Not isNotYetSorted.
Các bác check lại xem nhé.
Leave a comment:
Quảng cáo cuối trang
Collapse

Leave a comment: