Đến nội dung


Hình ảnh
- - - - -

Ứng dụng VBA Automation trong việc trao đổi dữ liệu giữa Excel với Autocad


  • Please log in to reply
33 replies to this topic

#21 svba1608

svba1608

    Tưởng Thị Tú Khuyên

  • Moderator
  • PipPipPipPipPipPipPip
  • 601 Bài viết
Điểm đánh giá: 620 (tốt)

Đã gửi 06 September 2009 - 08:56 PM

Em có thể tải bài viết và ví dụ xuống nghiên cứu, vì ảnh do bị photobucket xoá mất.

2 tài liệu trong topic: "Tự động hoá thiết kế trong AutoCad từ VB6, Hướng dẫn tạo exe, dll,..." đã bị lỗi "Not Found. The requested URL /vb6exeacad.rar was not found on this server."
Thầy có thể up lại được không?
  • 0
http://khuyen.space

#22 phantuhuong

phantuhuong

    biết dimstyle

  • Moderator
  • PipPipPipPipPip
  • 383 Bài viết
Điểm đánh giá: 200 (khá)

Đã gửi 06 September 2009 - 11:12 PM

2 tài liệu trong topic: "Tự động hoá thiết kế trong AutoCad từ VB6, Hướng dẫn tạo exe, dll,..." đã bị lỗi "Not Found. The requested URL /vb6exeacad.rar was not found on this server."
Thầy có thể up lại được không?


Em kiểm tra lại nhé, tôi đã up lại rồi. :s_big:
  • 1
Bồi dưỡng Excel & VBA cho các đơn vị ở Hà Nội và khu vực lân cận

Từng bước loại đồ Tàu ra khỏi cuộc sống!


#23 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 24 January 2010 - 10:39 AM

Không có ý chỉ trích gì bác nhưng tôi nghĩ trong diễn đàn này không nhiều người có thể thử (chỉ mới thử, chưa nói là hiểu...) được cái ứng dụng của bác.
Vậy nên tôi nghĩ bác nên giúp mọi người tiếp cận với VBA từ những VD đơn giản thôi.
Bác thả một cái bom xuống, mọi người lóa mắt với ù tai hết. :undecided:

Chào bác Phantuhuong
Quả thật Tue_NV cũng đồng tình với ý kiến với bác vndesperados.
Mình là người đi học cái này thôi, kiến thức về VBA chỉ mới hiểu, gọi là sơ sơ nên đứng trên góc độ này đúng là loá mắt, ù tai và choáng ngợp trước những điều thật hay mà VBA có thể làm được (Tue_NV đã thử tiện ích vẽ hình trụ hố khoan của bác Phantuhuong).
Quả thật nó rất hay bác ạ. Cảm ơn bác đã chia sẻ

Tue_NV chỉ muốn bắt đầu bằng những ví dụ thật giản đơn thôi bác ạ.
Em chỉ mới biết cách vào VBA trong CAD -> Tool -> Marco -> Visual Basic Edittor -> và soạn thảo chương trình ở đó. Các hàm và cú pháp Developer Help để đọc (ActiveX and VBA reference)
Còn cách chạy Run thì chưa biết bác ạ.

Bác có thể chỉ cho em 1 ví dụ nho nhỏ thôi, đơn giản thôi, cách viết và cách chạy (Run) 1 chương trình VBA ở trong CAD như thế nào để em tập tò học theo với.

Vài tâm sự của một người chưa biết gì VBA. Mong các bác đừng cười
Cảm ơn bác Phantuhuong cùng các bác đã chia sẻ kiến thức và kinh nghiệm thật bổ ích

Thanks for shared
Thank you very much
  • 0

#24 thanhlamct

thanhlamct

    biết lệnh offset

  • Members
  • PipPipPip
  • 176 Bài viết
Điểm đánh giá: 70 (tàm tạm)

Đã gửi 09 February 2010 - 02:04 PM

