sir_nguyenhd 1 Báo cáo bài đăng Đã đăng Tháng 7 17, 2012 Dear các bác Em đang tìm hiểu về VBA on Autocad. Ví dụ đầu tiên của em là chèn một block từ một thư mục định sẵn vào bản vẽ cad hiện hành. Code em viết như sau: Private Sub cmd_chenblock_Click() Dim block As AcadBlockReference Dim diemchen(0 To 2) As Double Dim duongdan As String diemchen(0) = 0 diemchen(1) = 0 diemchen(2) = 0 'Thiet lap duong dan cua wblock duongdan = "c:\blockvidu.dwg" Set block = ThisDrawing.ModelSpace.InsertBlock(diemchen, duongdan, 1#, 1#, 1#, 0#) End Sub Private Sub cmd_thoat_Click() Unload Me End Sub Với code trên, nó sẽ chèn block theo đúng tọa độ xy(0,0). Tuy nhiên, em không biết chèn block theo tọa độ bằng cách pick chuột vào một điểm bất kỳ trên màn hình như thế nào (Em đã đọc về lệnh GetPoint- nhưng không hiểu cách dùng) Mong các bác giúp đỡ em, để em có thể tiếp tục các bước khác trong quá trình tìm hiểu VBA Cảm ơn các bác nhiều lắm lắm. P/S: Sau khi ấn nút chèn block, em phải tạo thêm nút Thoát (unload me) vì khi Form vẫn cứ hiện lên thì không thể tác động lên màn hình cad được. Các bác giúp em cả vấn đề này nữa nhé. Nếu bác nào có chương trình mẫu, ví dụ mẫu, có thể upload lên để em tham khảo được không? Thank you so much! S.Nguyen 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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 7 17, 2012 Bạn thêm đoạn sau vào Sub: Dim block As AcadBlockReference Dim insertionPnt As Variant insertionPnt = ThisDrawing.Utility.GetPoint(, "Chon vi tri can chen: ") Dim duongdan As String 'Thiet lap duong dan cua wblock duongdan = "C:\Block.dwg" Set block = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, duongdan, 1, 1, 1, 0) 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
sir_nguyenhd 1 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Bạn thêm đoạn sau vào Sub: Dim block As AcadBlockReference Dim insertionPnt As Variant insertionPnt = ThisDrawing.Utility.GetPoint(, "Chon vi tri can chen: ") Dim duongdan As String 'Thiet lap duong dan cua wblock duongdan = "C:\Block.dwg" Set block = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, duongdan, 1, 1, 1, 0) Thanks Mr. Nguyen Ngoc Son Em đã update cách của bác và chương trình đã chạy rồi. Tuy nhiên, chi tiết hơn một tí nữa. Giả sử chương trình cùng với file cad được đặt chung một thư mục. Em muốn sử dụng lệnh: App. Path &"\block.dwg" Code sẽ là: duongdan=App.Path &"\block.dwg" Tuy nhiên khi load, chương trình báo lỗi ở chính dòng lệnh này. Các bác giúp em xem câu lệnh này bị sai ở chỗ nào nhé Chân thành cảm ơ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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Em muốn sử dụng lệnh: App. Path &"\block.dwg" Code sẽ là: duongdan=App.Path &"\block.dwg" Tuy nhiên khi load, chương trình báo lỗi ở chính dòng lệnh này. Các bác giúp em xem câu lệnh này bị sai ở chỗ nào nhé Bạn sửa lại như sau xem thử: duongdan=ThisDrawing.Path & "\block" & ".dwg" Không được bạn cứ pm tại đây. Vì hiện tại mình ko có Cad để check Thâ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
sir_nguyenhd 1 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Bạn sửa lại như sau xem thử: duongdan=ThisDrawing.Path & "\block" & ".dwg" Không được bạn cứ pm tại đây. Vì hiện tại mình ko có Cad để check Thân ! Thank Mr. Nguyen Ngoc Son Mình đã thử cách của bạn, tuy nhiên code vẫn báo lỗi. Cho mình hỏi bạn một chút nữa nhé: Giả sử chương trình của mình viết hoàn thành. Vậy có thể đóng gói thành exe để cài đặt cho các máy khác không Nếu không thể thì có lẽ mình phải chuyển hướng, mình định viết bằng VB6, chạy độc lập so với Cad. Khi đó, muốn chèn block, chỉ cần chạy file exe của VB để hiện hộp thoại. Sau đó click combobox, chọn block muốn chèn. Bạn tư vấn cho mình nhé Thank bạn nhiều P/S: Bạn có Skype name không vậy. Nếu không phiền thì cho mình skype name nhé, hoặc add skype name của mình: evpcnguyen 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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Theo mình lỗi phát sinh do bạn không thể Insert chính bản vẽ bạn đang vẽ vào (chính nó) được? Nếu vậy bạn phải có đoạn Code chèn block có tên khác nhau từ thư viện vào bản vẽ đang thực thi? File VBA(.dvb) là code mã nhúng nghĩa là nó chỉ chạy được trên nền Cad thôi! Ý bạn viết bằng VB6 rất hay có thể chạy độc lập => Khả thi Nếu có Code VBA chuyển VB6 => Đơn giản PM: nguyenngocson_uct 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
sir_nguyenhd 1 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Theo mình lỗi phát sinh do bạn không thể Insert chính bản vẽ bạn đang vẽ vào (chính nó) được? Nếu vậy bạn phải có đoạn Code chèn block có tên khác nhau từ thư viện vào bản vẽ đang thực thi? File VBA(.dvb) là code mã nhúng nghĩa là nó chỉ chạy được trên nền Cad thôi! Ý bạn viết bằng VB6 rất hay có thể chạy độc lập => Khả thi Nếu có Code VBA chuyển VB6 => Đơn giản PM: nguyenngocson_uct Theo mình lỗi phát sinh do bạn không thể Insert chính bản vẽ bạn đang vẽ vào (chính nó) được? Nếu vậy bạn phải có đoạn Code chèn block có tên khác nhau từ thư viện vào bản vẽ đang thực thi? File VBA(.dvb) là code mã nhúng nghĩa là nó chỉ chạy được trên nền Cad thôi! Ý bạn viết bằng VB6 rất hay có thể chạy độc lập => Khả thi Nếu có Code VBA chuyển VB6 => Đơn giản PM: nguyenngocson_uct Dear Mr. Son Thanks for your reply Mình hiểu ý bạn khi chuyển code từ vba sang vb6 Hình như thay ThisDrawing=AcadApp.ActiveDocument (Dim AcadApp as Object) Mình đã thử trên VB6, thấy cũng chạy tốt bạn ạ Tuy nhiên, do không được học một chút nào về VB, chỉ là tự tìm hiểu, khai thác trên Internet nên code viết hơi lung tung, hơi thừa thì phải (mặc dù vẫn chạy theo đúng ý) Bạn có rành nhiều về VB6 vs Autocad không vậy? Mình có thể trao đổi. Vì trên diễn đàn ít thấy có nhiều bài về vấn đề này. PS: + Nickname trên của bạn là cho Yahoo hay Skype vậ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
ketxu 3005 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Bạn đọc bài về late binding của bác anhcos trên diễn đà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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Nick mình Yahoo: nguyenngocson_uct 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
NguyenNgocSon 43 Báo cáo bài đăng Đã đăng Tháng 7 18, 2012 Dear Mr. Son Mình hiểu ý bạn khi chuyển code từ vba sang vb6 Hình như thay ThisDrawing=AcadApp.ActiveDocument (Dim AcadApp as Object) Đơn giản như sau: Khai báo Public moACAD As Object Public moDWG As Object Set moDWG = moACAD.ActiveDocument Sau đó: Trong VBA có ThisDrawing thay bằng moDWG 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
qdzung 0 Báo cáo bài đăng Đã đăng Tháng 8 15, 2012 Mình có viết một chương trình để Link data base từ Excel và chạy trên CAD. Nếu bạn muốn tham khảo thì có thể load về chạy thử :D Nhớ kiểm tra Thư viện (Tools ---> references --> check vào thư viện CAD hiện tại đang dùng). Có gì cứ mail cho mình : qdzung@gmail.com http://www.cadviet.com/upfiles/3/31227_hkprogram_1.zip 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