PDA

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



PhanTuHuong
18-03-07, 09:22 AM
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:


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


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

bkxd98
08-04-07, 12:10 AM
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.

PhanTuHuong
08-04-07, 01:43 AM
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ả.

PhanTuHuong
08-04-07, 09:44 PM
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.

thanhlamct82
09-04-07, 01:15 PM
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 đỡ .

bkxd98
09-04-07, 09:05 PM
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ẽ (http://www.giaiphapexcel.com/forum/showthread.php?t=418) 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ờ.

PhanTuHuong
14-04-07, 01:40 PM
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.

PhanTuHuong
07-05-07, 05:24 PM
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é.

duongsatdn
02-07-07, 08:36 AM
:-= Tôi đã tìm được tài liệu này.

LearnExcel
17-08-07, 08:30 AM
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???

PhanTuHuong
17-08-07, 11:47 AM
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.!$@!!

tuan49xd5
13-10-07, 10:56 AM
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

PhanTuHuong
13-10-07, 07:57 PM
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.

bbtt
23-11-07, 03:44 PM
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?

PhanTuHuong
24-11-07, 12:39 AM
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é.

SONGBA
16-01-08, 11:37 AM
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
http://i144.photobucket.com/albums/r175/SONGBA/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

tigertiger
16-01-08, 02:10 PM
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

Nguyen Nhat Minh
17-01-08, 10:55 AM
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?

tigertiger
17-01-08, 12:49 PM
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



..................... & chr(10) & ............


Thế nhé

duyhung_sam
04-05-08, 04:08 PM
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! ??

duyhung_sam
04-05-08, 04:22 PM
Nguyên văn bởi tigertiger
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



..................... & chr(10) & ............


Thế nhé
Mình thử thay
" & chr(10) &
bằng
& " " &
chạy lại thì xuất hiện bảng> nhưng khi thay đổi các thông số trong bảng thì lại báo lỗi! VD tỷ lệ bản vẽ 1/10 thay bằng 1/100 thì lại báo lỗi can't find project or library
>>>
If Mid(Txt, i, 1) = "." Then

trandung52
22-02-10, 06:23 PM
sao chuyên mục này dừng tại đây nhỉ ? đang quan tâm mong các pro tiếp tục.... -->

hùng bệu
31-10-11, 09:57 AM
cảm ơn các bác đã giúp đỡ, nhưng e muốn chuyển excel sang autocad với phông và chữ hoàn toàn của autocad có được không các bác. mong các bác giúp đỡ .

bravery10
03-01-12, 06:52 PM
Em sử dụng đoạn mã mở Autocad bằng Excel trước đây thì nó chạy đúng, bây h chạy thi nó báo là "Microsoft Excel is waiting for another application to complete an OLE action" bây h em xử lý thế nào cho nó chạy đúng hả anh? Nếu như mở cad rồi thì nó chạy được nội dung phần sau, tức là lỗi ở câu lệnh Set AcadApp = CreateObject("AutoCAD.Application")

PhanTuHuong
03-01-12, 07:00 PM
Em sử dụng đoạn mã mở Autocad bằng Excel trước đây thì nó chạy đúng, bây h chạy thi nó báo là "Microsoft Excel is waiting for another application to complete an OLE action" bây h em xử lý thế nào cho nó chạy đúng hả anh? Nếu như mở cad rồi thì nó chạy được nội dung phần sau, tức là lỗi ở câu lệnh Set AcadApp = CreateObject("AutoCAD.Application")

Lỗi này bí hiểm (thỉnh thoảng mới bị thôi-thế mới mệt), tôi cũng chưa tìm ra. Điều khiển Excel từ AutoCad hoặc ngược lại, từ VB6 với Excel... cũng bị vậy.

bravery10
09-04-12, 01:06 PM
Lỗi này bí hiểm (thỉnh thoảng mới bị thôi-thế mới mệt), tôi cũng chưa tìm ra. Điều khiển Excel từ AutoCad hoặc ngược lại, từ VB6 với Excel... cũng bị vậy.

Em viết VBA bằng Excel 2010 64bit, sau đó cài lại bản 32bit rồi chạy VBA trên thì lỗi bây h cài lại bản 64 bit nó lại chạy bình thường, không lỗi gì cả. Chắc vấn đề là cái file DLL của 2 bản khác nhau.

PhanTuHuong
10-04-12, 08:41 AM
Em viết VBA bằng Excel 2010 64bit, sau đó cài lại bản 32bit rồi chạy VBA trên thì lỗi bây h cài lại bản 64 bit nó lại chạy bình thường, không lỗi gì cả. Chắc vấn đề là cái file DLL của 2 bản khác nhau.

Theo tôi nghĩ lỗi này không phải do 32 hay 64 bít vì trường hợp này đã bị từ lâu rồi (tôi chỉ dùng các bản 32 bit thôi), và thỉnh thoảng mới báo lỗi chứ không phải liên tục.

tranduyphucvt
10-05-12, 10:41 AM
[QUOTE=PhanTuHuong;10425]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:


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


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[/QUOTE
nhờ các cao thủ viết cho một đoạn mã chuyển (link để sửa dữ liệu bên excel thi bên cad tu cập nhật, không phải dán ) bảng tính excel sang autocad mà nền excel tương thích với nền Autocad. vì mình link bang tinh sang autocad thì có màu trắng không đẹp khi định dạng màu cho bảng tính excel màu đen cho cùng màu autocad thi in ra giấy có màu đen. thanks mấy cao thủ trước

dinhvantrang
03-07-12, 02:05 PM
Các bác cho em hỏi,việc liên kết giữa Cad và Excel thì rất tiện,nhưng hiện nay em muốn dùng VBA để đọc dữ liệu trong file .txt thì bác nào có tài liệu hướng dẫn hay ví dụ nho nhỏ có thể đưa lên cho em tham khảo dc không vậy.
Rất cảm ơn mọi người!

puppystyle
06-01-13, 03:19 PM
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:


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


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
bác hướng dẫn hay thì hay thật
nhưng vs những ng chỉ vừa mới đc tiếp xúc với CAD và còn chưa bao giờ nghe tới VBA như em thì chả hiểu 1 tí gì luôn >.<
bây giờ em đang muốn chuyển 1 vài biểu đồ từ excel qa CAD hoặc các bảng số liệu từ excel qa để tự vẽ cũng đc mà muốn bắt trc mà cũng khó + khổ qá :((

PhanTuHuong
06-01-13, 09:37 PM
bác hướng dẫn hay thì hay thật
nhưng vs những ng chỉ vừa mới đc tiếp xúc với CAD và còn chưa bao giờ nghe tới VBA như em thì chả hiểu 1 tí gì luôn >.<
bây giờ em đang muốn chuyển 1 vài biểu đồ từ excel qa CAD hoặc các bảng số liệu từ excel qa để tự vẽ cũng đc mà muốn bắt trc mà cũng khó + khổ qá :((

Ít nhất là bạn phải đọc cái tiêu đề thì mới phàn nàn nhé, đã không biết thì phải học, sao lại kêu ca???

puppystyle
07-01-13, 09:33 PM
Ít nhất là bạn phải đọc cái tiêu đề thì mới phàn nàn nhé, đã không biết thì phải học, sao lại kêu ca???

thì mỗi lần này chắc động vào 1 tí thôi
còn sau này chắc gì đã động nữa
học rồi lại quên bác ak :D, trí nhớ e kém lắm
e chỉ viết đơn giản về CAD vs excel thôi, chứ có đi sâu vào đâu mà biết đc tường cả bên trong vs cái quan hệ của nó, bác cũng tl khó e qá >.<