Em cũng mê món VBA lắm, nhưng chưa có thời gian ngâm cứu, chỉ mới tìm các tài liệu về VBA.
Em gửi các bác file em sưu tầm để các bác tham khảo:
http://www.cadviet.c...and_autocad.pdf
  • 1

#25 canhchimma

canhchimma

    Chưa sử dụng CAD

  • Members
  • Pip
  • 3 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 01 March 2010 - 07:22 PM

Ai có tài liệu chi tiết không cho mình xin 1 bản: YM: canhchimma@yahoo.com

Mình cảm ơn rất nhiều.
  • 0

#26 nemoxinh

nemoxinh

    Chưa sử dụng CAD

  • Members
  • Pip
  • 1 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 16 February 2012 - 12:00 PM

Thank.
  • 0

#27 mechatronics

mechatronics

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 April 2012 - 08:59 PM

Để so sánh giữa 2 môi trường, tôi thực hiện bài toán đơn giản nhất cho dễ hiểu. Hai thủ tục viết trong Excel và AutoCad như sau:


Trong Excel

Public AcadApp As AcadApplication

Sub Hinh_Tru_Excel()
Dim i As Integer
Dim AcadMo As AcadModelSpace
Dim AcadUt As AcadUtility
Dim DiemDauP As Variant 'Diem dau tien de ve
Dim DiemBaoP(0 To 11) As Double 'Diem bao phan to mat cat
'Khai bao ghi ky hieu Ten lop
Dim GhiTenlopP(0 To 2) As Double
Dim Tenlop As String
Dim TenlopT As AcadText
'Khai bao ghi do sau lop
Dim GhiDosauP(0 To 2) As Double
Dim DosauT As AcadText
'Khai bao To mat cat
Dim MatcatH As AcadHatch
Dim VongbaoPL(0) As AcadPolyline
'Khai bao noi dung Hinh tru
Dim HinhTruP(0 To 2) As Double
Dim HinhTruT As AcadText
'Khai bao ty le dung Hinh tru
Dim TLdung As Single
Dim TLdungP(0 To 2) As Double
Dim TLdungT As AcadText
'Khai bao chieu rong cua phan To ky hieu dia tang va Pi
Const Chieurong = 10: Const Pi = 3.14159
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Call KhoidongAutoCad
'Thiet lap font ".VnArial" cho kieu "Standard"
Set TxtStyleObj = AcadApp.ActiveDocument.TextStyles.Item("Standard")
TxtStyleObj.SetFont ".VnArial", False, False, 0, 34
'Xac dinh Ty le dung
TLdung = Val(ThisWorkbook.Sheets("Khai bao").Range("J3"))
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set AcadMo = AcadApp.ActiveDocument.ModelSpace
Set AcadUt = AcadApp.ActiveDocument.Utility
DiemDauP = AcadUt.GetPoint(, "Vao vi tri dau tien:")
'Ghi noi dung ten Hinh tru va Ty le dung
HinhTruP(0) = DiemDauP(0) + 8
HinhTruP(1) = DiemDauP(1) + 4
Set HinhTruT = AcadMo.AddText("HINH TRU HO KHOAN", HinhTruP, 1.5)
TLdungP(0) = HinhTruP(0) + 5
TLdungP(1) = HinhTruP(1) - 2.5
Set TLdungT = AcadMo.AddText("Tû lÖ ®øng: 1/" & TLdung, TLdungP, 1)
TLdungT.ObliqueAngle = 0.15
DiemBaoP(0) = DiemDauP(0)
DiemBaoP(1) = DiemDauP(1)
'Tao vong lap duyet qua tung lop
With ThisWorkbook.Worksheets("Khai bao").Range("B2")
i = 1
Do
'Xac dinh do chenh sau giua cac lop dat
Chenhsau = (.Offset(i - 1, 1) - .Offset(i, 1)) * 1000 / TLdung
'Xac dinh cac diem bao va ve duong Polyline
DiemBaoP(3) = DiemBaoP(0) + Chieurong: DiemBaoP(4) = DiemBaoP(1)
DiemBaoP(6) = DiemBaoP(3): DiemBaoP(7) = DiemBaoP(4) + Chenhsau
DiemBaoP(9) = DiemBaoP(6) - Chieurong: DiemBaoP(10) = DiemBaoP(7)
Set VongbaoPL(0) = AcadMo.AddPolyline(DiemBaoP)
VongbaoPL(0).Closed = True 'Kep kin duong Polyline
VongbaoPL(0).Color = acRed
'Ghi ten cac lop dat
GhiTenlopP(0) = DiemBaoP(3) + 2
GhiTenlopP(1) = DiemBaoP(4) + Chenhsau / 2
Tenlop = "Líp " & .Offset(i, 0) & ": " & .Offset(i, 2)
Set TenlopT = AcadMo.AddText(Tenlop, GhiTenlopP, 0.8)
'Ghi do sau lop
GhiDosauP(0) = DiemBaoP(6) + 0.5
GhiDosauP(1) = DiemBaoP(7)
Set DosauT = AcadMo.AddText(FormatNumber(.Offset(i, 1), 1), GhiDosauP, 1)
DosauT.Color = acRed
'To ky hieu mat cat dia tang
Set MatcatH = AcadMo.AddHatch(1, .Offset(i, 4), True)
MatcatH.PatternScale = .Offset(i, 5)
MatcatH.PatternAngle = .Offset(i, 6) * Pi / 180
MatcatH.AppendOuterLoop (VongbaoPL)
MatcatH.Evaluate: MatcatH.Update
'Gan diem de sang lop moi
DiemBaoP(0) = DiemBaoP(9)
DiemBaoP(1) = DiemBaoP(10)

