Chuyển đến nội dung
Diễn đàn CADViet
phantuhuong

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

Các bài được khuyến nghị

Do nhu cầu tìm hiểu về liên kết dữ liệu giữa Excel và AutoCad, tôi xin giới thiệu mô hình liên kết giữa chúng. Tôi chỉ dẫn cách thực hiện từ VBA Excel và VBA AutoCad để các bạn có thể so sánh, tìm hiểu mối liên kết giữa 2 môi trường một cách toàn diện.

 

 

Tóm tắt: Bài báo này trình bày khả năng tự động hoá trao đổi dữ liệu giữa Excel và AutoCad bởi chức năng Automation của ngôn ngữ lập trình VBA (Visual Basic for Applications) sẵn có trong chúng. Ứng dụng hiệu quả này không chỉ trong lĩnh vực Địa chất công trình (ĐCCT) mà còn hiệu quả đối với các bài toán kỹ thuật khác hay sử dụng Excel và AutoCad, rút ngắn đáng kể thời gian thực hiện và đảm bảo kết quả chính xác.

 

1. Đặt vấn đề

 

VBA là một ngôn ngữ lập trình hướng đối tượng có khả năng phát triển ứng dụng mạnh mẽ với nhiều tính năng phong phú. VBA được tích hợp trong môi trường Office và AutoCad với các chức năng gần tương tự nhau (hình 1, 2).

 

 

Hinh1.jpg

Hình 1: Cửa sổ VBA trong Excel

 

Hinh2.jpg

Hình 2: Cửa sổ VBA trong AutoCad

 

Hinh2.jpg

Hình 3: Giới thiệu công nghệ COM trong trang web của tập đoàn Microsoft

 

Chức năng Automation của VBA là một dạng công nghệ COM (Component Object Model) trong gia đình Microsoft Window, cho phép giao tiếp (hay truyền thông) giữa các phần mềm với nhau. COM là kiến trúc lập trình được phát triển bởi Microsoft, mục đích là tạo ra một công nghệ chuẩn cho phép xây dựng chương trình theo mô hình lắp ghép (component) hay sử dụng các sản phẩm đã được hoàn thiện từ trước theo tiêu chuẩn COM. Automation cho phép một ứng dụng có thể điều khiển các đối tượng trong ứng dụng khác, hoặc gọi các đối tượng mà có thể thực thi bằng những tập lệnh. Ví dụ như có thể điều khiển Excel từ Word hay AutoCad (và ngược lại) giống như thực hiện trực tiếp trên ứng dụng đó.

 

Tại sao tôi chỉ đề cập việc trao đổi dữ liệu giữa hai phần mềm Excel và AutoCad? Bởi vì Excel là phần mềm chuyên về bảng tính và biểu đồ với khả năng tính toán, xử lý dữ liệu tuyệt vời nhất hiện nay nhưng lại yếu về phần đồ hoạ. AutoCad lại là phần mềm vào hàng đầu lĩnh vực đồ hoạ nhưng lại yếu về khả năng tính toán, việc xử lý và quản lý dữ liệu bị hạn chế. Trong khi đó, cả hai phần mềm này đều được sử dụng rộng rãi trong các ngành kỹ thuật, đặc biệt là trong ngành địa chất, trắc địa, mỏ, xây dựng, giao thông, kiến trúc, chế tạo máy,... Việc tạo mối liên kết giữa hai phần mềm trên sẽ khắc phục những mặt hạn chế của chúng, nâng cao khả năng khai thác các phần mềm đó trong chuyên môn. Bản thân hai phần mềm trên đều được tích hợp ngôn ngữ lập trình ứng dụng VBA, một dạng ngôn ngữ lập trình Visual Basic (VB) dễ học, rất phổ biến và đang được giảng dạy trong môn Tin học đại cương của trường Đại học Mỏ Địa chất.

Thông thường, bài toán trong lĩnh vực kỹ thuật được giải quyết theo 3 bước như hình 5.

 

Hinh45.jpg

 

