Sử dụng VBA trong AutoCad để liên kết với Excel

Liên hệ QC

PhanTuHuong

VBA & VB.NET for Excel & AutoCad
Thành viên danh dự
Tham gia
13/6/06
Bài viết
7,121
Được thích
24,279
Trong lĩnh vực kỹ thuật như trắc địa, địa chất, xây dựng, giao thông, kiến trúc, chế tạo máy,... phần mền AutoCad được sử dụng rất phổ biến. Bạn có thể sử dụng VBA trong Excel để vẽ các đối tượng hình học trong AutoCad như chủ đề đã có. Và tại sao ta lại không thể làm ngược lại?! Bạn hãy sử dụng ngôn ngữ VBA trong AutoCad để thực hiện công việc đó. Nếu bạn đã biết VBA trong Excel thì cũng nhanh chóng học được VBA trong AutoCad. Để dễ dàng so sánh giữa chúng, tôi xin giới thiệu 2 thủ tục để mở AutoCad từ Excel và ngược lại:

Mã:
Sub Mo_AutoCad()

  Dim AcaDApp As Object

  On Error Resume Next
    Set AcadApp = GetObject(, "AutoCAD.Application")
    If Err <> 0 Then
      Err.Clear
      KT = True
      Set AcadApp = CreateObject("AutoCAD.Application")
    End If
      AppActivate AcadApp.Caption
      AcadApp.Visible = True

    Set AcadApp = Nothing
End Sub

Mã:
Sub Mo_Excel()

    Dim ExcelApp As Object
    On Error Resume Next

    Set ExcelApp = GetObject(, "Excel.Application")
    If Err <> 0 Then
        Err.Clear
        Set ExcelApp = CreateObject("Excel.Application")
    End If
    ExcelApp.Visible = True
    AppActivate ExcelApp.Caption
    ExcelApp.Workbooks.Add
    
    Set ExcelApp = Nothing
End Sub
 
Xác định tọa độ các điểm trong Acad

Bác PhanThuHuong có vẻ quan tâm đến việc chuyển dữ liệu qua lại giữa acad và excel, hưởng ứng với bác là tiện ích xác định tọa độ các điểm trong acad, số liệu có thể xuất thẳng ra acad hay excel

Cách dùng : file lisp dùng để load macro này lên, các bác phải chép 2 file này vào thư mục có đường dẫn trong option-files-support file search path

Lỗi : nếu các bác chọn là xuất ra excel mà hiện chưa đang mở chương trình excel thì chạy đến lần thứ chẳng (2, 4, 6, ...) thì chương trình sẽ treo, bạn phải nhấn ctrl-break để tạm thoát ra chương trình và bật task manager lên và end task processes là excel, lần chạy kế sẽ bình thường, nhưng lần tiếp nữa (lần chẳng) sẽ bị nữa, hơi lạ hả các bác :D tôi cũng không hiểu nguyên tại sao, nếu bác PhanThuHuong hay bác nào quan tâm vui lòng xem giúp nguyên nhân tại sao (tôi có ghi chú dòng lệnh gây ra lỗi trên trong source) --> cách khắc phục : các bác bật excel lên rồi chạy tiện ích trên thì không có vấn đề gì.

Mong nhận được sự quan tâm, trau đổi và hướng dẫn của các bác.
Thân.
 

File đính kèm

  • Xac dinh toa do diem trong Acad.zip
    36.4 KB · Đọc: 3,228
Upvote 0
Tôi đã xem qua Project của anh, phải công nhận là tác giả có kiến thức về VBA for AutoCad rất giỏi.
Tôi chưa có thời gian để test nhiều lần nhưng tôi nghĩ chương trình hoạt động tốt, có thể lỗi là do lỗi tràn bộ nhớ. Các biến đối tượng thủ của anh không đặt là Nothing khi chạy xong thủ tục (để giải phóng bộ nhớ cho Window). Việc chạy nhiều thủ tục như vậy dễ gây tràn bộ nhớ, đặc biệt là đối tượng ExcelApp chiếm bộ nhớ khá lớn.

Anh thử bổ sung xem sao.

--------
Ngoài lề 1 chút (se xóa sau): Tôi có mấy anh bạn làm trong Tedy South nhưng làm về lĩnh vực địa chất như anh Tuấn Anh, anh Tú (mới chuyển đi cùng cả vợ), anh Hòa tầm trên 30 tuổi. Đều người Bắc cả.
 
Upvote 0
Vấn đề liên kết (binding) và chuyển đổi số liệu giữa Excel và AutoCad là rất hay và tiện lợi. Công việc này rất phù hợp với những nghề nghiệp có sử dụng đến cả 2 phần mềm trên như các ngành kỹ thuật đã nêu. Bản thân VBA trong 2 phần mềm hoạt động khá giống nhau, chỉ khác là đối tượng. Vì vậy với những người đã biết về VBA for Excel thì học sang AutoCad cũng nhanh thôi...--=0

- Excel: đối tượng là Cell, Range, worksheet, chart,...