i = i + 1
Loop Until IsEmpty(.Offset(i, 0))
End With
AcadApp.ZoomAll
'Xoa bo bien doi tuong
Set AcadApp = Nothing
Set AcadMo = Nothing
Set AcadUt = Nothing
End Sub

Trong AutoCad

Public ExcelApp As Excel.Application
Public Const Tenfile = "D:\Khoahoc2008\Hinhtru.xls"

Sub VeHinhTru_AutoCad()
Dim i As Integer
Dim AcadMo As AcadModelSpace
Dim AcadUt As AcadUtility
Dim DiemDauP As Variant 'Diem dau tien de ve
Dim DiemBaoP(0 To 11) As Double 'Diem bao phan to mat cat
'Khai bao ghi ky hieu Ten lop
Dim GhiTenlopP(0 To 2) As Double
Dim Tenlop As String
Dim TenlopT As AcadText
'Khai bao ghi do sau lop
Dim GhiDosauP(0 To 2) As Double
Dim DosauT As AcadText
'Khai bao To mat cat
Dim MatcatH As AcadHatch
Dim VongbaoPL(0) As AcadPolyline
'Khai bao noi dung Hinh tru
Dim HinhTruP(0 To 2) As Double
Dim HinhTruT As AcadText
'Khai bao ty le dung Hinh tru
Dim TLdung As Single
Dim TLdungP(0 To 2) As Double
Dim TLdungT As AcadText
'Khai bao chieu rong cua phan To ky hieu dia tang va Pi
Const Chieurong = 10: Const Pi = 3.14159
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Khoi dong Excel
Call KhoidongExcel
TLdung = Val(ExcelApp.Sheets("Khai bao").Range("J3"))
'Thiet lap font ".VnArial" cho kieu "Standard"
Set TxtStyleObj = ActiveDocument.TextStyles.Item("Standard")
TxtStyleObj.SetFont ".VnArial", False, False, 0, 34
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Set AcadMo = ActiveDocument.ModelSpace
Set AcadUt = ActiveDocument.Utility
DiemDauP = AcadUt.GetPoint(, "Vao vi tri dau tien:")
'Ghi noi dung ten Hinh tru va Ty le dung
HinhTruP(0) = DiemDauP(0) + 8
HinhTruP(1) = DiemDauP(1) + 4
Set HinhTruT = AcadMo.AddText("HINH TRU HO KHOAN", HinhTruP, 1.5)
TLdungP(0) = HinhTruP(0) + 5
TLdungP(1) = HinhTruP(1) - 2.5
Set TLdungT = AcadMo.AddText("Tû lÖ ®øng: 1/" & TLdung, TLdungP, 1)
TLdungT.ObliqueAngle = 0.15
DiemBaoP(0) = DiemDauP(0)
DiemBaoP(1) = DiemDauP(1)