Như trong hình 5, các bước (1), (2) thực hiện trong Excel, còn bước (3) sẽ thực hiện trong AutoCad. Bài toán vẽ hình trụ hố khoan, mặt cắt ĐCCT hay bài toán thiết kế khoan nổ mìn (lĩnh vực khai thác mỏ), vẽ bình đồ trắc dọc (lĩnh vực đo đạc),... có thể sử dụng mô hình trên. Nếu chỉ sử dụng các công cụ sẵn có hoặc lập trình VBA (riêng từng ứng dụng) thì việc tự động hoá chỉ có thể đạt được một phần, còn từ bước (2) sang bước (3) không thực hiện được. Đặc biệt là những bài toán có số lượng dữ liệu lớn sẽ gây vất vả và tốn thời gian để thực hiện công việc trên, trong khi đó sẽ rất đơn giản khi dùng chức năng Automation. Còn nếu chỉ sử dụng VBA AutoCad, VB6, VB.NET, C,... điều khiển AutoCad để thực hiện sẽ phức tạp vì phải xây dựng toàn bộ chương trình tính theo ngôn ngữ lập trình đó, điều này hoàn toàn không dễ thực hiện.

 

2. Kết quả nghiên cứu

 

Trong khuôn khổ bài báo, tôi lấy ví dụ về nội dung chính của chương trình lập hình trụ hố khoan. Để thực hiện được chương trình này, cần phải hiểu được các đối tượng cùng với thuộc tính, phương thức của chúng trong Excel và AutoCad. Công việc xây dựng chương trình được thực hiện đồng thời trong VBA Excel và VBA AutoCad để có sự so sánh trong từng ứng dụng. Các bước xây dựng chương trình như sau:

  • Like 1
  • Vote tăng 5

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

 Bước 1: Khai báo tham chiếu đến thư viện ứng dụng

 

Đầu tiên, cần phải khai báo tham chiếu đến thư viện ứng dụng cần thực hiện bằng cách chọn References trong menu Tools của cửa sổ VBA (hình 1, 2) theo:

- Với VBA Excel: chọn AutoCad 2004 Type Library (hình 6)

- Với VBA AutoCad: chọn Microsoft Excel 11 Object Library (hình 7)

 

Hinh6.jpg

Hình 6: Tham chiếu tới thư viện AutoCad từ VBA trong Excel

 

Giá trị số trong các tham chiếu trên phụ thuộc vào phiên bản Office và AutoCad nên có thể khác nhau giữa các máy tính, ví dụ trên sử dụng AutoCad 2004 và Office 2003. Khi đã khai báo tham chiếu như trên, thư viện đối tượng Excel (hoặc AutoCad) dễ dàng được hiển thị trong cửa sổ VBA AutoCad (hoặc Excel) bởi chức năng trợ giúp Auto List Members. Công việc này rất hữu ích giúp chúng ta dễ dàng điều khiển ứng dụng này từ VBA của ứng dụng khác giống như thực hiện từ chính bản thân chúng.

 

 Bước 2: Xây dựng bảng nhập dữ liệu đầu vào trong Excel

 

Số liệu nhập thực hiện trên bảng tính Excel bao gồm số hiệu, độ sâu, tên các lớp đất đá cùng với ký hiệu địa tầng, tỷ lệ đứng,...(hình 8). Ngoài ra, có thể sử dụng các chức năng sẵn có, các hàm và thủ tục trong VBA Excel để hoàn thiện bảng tính.

 

Hinh7.jpg

Hình 7: Tham chiếu tới thư viện Excel từ VBA trong AutoCad

 

Hinh8.jpg

Hình 8: Bảng nhập giá trị đầu vào và hỗ trợ tên ký hiệu lớp trong Excel

 

 Bước 3: Xây dựng chương trình xử lý, chuyển đổi dữ liệu giữa Excel và AutoCad

 

Đây là nội dung chính của chương trình, trước hết cần phải xây dựng thủ tục khởi động môi trường ứng dụng và xác định đối tượng tham chiếu. Hình 9 và 10 thể hiện nội dung thủ tục khởi động ứng dụng Excel và AutoCad. Các thủ tục đó đều sử dụng phương thức GetObject và CreadObject để tham chiếu và tạo đối tượng ứng dụng Automation để có thể truy cập, điều khiển. Đối tượng của ứng dụng tham chiếu đến là AcadApp (AcadApplication) hay ExcelApp (Excel.Application) mà chúng ta có kết nối và trao đổi dữ liệu giữa hai ứng dụng Excel và AutoCad (hình 11).

 

