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

#1 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 16 June 2008 - 11:22 AM

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


Hình đã gửi
Hình 1: Cửa sổ VBA trong Excel

Hình đã gửi
Hình 2: Cửa sổ VBA trong AutoCad

Hình đã gửi
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.

Hình đã gửi


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:
  • 5
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!


#2 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 16 June 2008 - 11:34 AM

 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)

Hình đã gửi
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.

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

Hình đã gửi
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).

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

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

Hình đã gửi
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).
  • 0
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!


#3 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 16 June 2008 - 11:47 AM

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

  • 4
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!


#4 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 16 June 2008 - 11:52 AM

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).
  • 0
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!


#5 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 16 June 2008 - 12:12 PM

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
  • 0

#6 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 16 June 2008 - 12:27 PM

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


Phần tài liệu tải xuống đây:

http://www.cadviet.c...oahoc2008_1.rar
  • 5
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!


#7 xuanhai

xuanhai

    biết vẽ line

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

Đã gửi 17 June 2008 - 02:15 PM

sao tui thu mai ma ko duoc vay ,lam on noi ro hon duoc ko

Chép file vào ổ D, mở Excel, nhấn nút là chạy thôi. Đơn giản mà.
  • 0

#8 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 26 June 2008 - 09:54 PM

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ả?
  • 0
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!


#9 Jin Yong

Jin Yong

    biết lệnh group

  • Vip
  • PipPipPipPipPipPip
  • 498 Bài viết
Điểm đánh giá: 334 (khá)

Đã gửi 10 July 2008 - 12:29 PM

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
  • 0

Phát triển phần mềm thiết kế Kết cấu Việt Nam - http://www.ketcausoft.com


#10 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 12 July 2008 - 10:55 AM

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.
  • 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!


#11 bisok2

bisok2

    biết pan

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

Đã gửi 22 September 2008 - 04:53 AM

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 :) :)
  • 0

#12 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 22 September 2008 - 07:45 AM

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...s/Lesson04d.htm
http://www.java2s.co...talogAccess.htm
  • 0

#13 vndesperados

vndesperados

    biết lệnh xref

  • Members
  • PipPipPipPipPipPipPip
  • 547 Bài viết
Điểm đánh giá: 253 (khá)

Đã gửi 22 September 2008 - 08:10 AM

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.co...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/
  • 0

#14 phantuhuong

phantuhuong

    biết dimstyle

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

Đã gửi 22 September 2008 - 10:31 PM

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.co...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.
  • 0
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!


#15 tranchan

tranchan

    biết lệnh break

  • Members
  • PipPipPipPip
  • 221 Bài viết
Điểm đánh giá: 93 (tàm tạm)

Đã gửi 29 October 2008 - 04:14 PM

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 .. Hình đã gửi
và gì mà missing autocad2004 type library..
Khắc phục ntn đây?
  • 0

#16 Nguyen Hoanh

Nguyen Hoanh

    biết lệnh adcenter

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

Đã gửi 29 October 2008 - 04:27 PM

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 .. Hình đã gửi
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.
  • 0

#17 nguyendongdhgt

nguyendongdhgt

    biết zoom

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

Đã gửi 30 August 2009 - 06:10 PM

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
  • 0

#18 nguyendongdhgt

nguyendongdhgt

    biết zoom

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

Đã gửi 30 August 2009 - 06:11 PM

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
  • 0

#19 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:04 PM

Hình đã gửi


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.
  • 0
http://khuyen.space

#20 phantuhuong

phantuhuong

    biết dimstyle

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

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

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.
  • 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!