With ExcelApp.Worksheets("Khai bao").Range("B2")

'Tao vong lap qua tung diem
i = 1
Do
'Xac dinh do chenh sau giua cac lop dat
Chenhsau = (.Offset(i - 1, 1) - .Offset(i, 1)) * 1000 / TLdung
'Xac dinh cac diem bao va ve duong Polyline
DiemBaoP(3) = DiemBaoP(0) + Chieurong: DiemBaoP(4) = DiemBaoP(1)
DiemBaoP(6) = DiemBaoP(3): DiemBaoP(7) = DiemBaoP(4) + Chenhsau
DiemBaoP(9) = DiemBaoP(6) - Chieurong: DiemBaoP(10) = DiemBaoP(7)
Set VongbaoPL(0) = AcadMo.AddPolyline(DiemBaoP)
VongbaoPL(0).Closed = True 'Kep kin duong Polyline
VongbaoPL(0).color = acRed
'Ghi ten cac lop dat
GhiTenlopP(0) = DiemBaoP(3) + 2
GhiTenlopP(1) = DiemBaoP(4) + Chenhsau / 2
Tenlop = "Líp " & .Offset(i, 0) & ": " & .Offset(i, 2)
Set TenlopT = AcadMo.AddText(Tenlop, GhiTenlopP, 0.8)
'Ghi do sau lop
GhiDosauP(0) = DiemBaoP(6) + 0.5
GhiDosauP(1) = DiemBaoP(7)
Set DosauT = AcadMo.AddText(FormatNumber(.Offset(i, 1), 1), GhiDosauP, 1)
DosauT.color = acRed
'To ky hieu mat cat dia tang
Set MatcatH = AcadMo.AddHatch(1, .Offset(i, 4), True)
MatcatH.PatternScale = .Offset(i, 5)
MatcatH.PatternAngle = .Offset(i, 6) * Pi / 180
MatcatH.AppendOuterLoop (VongbaoPL)
MatcatH.Evaluate: MatcatH.Update
'Gan diem de sang lop moi
DiemBaoP(0) = DiemBaoP(9)
DiemBaoP(1) = DiemBaoP(10)

i = i + 1
Loop Until IsEmpty(.Offset(i, 0))
End With
ZoomAll
'Xoa bo bien doi tuong
Set ExcelApp = Nothing
Set AcadMo = Nothing
Set AcadUt = Nothing

End Sub

Các bạn sẽ thấy hai thủ tục trên giống nhau như 2 chị em sinh đôi! Chính vì vậy bạn sẽ không bị bỡ ngỡ khi chuyển đổi môi trường lập trình VBA


Hình đã gửi
Hình 12: Kết quả vẽ hình trụ hố khoan và một số đối tượng vẽ chính


Một số đối tượng chính trong thủ tục trên được mô tả trong kết quả vẽ hình trụ hố khoan tại hình 12. Trong đó, những đối tượng trong AutoCad quy ước có đuôi chữ hoa P là point, PL là polyline, T là text, L là line,...

3. Kết luận

- Chức năng Automation giúp chúng ta xây dựng các chương trình có khả năng tự động hoá trao đổi dữ liệu giữa các môi trường khác nhau. Sự kết hợp giữa Excel, AutoCad cùng với ngôn ngữ lập trình VBA tích hợp bên trong có thể giải quyết được nhiều bài toán phức tạp khác nhau trong lĩnh vực kỹ thuật.
- Giống như VB6, VBA là ngôn ngữ lập trình tiện dụng phát triển trong nhiều ứng dụng, có khả năng ứng dụng mạnh mẽ trong nhiều ngành nghề, cần được quan tâm đúng mức trong việc dạy và học tin học ứng dụng không chuyên trong các trường Đại học.