Hinh9.jpg

Hình 9: Khởi động AutoCad từ VBA Excel

 

Hinh10.jpg

Hình 10: Khởi động Excel từ VBA AutoCad

 

Automation.jpg

Hình 11: Mô hình kết nối giữa Excel và AutoCad qua đối tượng Automation

 

Khi ứng dụng đã được mở, chúng ta có thể tham chiếu đến các đối tượng bên trong ExcelApp (hay AcadApp) như mô tả phía dưới.

- VBA Excel: Ví dụ như để tham chiếu đến đối tượng TextStyle có tên "Standard" trong bản vẽ AutoCad đang kích hoạt (ActiveDocument) thì sử dụng dòng lệnh

 

AcadApp.ActiveDocument.TextStyles.Item("Standard")

 

- VBA AutoCad: Ví dụ như để tham chiếu đến đối tượng ô B2 trong worksheet "Khai bao" thì sử dụng dòng lệnh

 

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

 

Hai dòng lệnh trên sử dụng đối tượng AcadApp và ExcelApp để tham chiếu tới, còn các đối tượng bên trong cùng với phương thức, thuộc tính của chúng được sử dụng như bình thường. Sau đó tiến hành xây dựng thủ tục chuyển dữ liệu từ Excel sang AutoCad từ VBA Excel (hay AutoCad).

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

Để 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

 

 

Hinh12.jpg

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.

  • Vote tăng 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

Ghi chú thêm:

 

- Khởi động Excel từ AutoCad nhanh hơn nhiều so với AutoCad từ Excel (thế mới bực chứ ).

 

- Để linh hoạt hơn, các bạn có thể thay các đối tượng trên bằng Object để không phải phụ thuộc đời các phiên bản Excel, AutoCad (không cần khai báo).

 

- Là cơ sở cho việc phát triển dạng trao đổi dữ liệu giữa các môi trường khác như VB6 với Office, VB6 với AutoCad,...

 

Để hiểu hơn thì bạn copy thư mục dưới đây vào ổ D nhé (nếu không thì đường dẫn sai ---> báo lỗi).

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

Nếu ko có gì trở ngại mong bác post luôn bộ file cho anh em ngâm cứu thì biêt ơn rất nhiều

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
Rất cần ý kiến đóng góp để hoàn thiện (bài báo khoa học mà) mà chưa thấy bác nào phản hồi gì cả?

Bác phantuhuong đã để câu hỏi này rất lâu, bản thân Jin cũng thấy rất khó mà đưa ra ý kiến gì khác

Các ví dụ bác đưa ra đã cho thấy khả năng của VBA trong việc liên kết các loại dữ liệu và sử dụng các hàm hỗ trợ để tạo được nhiều ứng dụng hữu ích.

Mặt cắt địa chất rõ ràng là một ví dụ cụ thể và có tính ứng dụng trong thực tế, khi đi sâu vào nghiên cứu chắc chắc sẽ đem lại nhiều ứng dụng có sức mạnh hơn nữa

Tuy nhiên có một nhược điểm sẽ gây khó khăn cho các bạn mới bắt đầu vào công tác lập trình VBA cho CAD, đó là phải tìm hiểu được các hàm hỗ trợ

Ví dụ:

Set AcadMo = AcadApp.ActiveDocument.ModelSpace
Set AcadUt = AcadApp.ActiveDocument.Utility
DiemDauP = AcadUt.GetPoint(, "Vao vi tri dau tien:")

Trong đoạn mã lấy ra từ chương trình của bác, thì nguyên 3 dòng này đã là 3 dòng rất lạ mắt, tất nhiên tìm hiểu nó là việc bắt buộc của các đồng chí muốn viết các ứng dụng, nhưng nó không dễ dàng cho những người chỉ muốn thử thôi

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