- AutoCad: đối tượng là đoạn thằng, cung tròn, vòng tròn, polyline, chữ, lớp,...


Bạn nào có quan tâm thì nên nghiên cứu phát triển.
 
Upvote 0
Tôi là một người cũng rất quan tâm tới vấn về chuyễn đổi dữ liệu qua lại giữa exel va CAD, bởi vì tôi cũng làm trong nghề kỹ thuật. Cảm ơn bác PhanTuHuong đã gửi cho tôi file vẽ đoạn thảng trong CAD lấy toạ độ từ Exel. Nhưng bác PhanTuHuong ơi sao tôi chạy mà đoạn thẳng cũ không bị xoá đi, máy tôi cài cả CAD14 và CAD2004 khi chạy thì chương trình lại gọi CAD14, CAD2004 chẳng thấy động tĩnh gì. Tôi đang nghiên cứu VBA for CAD, mong các bác giúp đỡ .
 
Upvote 0
PhanTuHuong đã viết:
có thể lỗi là do lỗi tràn bộ nhớ. Các biến đối tượng thủ của anh không đặt là Nothing khi chạy xong thủ tục (để giải phóng bộ nhớ cho Window). Việc chạy nhiều thủ tục như vậy dễ gây tràn bộ nhớ, đặc biệt là đối tượng ExcelApp chiếm bộ nhớ khá lớn.
Cách này không được, nó vẫn xảy ra lỗi trên +-+-+-+ , cái tiện ích nhỏ này do lúc đầu đang nghiên cứu vb nên viết để học, thực ra nó còn một số bất tiện nếu các bác dùng sẽ thấy (nhưng dùng vẫn bình thường /-*+/), vấn đề này có thể dùng lisp khá nhỏ gọn hơn.

Nghe anh PhanTuHuong nói chắc là anh trên 30t? em thì 27t. Chắc là bạn anh làm bên xí nghiệp đường bộ, em thì làm bên xí nghiệp cầu đường,

Việc chuyển đổi dữ liệu qua lại giữa excel và acad, theo tôi nghĩ nếu các bác có kiến thức về lập trình và biết một chút về VB thì cứ tham khảo 2 bài viết Chuyển dữ liệu từ Excel sang AutoCad để vẽ và bài này là có thể hình dung được cách khai báo các đối tượng, ..., ngay cả bác muốn tự động thay đổi số liệu bên excel thì bên acad tự thay đổi / vẽ theo hay ngược lại thì mình chỉ cần xử lý biến cố dữ liệu thay đổi ..._change bên excel, trong đó cập nhật / vẽ lại đối tượng bên acad hay ngược lại.

Cũng khá lâu rồi không có viết gì, nay đọc được một số bài của anh PhanTuHuong thì tự nhiên có "cảm hứng" lại --=0. Lúc trước, đang tự học vb viết được một số cái tiện ích nhỏ, nảy sinh ý nghĩ sao không viết một cái gì đó lớn hơn. Tôi có ý tưởng này : 1 phần mềm vẽ bố trí chung cầu nhịp giản đơn, số liệu đầu vào là một đường tự nhiên vẽ đúng cao độ (trong acad) và tỷ lệ 1/10, tĩnh không thông thuyền, loại dầm, số lượng nhịp, khổ cầu, độ dốc ngang cầu, các thông số xác định đường đỏ (cao độ đỉnh cầu, bán kính đường cong đứng, độ dốc 2 bên cầu, ...). Chương trình sẽ đưa ra một số lựa chọn kết cấu trụ, ..., tự xác định cao độ đáy bệ trụ, mố, tim cầu, cho phép người dùng chọn lại ... Kết quả xuất ra là bản vẽ bố trí chung cầu, mố trụ, khối lượng. Hướng phát triển là có thể vẽ cả bộ hồ sơ cầu.

Tôi thấy nó cũng có khả thi, thuật toán thì tôi cũng hình dung sơ bộ có thể giải quyết được, nhưng làm thì tốn nhiều thời gian quá. Tôi cũng đã viết sơ bộ được đoạn xếp dầm vào đường đỏ, rồi dừng lại đến bây giờ.
 
Upvote 0
thanhlamct82 đã viết:
Cảm ơn bác PhanTuHuong đã gửi cho tôi file vẽ đoạn thảng trong CAD lấy toạ độ từ Exel. Nhưng bác PhanTuHuong ơi sao tôi chạy mà đoạn thẳng cũ không bị xoá đi, máy tôi cài cả CAD14 và CAD2004 khi chạy thì chương trình lại gọi CAD14, CAD2004 chẳng thấy động tĩnh gì. Tôi đang nghiên cứu VBA for CAD, mong các bác giúp đỡ .

Để gọi AutoCad nào ra thì bạn chú ý khai báo trong Tools/References của cửa sổ VBE.

Còn trong trường hợp để xóa đoạn thẳng thì chỉ có tác dụng khi bạn đang mở Excel và AutoCad thôi, còn đã đóng vào thì không được vì biến đối tượng lúc đó sẽ bị mất đi.
 