sao hình ảnh lỗi hết vậy bạn. t chẳng xem dc gì cả. hix


  • 0

#28 p.bavinh

p.bavinh

    biết zoom

  • Members
  • Pip
  • 14 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 25 May 2013 - 01:47 PM

Tôi có một số code về vba có thể liên hệ giữa autocad và excel. Nếu anh em nào muốn có thể liên lạc với tôi tôi sẽ cho :).

yahoo: phambavinh_ht

email: bavinh.bavinh@gmail.com


  • 0

#29 nguyendan81985

nguyendan81985

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 13 November 2013 - 09:59 PM

cho mình hỏi. làm thế nào để lấy dữ liệu từ Excel để xử lý trong CAD

mình ví dụ thế này: trong VBA CAD có các textbox là L1, L2, L3

trong excel có các cột L1, L2, L3 ở các vị trí A1, B1, C1 tương ứng. vậy làm thế nào để CAD là để gán giá trị từ excel cho CAD. 

chương trình trong CAD có thể đơn giản làm 1 cái msgbox hiển thị giá trị trong cột L1,L2, L3 ....

 

bạn nào biết chỉ giúp nhé. thanks


  • 0

#30 dinhvantrang

dinhvantrang

    biết lệnh copy

  • Members
  • PipPipPip
  • 117 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 14 November 2013 - 07:06 AM

cho mình hỏi. làm thế nào để lấy dữ liệu từ Excel để xử lý trong CAD

mình ví dụ thế này: trong VBA CAD có các textbox là L1, L2, L3

trong excel có các cột L1, L2, L3 ở các vị trí A1, B1, C1 tương ứng. vậy làm thế nào để CAD là để gán giá trị từ excel cho CAD. 

chương trình trong CAD có thể đơn giản làm 1 cái msgbox hiển thị giá trị trong cột L1,L2, L3 ....

 

bạn nào biết chỉ giúp nhé. thanks

Bạn phải kết nối giữa AutoCad và Excel lại với nhau thì mới lấy dữ liệu qua lại với nhau dc.


  • 0

Thanks and Best Regards

Skype : dinhvantrang73


#31 nguyendan81985

nguyendan81985

    biết vẽ circle

  • Members
  • PipPip
  • 30 Bài viết
Điểm đánh giá: -3 (bình thường)

Đã gửi 14 November 2013 - 07:08 AM

Bạn phải kết nối giữa AutoCad và Excel lại với nhau thì mới lấy dữ liệu qua lại với nhau dc.

biết là vậy. nhưng phải làm thế nào ấy. bạn biết thì giúp mình nhé


  • 0

#32 hoanguct

hoanguct

    biết vẽ line

  • Members
  • PipPip
  • 23 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 26 December 2013 - 04:22 PM

Với anh em công trình thì món này ngon củng được roài


  • 0

#33 tuminhphuong

tuminhphuong

    biết pan

  • Members
  • Pip
  • 5 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 14 April 2016 - 09:30 PM

Mình cần học lớp lập trình ứng dụng VBA để lien kết CAD và exell, bạn nào biết ở đâu mở lớp xin chỉ giúp mình.


  • 0

#34 dinhvantrang

dinhvantrang

    biết lệnh copy

  • Members
  • PipPipPip
  • 117 Bài viết
Điểm đánh giá: 26 (tàm tạm)

Đã gửi 14 April 2016 - 11:07 PM

Mình cần học lớp lập trình ứng dụng VBA để lien kết CAD và exell, bạn nào biết ở đâu mở lớp xin chỉ giúp mình.

Nếu cần thì mình dạy online cho bạn nhé.

Add skype mình: dinhvantrang73 hoặc inbox mail: dinhvantrang73@gmail.com


  • 0

Thanks and Best Regards

Skype : dinhvantrang73