Cám ơn anh Jin Yong, đây là kiến thức tương liên quan đến cả VBA trong Excel và AutoCad nên muốn sử dụng thì phải nắm được cách thức lập trình trong 2 môi trường này. Hiện nay, môn Tự động hoá thiết kế cầu đường của trường ĐH GTVT đang dạy về nội dung này.

  • Vote tăng 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

Cảm ơn bạn rất nhiều đã chia sẻ kinh nghiệm! mình rất thích làm những ứng dụng như thế này nhưng vì kiến thức về lập trình quá nông cạn nên không thể làm nổi nếu có điều kiện mong bạn chỉ dạy thêm

nhân đây mình muốn hỏi có cách nào để đọc hoặc ghi một file định dạng MDB trong VBA của ACAD được không? xin cảm ơn bạn trướ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
Cảm ơn bạn rất nhiều đã chia sẻ kinh nghiệm! mình rất thích làm những ứng dụng như thế này nhưng vì kiến thức về lập trình quá nông cạn nên không thể làm nổi nếu có điều kiện mong bạn chỉ dạy thêm

nhân đây mình muốn hỏi có cách nào để đọc hoặc ghi một file định dạng MDB trong VBA của ACAD được không? xin cảm ơn bạn trước :) :)

 

 

MDB là một file Cơ Sở Dữ Liệu được tạo bởi chương trình MS Access (Access Database - 2003 and earlier). Trong một file MDB thông thường sẽ có các table, diagram, và có cả các macro, function, sub viết bằng VBA.

Ở đây chúng ta có lẽ chỉ quan tâm đến dữ liệu của file MDB với các table.

Và muốn thao tác được với file MDB thì chúng ta cần tên các bảng, cấu trúc các table, kiểu dữ liệu các fields trong table...

Về việc viết code bằng VBA để thạo tác với file MDB cũng giống như code VB với bất kỳ một SCDL nào

Bạn có thể tham khảo ở các URL sau:

http://www.functionx.com/vbaccess/Lesson04d.htm

http://www.java2s.com/Code/VBA-Excel-Acces...talogAccess.htm

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
Rất cần ý kiến đóng góp để hoàn thiện (bài báo khoa học mà) mà chưa thấy bác nào phản hồi gì cả?

 

 

Xin lỗi bác, bác đặc tiêu đề bài báo khoa học nghe to tát quá nên không dám đọc vì sợ không hiểu.

 

Từ đầu năm 2005 khi làm việc ở bộ phận phát triển ứng dụng của Phân viện Quy họach đô thị Nông Thôn Miền Nam, chúng tôi đã phát triển một ứng dụng được gọi là

Standarising symbol system for urban planning - Chuẩn hóa hệ thống ký hiệu trong bản vẽ quy họach

Trong này chúng tôi làm hòan tòan bằng VBA với CSDL là MS Access, các report làm bằng Excel...

Tuy nhiên tôi thấy nó có rất nhiều hạn chế.

Không hòan tòan tương thích với tất cả các phiên bản CAD cũng như phiên bản MS Office hoặc thiếu file DLL của Windows

 

...

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. :)

http://www.java2s.com/Code/VBA-Excel-Acces...atalogExcel.htm

 

Còn nói về AutoCAD với Excel thì mọi người có thể xem thông tin tại đây

 

http://www.cadig.com/products/

http://www.cadtool.net/

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
Xin lỗi bác, bác đặc tiêu đề bài báo khoa học nghe to tát quá nên không dám đọc vì sợ không hiểu.

 

Từ đầu năm 2005 khi làm việc ở bộ phận phát triển ứng dụng của Phân viện Quy họach đô thị Nông Thôn Miền Nam, chúng tôi đã phát triển một ứng dụng được gọi là

Standarising symbol system for urban planning - Chuẩn hóa hệ thống ký hiệu trong bản vẽ quy họach

Trong này chúng tôi làm hòan tòan bằng VBA với CSDL là MS Access, các report làm bằng Excel...

Tuy nhiên tôi thấy nó có rất nhiều hạn chế.

Không hòan tòan tương thích với tất cả các phiên bản CAD cũng như phiên bản MS Office hoặc thiếu file DLL của Windows

 

...

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. :)

http://www.java2s.com/Code/VBA-Excel-Acces...atalogExcel.htm

 