Upvote 0
Tôi thấy để mở ứng dụng Excel từ AutoCad bằng:

Set AcadApp = CreateObject("AutoCAD.Application")
ExcelApp.Visible = True
AppActivate ExcelApp.Caption
ExcelApp.Workbooks.Add

thì thấy thường chậm hơn khá nhiều khi mình khởi động trực tiếp từ bên ngoài. Nhờ các cao thủ giải thích giúp nhé.
 
Upvote 0
:-= Tôi đã tìm được tài liệu này.
 
Lần chỉnh sửa cuối:
Upvote 0
Theo tôi, cần xác định rõ tính chất ứng dụng, Nếu tính toán dạng bảng nhiều thì chạy CAD từ Excel, còn thiên về vẽ hay xử lý ví dụ như cắt, Union, tính Volume phức tạp thì chạy VBA trong CAD khỏe hơn rỗi xuất dữ liệu ra EXCEL, thậm chí file text cũng được mà.

Còn thì CAD ngốn tài nguyên nhiều hơn Excel, có lẽ chậm???
 
Upvote 0
Tôi nghĩ là do việc khởi tại CreatObject hạn chế phân vùng bộ nhớ trong Window, còn khởi động trực tiếp AutoCad trong Window thì ngon.!$@!!
 
Upvote 0
Em mới viết trang web này được một ngày. Những vấn đề trong đây rất là hay.Nhưng quả thật em chưa biết một chút gì về lập trình VB.Hiện nay em rất muốn vẽ tập hợp các điểm = lệnh po. Toạ độ các điểm được xuất từ excel sang.Các anh có thể hướng dẫn một cách cụ thể nhất được không
 
Upvote 0
Muốn hiểu được công việc này, bạn phải tìm hiểu về VB, VBA cái đã. Còn các ví dụ liên quan thì đã có nhiều ví dụ rồi.
 
Upvote 0
Cho Tôi hỏi các bạn, để xác định hàng cuối cùng chứa dữ liệu trong Excell thi dung ham gi trong VB?
 
Upvote 0
bbtt đã viết:
Cho Tôi hỏi các bạn, để xác định hàng cuối cùng chứa dữ liệu trong Excell thi dung ham gi trong VB?

Bạn nghiên cứu Application.WorksheetFunction.Tên hàm trong VBA nhé.
 
Upvote 0
Mình sử dụng autocad2007, mình tải file" Xac dinh toa do diem trong autocad "
về và chép 2 file này vào thư mục có đường dẫn trong option-files-support file search path
nhưng khi đánh lệnh tdd thì autocad báo lỗi
1-11.jpg


không biết lỗi chr() là lỗi gì và cách khắc phục như thế nào? Thanks
 
Upvote 0
Hàm chr(10) là trả về khoảng trắng
Nếu thế thì bạn thử thay
& chr(10) &
bằng
& " " &

xem được không???, nếu không thì là lỗi khác
 
Upvote 0
Bạn kiểm tra xem đối tượng đó có chấp nhận khoảng trắng ko? Nếu được thì post phần code lên?
 
Upvote 0
tigertiger đã viết:
Hàm chr(10) là trả về khoảng trắng
Nếu thế thì bạn thử thay
& chr(10) &
bằng
& " " &

xem được không???, nếu không thì là lỗi khác

Hoặc bạn xóa lun đoạn này

PHP:
.....................  & chr(10) & ............

Thế nhé
 
Upvote 0
Bác PhanThuHuong có vẻ quan tâm đến việc chuyển dữ liệu qua lại giữa acad và excel, hưởng ứng với bác là tiện ích xác định tọa độ các điểm trong acad, số liệu có thể xuất thẳng ra acad hay excel

Cách dùng : file lisp dùng để load macro này lên, các bác phải chép 2 file này vào thư mục có đường dẫn trong option-files-support file search path

Lỗi : nếu các bác chọn là xuất ra excel mà hiện chưa đang mở chương trình excel thì chạy đến lần thứ chẳng (2, 4, 6, ...) thì chương trình sẽ treo, bạn phải nhấn ctrl-break để tạm thoát ra chương trình và bật task manager lên và end task processes là excel, lần chạy kế sẽ bình thường, nhưng lần tiếp nữa (lần chẳng) sẽ bị nữa, hơi lạ hả các bác :D tôi cũng không hiểu nguyên tại sao, nếu bác PhanThuHuong hay bác nào quan tâm vui lòng xem giúp nguyên nhân tại sao (tôi có ghi chú dòng lệnh gây ra lỗi trên trong source) --> cách khắc phục : các bác bật excel lên rồi chạy tiện ích trên thì không có vấn đề gì.

Mong nhận được sự quan tâm, trau đổi và hướng dẫn của các bác.
Thân.

Lỗi:> can't find project or library rồi tự động mở ct microsoft Visual basic! ??
 
Upvote 0
Web KT
Back
Top Bottom