dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 7 29, 2013 Diễn đàn CadViet hình như đó là sân chơi của Lisp thì phải, có lẽ đúng thật! -_- .Anh em vô đây đa số là yêu cầu Lisp chứ VBA thì rất ít.Vì vậy mình mạo muội thành lập cái chủ đề này mong rằng sẽ khuấy đảo được những anh em có lòng đam mê với VBA và đặc biệt là VBA cho Autocad. Những anh em nào mới học VBA hoặc đã có kiến thức về nó hãy mạnh dạn trao đổi để anh em cùng học hỏi nhé! Chúc Topic VBA cho Cad ngày càng phát triển. Chúc mọi người luôn vui vẻ! 1 4 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.983 Báo cáo bài đăng Đã đăng Tháng 7 29, 2013 Vote up 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 7 30, 2013 Nếu anh em có thắc mắc thì hãy mạnh dạn Post lên cũng như mạnh dạn đưa những yêu cầu của anh em lên nhé để mọi người cùng thảo luận Hy vọng Topic VBA sẽ cùng tranh đua với Topic Lisp. Chúc CadViet ngày càng phát triể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
Anlee 3 Báo cáo bài đăng Đã đăng Tháng 7 31, 2013 Trước tiên cám ơn mọi người đã tham gia. Mình có 1 vấn đề như thế này: Khi plot bằng vba trong cad getpoint và Plot. nhưng khi plot có những bản vẽ thì nó hiện đúng cái window mà mình bắt 2 điểm có những bản vẽ thì nó bị lệch ra khỏi chỗ khác. Mình cũng ko biết tại sao? ThisDrawing.ActiveLayout.SetWindowToPlot Pt1, Pt2 ThisDrawing.ActiveLayout.GetWindowToPlot Pt1, Pt2 hix. nhưng cũng bản vẽ lỗi đấy copy sang NewDrawing thì lại ok ~ Ah : Bạn nào có ý tưởng gì về VBA cho cad va excel thi post lên a e cùng trao đổi nhé 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
tuanthuasac 3 Báo cáo bài đăng Đã đăng Tháng 7 31, 2013 mình thì không rành về VBA cho Cad hay Excel lắm. Tuy nhiên, có học qua môn Tự động hóa thiết kế (tin học xây dựng) cũng chỉ là cưỡi ngựa xem hoa thôi. Gửi cho diễn đàn một ít tài liệu vậy. Dung lượng hơi lớn (bao gồm giáo trình, ví dụ và Video hướng dẫn), link http://www.mediafire.com/download/pe0zj09bj2mzgoh/ForStudent1.rar http://www.mediafire.com/download/7lfloh75roq0k4c/ForStudent2.rar 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
dvlam 5 Báo cáo bài đăng Đã đăng Tháng 8 1, 2013 Cho em được hỏi một vấn đề quen thuộc: dùng VBA trao đổi dữ liệu dạng bảng biểu giữa AutoCAD và Excel 1. Xuất dữ liệu bảng số liệu từ ACAD sang Excel (điều này quen thuộc - trên diễn đàn đã nhiều lần đề cập đến!!!). 2. Phun bảng số liệu từ Excel vào ACAD có định dạng cụ thể: chiều rộng; chiều dài của từng cell, chiều cao chữ... (*) Áp dụng cho bảng biểu kích thước bất kỳ, sau khi chuyển từ ACAD sang Excel sẽ tự động lưu lại những thông tin (*), khi xuất ngược lại sẽ áp dụng. Nếu phun lần đầu thì mình tự định nghĩa các tham số định dạng này trên file Excel trước khi phun vào ACAD. Chân thành cám ơn và mong chờ hồi âm! 2 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 8 2, 2013 các anh cho em hỏi. vì em mới học vab trong cad có nhiều Module trong 1 file thì trong lisp thì làm sao thực hiện lệnh gọi các module đó vậy em có kèm theo file đính kèm. Mong các anh em hướng dẫn cho. Cảm ơn http://www.cadviet.com/upfiles/3/14895_hoi.rar của bạn đây nhé! http://www.cadviet.com/upfiles/3/37575_1_vehinh.lsp 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
Anlee 3 Báo cáo bài đăng Đã đăng Tháng 8 6, 2013 Cho em được hỏi một vấn đề quen thuộc: dùng VBA trao đổi dữ liệu dạng bảng biểu giữa AutoCAD và Excel 1. Xuất dữ liệu bảng số liệu từ ACAD sang Excel (điều này quen thuộc - trên diễn đàn đã nhiều lần đề cập đến!!!). 2. Phun bảng số liệu từ Excel vào ACAD có định dạng cụ thể: chiều rộng; chiều dài của từng cell, chiều cao chữ... (*) Áp dụng cho bảng biểu kích thước bất kỳ, sau khi chuyển từ ACAD sang Excel sẽ tự động lưu lại những thông tin (*), khi xuất ngược lại sẽ áp dụng. Nếu phun lần đầu thì mình tự định nghĩa các tham số định dạng này trên file Excel trước khi phun vào ACAD. Chân thành cám ơn và mong chờ hồi âm! Bạn đưa vd cụ thể lên đ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
dvlam 5 Báo cáo bài đăng Đã đăng Tháng 8 8, 2013 Trước tiên mình nói về vấn đề phun Table từ Excel vào Acad: Mình có sẵn một file Excel: Test (đính kèm), trong đó có mô tả: 1- Phần tạo Layer, ở phần màu xanh mình sẽ nhập vào định nghĩa Layer. 2- Phần tiếp theo mình sẽ định Layer cho các đối tượng: fram; line và text, định chiều cao text vào các ô màu xanh. 3- Nhập vào chiều cao từng dòng và chiều rộng từng cột vào các ô màu xanh tưng ứng. 4- Xuất qua Acad --> chuyển vào môi trường Acad và pick chọn một điểm gốc (mặc định là gốc tọa độ nếu nil) Kết quả trả ra giống như file Acad: Test (đính kèm) File đính kèm bài viết: Test.xls: http://www.cadviet.com/upfiles/3/121840_test.rar Test.dwg: http://www.cadviet.com/upfiles/3/121840_test.dwg Trân trọng cám ơn sự quan tâm của anh em! 2 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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 8 19, 2013 Mình thấy trong Lisp có hàm ssget ( chọn đối tượng ) --> trong vba không có --> mình thử xây dựng 1 hàm gần giống như kiểu ssget như sau : Sub ssget() Dim ssetObj As AcadSelectionSet Dim entity As AcadEntity Set ssetObj = ThisDrawing.PickfirstSelectionSet If ssetObj.Count Then ........................... Else Set ssetObj = ThisDrawing.SelectionSets.Add("#") If Err <> 0 Then Set ssetObj = ThisDrawing.SelectionSets("#"): ssetObj.Clear End If ssetObj.SelectOnScreen ............................... End Sub Nếu mà code trên chạy trong môi trường vba thì không vấn đề gì : * thuộc tính pickfirstSelectionset hoạt động bình thường nhưng nếu ta thử gọi macro trên bằng lisp thì thuộc tính pickfristSelectionset không thể hoạt động : hàm báo lỗi nil (defun C:6() (command "-vbarun" "ssget") ) ---> Mình vẫn chưa tìm ra được nguyên nhân và cách khắc phục, mong các bạn yêu thích vba trong autocad chia sẻ ,trao đổi thêm về vấn để trên ! thanks! <----------- cảm ơn mọi người đã dành thời gian đọc bài viết của mình 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 8 19, 2013 Mình thấy trong Lisp có hàm ssget ( chọn đối tượng ) --> trong vba không có --> mình thử xây dựng 1 hàm gần giống như kiểu ssget như sau : Sub ssget() Dim ssetObj As AcadSelectionSet Dim entity As AcadEntity Set ssetObj = ThisDrawing.PickfirstSelectionSet If ssetObj.Count Then ........................... Else Set ssetObj = ThisDrawing.SelectionSets.Add("#") If Err <> 0 Then Set ssetObj = ThisDrawing.SelectionSets("#"): ssetObj.Clear End If ssetObj.SelectOnScreen ............................... End Sub Nếu mà code trên chạy trong môi trường vba thì không vấn đề gì : * thuộc tính pickfirstSelectionset hoạt động bình thường nhưng nếu ta thử gọi macro trên bằng lisp thì thuộc tính pickfristSelectionset không thể hoạt động : hàm báo lỗi nil (defun C:6() (command "-vbarun" "ssget") ) ---> Mình vẫn chưa tìm ra được nguyên nhân và cách khắc phục, mong các bạn yêu thích vba trong autocad chia sẻ ,trao đổi thêm về vấn để trên ! thanks! <----------- cảm ơn mọi người đã dành thời gian đọc bài viết của mình bạn đưa nguyên code lên coi nhé để mình xem thử,chứ Code viết như trên không hiểu đc lắm.Thực ra trong VBA đối tượng SelectionSet làm việc rất hiệu quả đó chứ.Các bộ lọc của nó cũng tương đương với bên Lisp. 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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 8 19, 2013 bạn đưa nguyên code lên coi nhé để mình xem thử,chứ Code viết như trên không hiểu đc lắm.Thực ra trong VBA đối tượng SelectionSet làm việc rất hiệu quả đó chứ.Các bộ lọc của nó cũng tương đương với bên Lisp. Cảm ơn bạn đã quan tâm đến vấn đề của mình : mình ví dụ luôn như sau : Sub Example_PickfirstSelectionSet() ' This example lists all the objects in the pickfirst selection set. ' Before running this example, create some objects in the active ' drawing and select those objects. The objects currently selected ' in the active drawing will be returned in the pickfirst selection set. Dim pfSS As AcadSelectionSet Dim ssobject As AcadEntity Dim msg As String msg = vbCrLf Set pfSS = ThisDrawing.PickfirstSelectionSet For Each ssobject In pfSS msg = msg & vbCrLf & ssobject.ObjectName Next ssobject MsgBox "The Pickfirst selection set contains: " & msg End Sub * Ý mình là hàm Ssget trong lisp --> cho phép chọn trước 1 đối tượng , còn trong vbarun có lẽ không làm được điều này ! ==> Bạn thử làm theo các bước sau : * Chọn trước mấy đối tượng trong bản vẽ : * Trong trình soạn thảo vba : ấn F5 run code trên :====> code sẽ liệt kê hết tên các đối tượng được chọn trước trên bản vẽ * Nhưng nếu trên autocad : bạn gõ lệnh : vbarun --> run code ở trên ==> code trên hoàn toàn không hoạt động ** Mình cũng không hiểu tại sao ??? ==> Không có lẽ trong VBA ta không có cách nào lựa chọn các đối tượng trước khi thực hiện lệnh ??? ví dụ : như lệnh copy trong autocad : ta có thể chọn trước đối tượng rồi gõ lệnh copy * Nhưng trong vba : kiểu gì ta cũng phải chọn lại đối tượng sau khi gõ lệnh ???? mình thử viết 1 đoạn code để thay đổi màu các đối tương như sau : Sub ssget() Dim ssetObj As AcadSelectionSet Dim entity As AcadEntity On Error Resume Next Set ssetObj = ThisDrawing.PickfirstSelectionSet If ssetObj.Count Then For Each entity In ssetObj entity.color = 8 Next Else Set ssetObj = ThisDrawing.SelectionSets.Add("#") If Err <> 0 Then Set ssetObj = ThisDrawing.SelectionSets("#"): ssetObj.Clear End If ssetObj.SelectOnScreen For Each entity In ssetObj entity.color = 8 Next End If End Sub ==> Nó hoàn toàn không " mạnh " bằng hàm ssget trong lisp như sau : (defun c:test () (setq ss (ssget)) (command "chprop" ss "" "c" "8" "") ) 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 8 27, 2013 Mình đã kiểm nghiệm như bạn nói.Đúng là với VBA chúng ta phải chọn đối tượng sau khi gõ lệnh. Nhìn bạn minh họa với Autolisp và VBA, có vẻ VBA dài dòng quá nhỉ trong khi đó Lisp chỉ vài dòng là ok ngay. Haizzzzaaa! 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
Anlee 3 Báo cáo bài đăng Đã đăng Tháng 8 27, 2013 Cảm ơn bạn đã quan tâm đến vấn đề của mình : mình ví dụ luôn như sau : Sub Example_PickfirstSelectionSet() ' This example lists all the objects in the pickfirst selection set. ' Before running this example, create some objects in the active ' drawing and select those objects. The objects currently selected ' in the active drawing will be returned in the pickfirst selection set. Dim pfSS As AcadSelectionSet Dim ssobject As AcadEntity Dim msg As String msg = vbCrLf Set pfSS = ThisDrawing.PickfirstSelectionSet For Each ssobject In pfSS msg = msg & vbCrLf & ssobject.ObjectName Next ssobject MsgBox "The Pickfirst selection set contains: " & msg End Sub * Ý mình là hàm Ssget trong lisp --> cho phép chọn trước 1 đối tượng , còn trong vbarun có lẽ không làm được điều này ! ==> Bạn thử làm theo các bước sau : * Chọn trước mấy đối tượng trong bản vẽ : * Trong trình soạn thảo vba : ấn F5 run code trên :====> code sẽ liệt kê hết tên các đối tượng được chọn trước trên bản vẽ * Nhưng nếu trên autocad : bạn gõ lệnh : vbarun --> run code ở trên ==> code trên hoàn toàn không hoạt động ** Mình cũng không hiểu tại sao ??? ==> Không có lẽ trong VBA ta không có cách nào lựa chọn các đối tượng trước khi thực hiện lệnh ??? ví dụ : như lệnh copy trong autocad : ta có thể chọn trước đối tượng rồi gõ lệnh copy * Nhưng trong vba : kiểu gì ta cũng phải chọn lại đối tượng sau khi gõ lệnh ???? mình thử viết 1 đoạn code để thay đổi màu các đối tương như sau : Sub ssget() Dim ssetObj As AcadSelectionSet Dim entity As AcadEntity On Error Resume Next Set ssetObj = ThisDrawing.PickfirstSelectionSet If ssetObj.Count Then For Each entity In ssetObj entity.color = 8 Next Else Set ssetObj = ThisDrawing.SelectionSets.Add("#") If Err <> 0 Then Set ssetObj = ThisDrawing.SelectionSets("#"): ssetObj.Clear End If ssetObj.SelectOnScreen For Each entity In ssetObj entity.color = 8 Next End If End Sub ==> Nó hoàn toàn không " mạnh " bằng hàm ssget trong lisp như sau : (defun c:test () (setq ss (ssget)) (command "chprop" ss "" "c" "8" "") ) Đoạn code bt ko có vấn đề gi cả nhưng cách thao tác của bạn chưa đúng vì: -khi bạn chọn đối tượng xong, xong rồi bạn go lệnh vbarun thì nó thoat đối tượng ra rồi -ban thử chọn đối tượng xong vào alt + F11 rồi ấn nút hình tam giác ý code chạy bình thường Còn để so sánh vba với Lisp thì nó là cả 1 vấn đề nan giải. ai quen cái gì thì dùng cái đấy thôi. Riêng mình thì mình thích vba hơn vì nó ứng dụng cả trong excel 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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 9 4, 2013 Đoạn code bt ko có vấn đề gi cả nhưng cách thao tác của bạn chưa đúng vì: -khi bạn chọn đối tượng xong, xong rồi bạn go lệnh vbarun thì nó thoat đối tượng ra rồi -ban thử chọn đối tượng xong vào alt + F11 rồi ấn nút hình tam giác ý code chạy bình thường Còn để so sánh vba với Lisp thì nó là cả 1 vấn đề nan giải. ai quen cái gì thì dùng cái đấy thôi. Riêng mình thì mình thích vba hơn vì nó ứng dụng cả trong excel nữa. có lẽ bạn chưa hiểu ý mình lắm, mình đang nói đến thuộc tính pickfirstslectionset --> không có "ý nghĩa" trong cửa sổ vbarun, vì khi ta gõ vbarun thì các đối tượng được chọn trước sẽ được giải phóng hết!<--- mọi người đang thảo luận về giải pháp khắc phục - Để khắc phục ta có thể dùng kết hợp visual Lisp --> như vậy cú pháp của nó sẽ có kiểu như vậy : (vl-load-com)(vla-runmacro (vlax-get-acad-object) "your macro") --> với kiểu như trên thì bạn có thể hoàn toàn chọn đối tượng trước --> rồi thực hiện lệnh ps: Lisp là ngôn ngữ thông dịch,( nó kết hợp với một số hàm có sẵn trong cad,) còn VBA là ngôn ngữ lập trình hướng đối tượ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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 9 4, 2013 Cho mình hỏi 1 vấn đề nữa để anh em thảo luận ,nâng cao kiến thức: Trong quá trình lập trình vba trong auotcad : * có bạn nào đã dùng acadDictionary chưa --> nó có khác gì scripting.dictionary không ? *ưu điểm của 2 cái trên như thế nào ! 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
phantuhuong 217 Báo cáo bài đăng Đã đăng Tháng 9 10, 2013 Chủ đề này cũng từng có rồi. Các bạn cứ phát triển nhé! 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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 9 10, 2013 Chủ đề này cũng từng có rồi. Các bạn cứ phát triển nhé! bạn có thể gửi link của các chủ đề "đã từng có " này không ? để mọi người cùng tham khả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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 9 10, 2013 Gửi mọi người chương 6 - "Một Số Hàm Nhập Dữ Liệu "do mình tham khảo từ các sách khác nhau viết ra.Mong mọi người góp ý. Thanks and Best Regardshttp://www.cadviet.com/upfiles/3/37575_chng_6_các_hàm_nhp_liu.pdf Tài liệu rất có ích --> thanks bạn vì điều này !!! 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 9 13, 2013 Gửi mọi người chủ đề "Làm Việc với đối tượng SelectionSet" trong VBA, hy vọng nó sẽ hữu ích cho anh em. http://www.cadviet.com/upfiles/3/37575_chng_8_i_tng_selectionset.pdf 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
HungDHXD 6 Báo cáo bài đăng Đã đăng Tháng 9 13, 2013 (Đă chỉnh sửa) Gửi mọi người chủ đề "Làm Việc với đối tượng SelectionSet" trong VBA, hy vọng nó sẽ hữu ích cho anh em. http://www.cadviet.com/upfiles/3/37575_chng_8_i_tng_selectionset.pdf Trong file bạn có ghi 1 đoạn code thêm mói 1 đối tượng selectionsets:---> theo mình viết như thế này gọn hơn: Sub Ex_Addselectionset() Dim ssetObj As AcadSelectionSet On Error Resume Next With ThisDrawing.SelectionSets .Item("Kira").Delete Set ssetObj = .Add("Kira") End With End Sub Chỉnh sửa Tháng 9 13, 2013 theo HungDHXD 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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 9 13, 2013 Trong file bạn có ghi 1 đoạn code thêm mói 1 đối tượng selectionsets:---> theo mình viết như thế này gọn hơn: Cảm ơn sự góp ý của bạn.Việc tạo mới đối tượng SelectionSet đúng là có rất nhiều cách thức để tạo.Cách của bạn đúng là ngắn gọn và súc tích. Mình sẽ bổ sung vào trong giáo trình của mình. Chúc bạn vui vẻ! 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
tuantrinh89 0 Báo cáo bài đăng Đã đăng Tháng 10 10, 2013 Tiện đây em xin hỏi ở đây có bác nào quan tâm đến thuật toán tạo lưới tam giác delaunay không ạ, bác nào đã từng làm rồi chỉ dạy cho em đôi điều với. Giả dụ mình có 1 file txt chứa tọa độ điểm, sau khi đã phun lên được màn hình cad để thành các điểm, vậy làm thế nào để tạo được lưới tam giác delaunay từ những điểm này nhỉ? 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
nguyendan81985 3 Báo cáo bài đăng Đã đăng Tháng 11 5, 2013 mình mời học VBA nên chưa rành lắm. cho mình hỏi tí. làm sao để lấy dữ liệu từ textbox ra để xử lí. mình đã làm thử 1 chương trình nhưng ko thể nhập đc dữ liệu khi chạy chương trình. ai biết chỉ giúp với nhé. mình đã thử VBA trong exel và ko bị gì. nhập dữ liệu vào textbox bt nhưng VBA trong CAD thì ko đ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
dinhvantrang 151 Báo cáo bài đăng Đã đăng Tháng 11 9, 2013 Bạn đưa đoạn Code đó lên coi sao nhé 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