Còn nói về AutoCAD với Excel thì mọi người có thể xem thông tin tại đây

 

http://www.cadig.com/products/

http://www.cadtool.net/

 

Cám ơn anh vndesperados đã góp ý.

 

Mục tiêu của bài này là xây dựng phương thức trao đổi dữ liệu tự động giữa 2 môi trường Excel và AutoCad và hiểu hơn về bản chất đó. Có nhiều người làm được và còn rất nhiều người chưa làm được công việc đó cho dù rất cần. Trong khi đó tài liệu hướng dẫn trên mạng thì rất hạn chế, hướng dẫn rất sơ sài. Với bài này, ai mới học VBA thì cũng khó hiểu thật, nhưng đã có 1 chút kiến thức VBA Excel và Cad thì tôi tin là cũng không khó gì cả. Hình ảnh đầy đủ, mã nguồn mở, các bước thực hiện được giải thích cụ thể, và quan trọng nhất là không phải ai cũng chia sẻ kiến thức của mình. Tôi cũng như phần lớn thành viên đều không phải là dân lập trình chuyên nghiệp nhưng chỉ cần khai thác ở mức độ đó là tốt rồi.

 

Còn cái đo đỏ ở trên thì bài 4 tôi đã đề cập, không can thiệp quá sâu vào Excel hay Cad thì biến Object giúp hạn chế giới hạn các version.

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

Sao mình thử chạy chuơng trình vẽ hình trụ sao ko chạy đc nhỉ ???

Nó báo lỗi .. loi_5.jpg

và gì mà missing autocad2004 type library..

Khắc phục ntn đâ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
Sao mình thử chạy chuơng trình vẽ hình trụ sao ko chạy đc nhỉ ???

Nó báo lỗi .. loi_5.jpg

và gì mà missing autocad2004 type library..

Khắc phục ntn đây?

Mình chưa thử, nhưng thấy viết sai chính tả rồi.

Bạn thử sửa cho đúng chữ AcadApplication xem sao?

hiện nay như hình bạn post lên thì bị thừa 1 chữ 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
Cám ơn anh Jin Yong, đây là kiến thức tương liên quan đến cả VBA trong Excel và AutoCad nên muốn sử dụng thì phải nắm được cách thức lập trình trong 2 môi trường này. Hiện nay, môn Tự động hoá thiết kế cầu đường của trường ĐH GTVT đang dạy về nội dung này.
chào mọi nguời em đang học năm cuối của bô môn tự động hóa trường DHGT.và đc tiếp súc với VBA trong excl và cad.theo em ứng dụng này rất hay và tiện ích nhất là ai theo học ngành học như em.và em cũng đã đi sâu vào nó để tiến tới làm đồ án tốt nghiệp về phần này.em mong bác hướng đưa thêm các ứng dụng khác nữa.cảm ơn bá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
Cám ơn anh Jin Yong, đây là kiến thức tương liên quan đến cả VBA trong Excel và AutoCad nên muốn sử dụng thì phải nắm được cách thức lập trình trong 2 môi trường này. Hiện nay, môn Tự động hoá thiết kế cầu đường của trường ĐH GTVT đang dạy về nội dung này.
chào mọi nguời em đang học năm cuối của bô môn tự động hóa trường DHGT.và đc tiếp súc với VBA trong excl và cad.theo em ứng dụng này rất hay và tiện ích nhất là ai theo học ngành học như em.và em cũng đã đi sâu vào nó để tiến tới làm đồ án tốt nghiệp về phần này.em mong bác hướng đưa thêm các ứng dụng khác nữa.cảm ơn bá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
Hinh2.jpg

 

Thầy Hướng có thể up lại các hình ảnh giùm em được không?

Em đang cần nghiên cứu liên kết giữa cad và excel để làm đồ án tổng hợp cấp nước.

Rất tiếc là hình ảnh đã bị mất.

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
Thầy Hướng có thể up lại các hình ảnh giùm em được không?

Em đang cần nghiên cứu liên kết giữa cad và excel để làm đồ án tổng hợp cấp nước.

Rất tiếc là hình ảnh đã bị mất.

 

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.

  • Vote tăng 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
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?

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
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:

  • Vote tăng 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
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

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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×