Tải bản đầy đủ (.pdf) (10 trang)

microsoft excel va lap trinh tren microsoft excel phần 3 ppsx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (427.59 KB, 10 trang )

TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 21 -

Cài đặt thuật toán
Với thuật toán như trên, ta có thể tiến hành cài đặt cho hàm
TraBang
theo các bước sau:
§ Lần lượt thực hiện các bước như đã nêu trong phần 3.2.3.2 Tạo hàm mới bằng
VBA, với tên hàm cần tạo là
TraBang
.
§ Nhập đoạn mã lệnh của hàm
TraBang
như sau:
Public Function TraBang(so_tra As Double, Vung_Tra As Range) As Double
Dim X1, X2, Y1, Y2 As Double
Dim i As Integer
Dim Co_the_tra As Boolean
Co_the_tra = False
’Vòng lặp để duyệt qua hàng đầu tiên của vùng dữ liệu
For i = 1 To Vung_Tra.Columns.Count - 1
If ((Vung_Tra(1, i).Value<=so_tra) And _
(Vung_Tra(1, i + 1) ).Value >=so_tra)) _
Kết thúc
Khai báo bi
ến

Có_thể_tra=False
I=1
I<=(Số_cột_vùn


g_tra)- 1
Số_tra Є
[Vùng_Tra(1,i),
Vùng_tra(1,i+1)]

X1=Vùng_tra(1,i)
X2= Vùng_tra(1,i+1)
Y1=Vùng_tra(2,i)
Y2= Vùng_tra(2,i+1)
Có_thể_tra=True
B
ắt đầu

Có_th
ể_tra=
True
X1=S
ố_tra

X2=S
ố_tra

Tra_bảng=Y1+(Y2-Y1)/(X2-
X1)*(Số_tra-X1)
I=I+1

Tra_b
ảng=Y1

Tra_b

ảng=Y2

Thông báo:
không tra được

Tra_bảng=Null
Sai
Đúng

Đúng

Sai

Đúng

Đúng

Sai

Sai

Đúng

Sai

TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 22 -
Or _
((Vung_Tra(1, i) ).Value >=so_tra) And _

(Vung_Tra(1, i + 1) ).Value <=so_tra)) _
Then
’Khi đã thoả mãn điều kiện thì lần lượt lấy các giá trị X1,X2,Y1,Y2
’và thoát khỏi vòng lặp
X1 = Vung_Tra(1, i).Value
X2 = Vung_Tra(1, i + 1).Value
Y1 = Vung_Tra(2, i).Value
Y2 = Vung_Tra(2, i + 1).Value
Co_the_tra = True
Exit For
End If
Next i

If Co_the_tra Then
’Kiểm tra điều kiện X1=Số_Tra
If so_tra = X1 Then
TraBang = Y1
Exit Function
End If
’Kiểm tra điều kiện X2=Số_Tra
If so_tra = X2 Then
TraBang = Y2
Exit Function
End If
’Nếu không thoả các điều kiện trên thì tính giá trị tra bảng theo
’công thức sau:
TraBang = (Y2 - Y1) / (X2 - X1) * (so_tra - X1) + Y1
Else
’Khi không nằm trong bảng tra thì thông báo
MsgBox ("Gia tri can tra khong nam trong bang tra")

TraBang = Null
End If
End Function
Sử dụng hàm mới
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 23 -
Sau khi đã tạo mã nguồn cho hàm mới, ta sử dụng hàm mới bằng cách tạo một bảng tra
như hình vẽ dưới, sau đó nhập công thức
“=trabang(B9,B6:I7)”
. Kết quả cho ra là
153.5, đúng như cách tính toán thông thường.
Lần lượt thay đổi “Số trục xe tính toán” bằng 100, 20, 7100 để thử nghiệm khả năng xử lý
của hàm
TraBang
.




TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 24 -

4. CHƯƠNG IV
AutoCAD và lập trình trên AutoCAD
4.1. AutoCAD
AutoCAD là một chương trình ứng dụng thuộc hệ CAD (Computer Aided Design) chuyên
dùng trong công tác thiết kế - tạo bản vẽ. AutoCAD là sản phẩm rất phổ biến do tính dễ
dùng và khả năng áp dụng cho nhiều lĩnh vực khác nhau. AutoCAD được tổ chức thành

một chương trình hoạt động độc lập trên nền Windows, số liệu bản vẽ thiết kế được
AutoCAD tổ chức dưới hai dạng là ẩn (nonvisual) và trực quan (visual). Các thao tác liên
quan đến các thành phần trong bản vẽ đều được thực hiện trực tiếp ngay trên màn hình
thông qua sự phối hợp giữa các câu lệnh và thao tác với bàn phím hoặc chuột.
Giao diện của chương trình AutoCAD như sau:

Mỗi bản vẽ trong AutoCAD được tổ chức thành 2 thành phần chính:
§ ModelSpace - Không gian mô hình: là nơi tạo các đối tượng hình học của bản
vẽ.
§ PaperSpace – Không gian in: tại đây các đối tượng hình học được thể hiện ở
dạng kết quả sau khi in. Mỗi đối tượng đều có thể được bố trí với tỷ lệ, vị trí, góc
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 25 -
quan sát một cách độc lập với những đối tượng khác theo ý tưởng của người
thiết kế. Kết quả hiển thị trên không gian in sẽ giống như khi in trên giấy. Số
lượng PaperSpace là không hạn chế.
Với AutoCAD, người dùng có thể tạo ra các bản vẽ, từ hình vẽ của những ý tưởng ban đầu
đến những bản vẽ chi tiết với độ chính xác cao. Hệ thống các trình đơn, thanh công cụ, cửa
sổ dòng lệnh và đặc biệt là khả năng tương tác với từng chi tiết của bản vẽ một cách trực
quan giúp cho người thiết kế có thể thể hiện ý tưởng của mình một cách thoải mái, dễ dàng
và nhanh chóng. Và hơn thế nữa, khả năng in ấn mạnh mẽ với rất nhiều lựa chọn khác
nhau giúp thể hiện ý tưởng thành bản vẽ và có thể in ra giấy một cách dễ dàng.
Toàn bộ các chi tiết trong bản vẽ đều được AutoCAD quản lý dưới dạng đối tượng, nghĩa
là mỗi chi tiết đều có những thuộc tính riêng và được quản lý bằng cơ sở dữ liệu bên trong
AutoCAD. Điều này rất thích hợp trong môi trường thiết kế đòi hỏi phải cập nhật, thay đổi
nhiều, bởi lẽ chỉ cần thay đổi thuộc tính của các đối tượng là ta đã có thể có ngay được một
bản vẽ mới. Bên cạnh đó, do cách tổ chức như trên nên ta có thể dễ dàng can thiệp vào các
đối tượng bản vẽ để biến đổi chúng cho phù hợp với mục đích riêng. Các đối tượng trong
AutoCAD được chia làm hai loại, loại thứ nhất là các đối tượng ẩn, được dùng để thiết lập

các thuộc tính cho các loại đối tượng khác, ví dụ như: DimStyle, FontStyle, Layer Loại
đối tượng thứ hai là các đối tượng có thể nhìn thấy được, nó chính là các thành phần hiển
thị của bản vẽ, ví dụ như: Line, Pline, Arc, Text, Dim
AutoCAD là một chương trình được sử dụng rất rộng rãi bởi không những nó đáp ứng
được yêu cầu của đại đa số người dùng mà còn đáp ứng được những yêu cầu chuyên biệt
nhờ khả năng cho phép người dùng có thể lập trình trên nó để thực hiện những yêu cầu
chuyên biệt này của mình một cách dễ dàng. Việc mở rộng AutoCAD có thể được thực
hiện theo những cách sau:
§ Lệnh gộp (Script): tính năng này cho phép thực hiện các lệnh của AutoCAD từ
một tệp văn bản (có phần mở rộng là *.SCR).
§ AutoLISP và Visual LISP: AutoLISP dựa trên ngôn ngữ lập trình LISP, một
ngôn ngữ dễ sử dụng và cũng khá mạnh. Với môi trường phát triển tích hợp
Visual LISP có sẵn trong AutoCAD, người dùng có thể dễ dàng tạo ra các ứng
dụng mở rộng AutoCAD. Tất cả các mã lệnh viết bằng AutoLISP sẽ được lưu
trong tệp có phần mở rộng là *.LSP.
§ ObjectARX (AutoCAD Runtime Extension): ObjectARX chứa các thư viện
liên kết động, qua đó người dùng có thể tác động trực tiếp lên nhân của chương
trình AutoCAD. Chính vì vậy, chương trình viết với ObjectARX có khả năng rất
mạnh, và thường được sử dụng để viết các ứng dụng lớn, chẳng hạn như
SoftDesk hay NovaTDN. Các chương trình sử dụng ObjectARX được viết bằng
ngôn ngữ VC++ và được biên dịch thành tệp có phần mở rộng là *.ARX.
§ ActiveX Automation: công nghệ này cho phép chia sẻ dữ liệu của bản vẽ với
các chương trình khác. Và do đó, ta có thể phát triển ứng dụng bằng các ngôn
ngữ lập trình khác nhau như Visual Basic, Delphi hay C#, để tận dụng tất cả các
tính năng sẵn có của AutoCAD thông qua mô hình đối tượng của AutoCAD.
§ AutoCAD VBA: là môi trường lập trình được tích hợp sẵn trong AutoCAD. Các
chương trình VBA viết bằng ngôn ngữ Visual Basic, hoạt động dựa trên giao
diện ActiveX Automation. Sự kết hợp giữa AutoCAD, ActiveX Automation và
VBA tạo nên nhiều lợi thế cho các ứng dụng mở rộng viết bằng VBA.
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG

Lập trình trên ứng dụng nền
- 26 -
Trong tài liệu này, chỉ trình bày về cách lập trình trên AutoCAD bằng VBA và một số nội
dung cơ bản nhất về AutoLISP sử dụng kết hợp với các chương trình VBA tạo nên các
lệnh mới trong AutoCAD.
4.2. Lập trình trên AutoCAD bằng VBA
Việc lập trình bằng VBA trên AutoCAD cũng giống như trên Microsoft Excel, các mã lệnh
đều được thực hiện thông qua VBA IDE. Do đều xuất phát từ một nhà cung cấp là
Microsoft nên VBA IDE trong hai ứng dụng nền trên là giống nhau. Điểm khác nhau cơ
bản cần phải lưu ý trong khi lập trình chính là sự khác biệt về mô hình đối tượng của hai
ứng dụng nền. Chính vì vậy, trong phần này, sau khi giới thiệu về một số thao tác cơ bản,
nội dung chủ yếu sẽ là giới thiệu về mô hình đối tượng của AutoCAD và một số thao tác
cơ bản trên các đối tượng của AutoCAD.
4.2.1. Quản lý dự án VBA
Khác với trong Excel, trong AutoCAD, các dự án VBA được phân biệt rõ ràng thành:
§ Dự án nhúng (Embedded Project): là dự án VBA được đính kèm cùng với tệp
bản vẽ và sẽ được tự động tải vào VBA IDE mỗi khi mở bản vẽ có chứa dự án
nhúng. Dự án nhúng có một số giới hạn khi làm việc, không thể đóng hoặc mở
các bản vẽ AutoCAD bởi lẽ mục đích của dự án nhúng chính là làm việc bên
trong bản vẽ có chứa nó. Điểm thuận lợi chính của dự án nhúng là người sử
dụng không cần phải nhớ nơi lưu trữ dự án, không cần phải thực hiện tải dự án
mỗi khi sử dụng các chức năng có trong dự án, tất cả các thao tác đó đều được
thực hiện tự động khi mở bản vẽ có chứa dự án nhúng.
§ Dự án độc lập (Global Project): là dự án được lưu tách biệt trong một tệp có
phần mở rộng là *.DVB. Dự án độc lập có khả năng làm việc linh hoạt hơn, có
khả năng đóng hoặc mở bản vẽ bất kỳ. Tuy nhiên, người sử dụng cần phải nhớ
nơi lưu trữ và các chức năng có trong từng dự án để khi cần sử dụng một chức
năng nào thì sẽ tải dự án đó vào VBA IDE để sử dụng. Mặc dù vậy, với dự án
độc lập, việc phân phối và chia sẻ mã lệnh được thực hiện dễ dàng hơn so với
loại dự án nhúng. Dự án độc lập cũng rất thích hợp để lưu trữ, tập hợp thành bộ

thư viện để sử dụng trong tất cả các bản vẽ.
Với AutoCAD, quá trình quản lý dự án VBA được thực hiện rất dễ dàng thông qua cửa sổ
“Quản lý dự án VBA – VBA Manager”. Để hiện cửa sổ VBA Manager, ta chọn trình đơn
ToolðMacroðVBA Manager… (hoặc gọi lệnh
VBAMAN
từ dòng lệnh của AutoCAD)

Giao diện của cửa sổ VBA Manager như hình dưới:
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 27 -

Ý nghĩa của từng thành phần trong cửa sổ VBA Manager:
1 Chứa danh sách các bản vẽ hiện có trong AutoCAD (sử dụng khi ta muốn nhúng một
dự án nào đó vào trong một bản vẽ).
2 Chứa danh sách các dự án VBA hiện đang được tải trong VBA IDE.
3 Tạo một dự án mới.
4 Lưu dự án VBA với tên khác (chỉ có hiệu lực với các dự án độc lập).
5 Tải một dự án độc lập vào trong VBA IDE.
6 Gỡ bỏ một dự án độc lập khỏi VBA IDE.
7 Nhúng một dự án VBA vào một bản vẽ định trước. Bản vẽ được định trước chính là
bản vẽ được lựa chọng trong danh sách 1.
8 Tách dự án nhúng ra khỏi bản vẽ (chỉ có hiệu lực khi bản vẽ có chứa dự án nhúng).
9 Hiển thị cửa sổ quản lý Macro trong AutoCAD.
10 Hiển thị VBA IDE, là nơi sẽ thực hiện quá trình thiết kế mã lệnh và giao diện của
chương trình.
CHÚ Ý Macro về bản chất là chương trình con dạng thủ tục. Trong AutoCAD, ta thường chỉ thao
tác với các chương trình con dạng thủ tục, còn chương trình con dạng hàm chỉ sử dụng bên trong
các dự án VBA.
4.2.2. Tạo Macro với VBA

Mỗi Macro đều phải nằm trong một dự án nhất định. Vì vậy, trước khi tạo mới một Macro,
ta cần phải xác định được nơi sẽ chứa Macro. Nếu chưa có một dự án nào hoặc khi cần lưu
Macro trong một dự án khác, ta cần phải tạo mới Macro. Sau đó, việc tạo Macro sẽ được
thực hiện một cách dễ dàng như cách tạo một chương trình con trong VBA.
4.2.2.1. Tạo mới và lưu dự án VBA
Để tạo mới dự án VBA:
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 28 -
1 Mở cửa sổ VBA Manager.
2 Chọn nút lệnh New.
Mặc định, dự án mới được tạo sẽ là một dự án độc lập, có tên dự án là ACADProject.
Sau khi tạo mới dự án, ta có thể nhúng dự án vào một bản vẽ nào đó hoặc có thể lưu ra một
tệp riêng thành dự án độc lập tuỳ thuộc vào nhu cầu sử dụng.
Để nhúng dự án vào một bản vẽ:
1 Mở cửa sổ VBA Manager.
2 Trong mục Drawing, chọn bản vẽ cần nhúng dự án vào.
3 Trong mục Projects, chọn dự án cần nhúng vào bản vẽ.
4 Chọn nút lệnh Embed.
Để lưu dự án VBA thành dự án độc lập:
1 Mở cửa sổ VBA Manager.
2 Chọn dự án cần lưu, chọn Save As. Hộp thoại Save As sẽ xuất hiện.
3 Điền tên tệp và vị trí để lưu dự án.
4 Chọn Save.
4.2.2.2. Tạo mới và hiệu chỉnh Macro
Để tạo mới Macro, ta có thể trực tiếp vào trong VBA IDE và chèn chương trình con (dạng
thủ tục) vào dự án mong muốn, hoặc ta có thể thực hiện thông qua cửa sổ Macros.
Để tạo Macro thông qua cửa sổ Macros:
1 Mở cửa sổ Macros bằng cách chọn từ trình đơn ToolsðMacroðMacros… (hoặc sử
dụng lệnh

VBARUN
từ dòng lệnh AutoCAD)

TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 29 -
2 Trong mục Macros in, chọn nơi sẽ chứa Macro từ danh sách thả xuống.
3 Trong mục Macro name, nhập tên Macro cần tạo.
4 Chọn Create để tạo Macro mới.
5 Màn hình của VBA IDE sẽ được tự động hiện lên, và con trỏ chuột được đặt ngay vị trí
cài đặt mã lệnh cho Macro mới. Lúc này ta đã có thể bắt đầu viết mã lệnh cho Macro
mới.
6 Trong màn hình của VBA IDE chọn trình đơn FileðClose and Return to AutoCAD
để trở về màn hình của AutoCAD.
CHÚ Ý Cũng giống như VBA trong Excel, để chuyển đổi qua lại giữa màn hình AutoCAD và màn
hình VBA IDE, ta sử dụng phím tắt là ALT+F11.
Để soạn thảo/hiệu chỉnh Macro
1 Mở cửa sổ Macros.
2 Chọn Macro cần hiệu chỉnh trong danh sách các Macro.
3 Chọn Edit để bắt đầu hiệu chỉnh.
4.2.3. Sử dụng Macro
Để sử dụng Macro, hay nói cách khác là để thực thi các Macro, ta cần phải tải các dự án có
chứa Macro vào VBA IDE. Nếu Macro nằm trong các dự án đã mở, ta có thể bỏ qua bước
tải dự án VBA.
Để tải các dự án VBA
§ Đối với các dự án nhúng, ta chỉ cần mở bản vẽ có chứa dự án nhúng là đã thực
hiện quá trình tải dự án.
§ Đối với các dự án độc lập, ta cần phải tải các dự án bằng cách: mở cửa sổ VBA
Manager ð Chọn Load ð Chọn dự án cần tải trong hộp thoại Open VBA
Project ð Chọn Open.

Việc thực thi Macro cũng có thể được thực hiện theo nhiều cách khác nhau: trực tiếp từ
VBA IDE, thông qua cửa sổ Macros, thông qua dòng lệnh, hay qua hệ thống trình đơn.
Dưới đây là hai cách đơn giản nhất để thực thi Macro.
Để thực thi Macro
§ Trong VBA IDE, đặt con trỏ vào dòng mã lệnh của Macro trong cửa sổ mã lệnh
ð Nhấn phím F5 để thực thi Macro.
§ Mở cửa sổ Macros ð Chọn Macro cần thực thi trong danh sách ð Chọn Run.
4.2.4. Tạo lệnh mới sử dụng VBA kết hợp với AutoLISP
Có thể nói, một trong những điểm mạnh của AutoCAD chính là cửa sổ dòng lệnh. Thông
qua cửa sổ dòng lệnh này, mọi thao tác đối với bản vẽ đều có thể được thực hiện một cách
nhanh chóng với bàn phím thông qua hệ thống các lệnh đã được định nghĩa sẵn.
Để thực thi Macro, rõ ràng phải thực hiện qua khá nhiều bước. Để tạo sự thuận tiện, cần
thiết phải định nghĩa lệnh mới, qua đó ta có thể thực thi Macro chỉ với một dòng lệnh đơn
giản, giống như khi cần vẽ đường thẳng, ta chỉ cần sử dụng lệnh line ở dòng lệnh
AutoCAD. Sự kết hợp với AutoLISP là một cách làm tốt và dễ dàng để thực hiện mục tiêu
này.
TỰ ĐỘNG HOÁ THIẾT KẾ CẦU ĐƯỜNG
Lập trình trên ứng dụng nền
- 30 -
Tuy nhiên, nếu chỉ được lưu trong những tệp dự án VBA và tệp AutoLISP thông thường
thì những lệnh đó chỉ có hiệu lực khi người dùng tải đồng thời dự án VBA và tệp
AutoLISP trong AutoCAD. Vì vậy, khi muốn các lệnh mà người dùng tự lập có hiệu lực
ngay khi sử dụng AutoCAD (nghĩa là người dùng không cần phải làm thêm bất cứ một
thao tác nào khác, chỉ cần khởi động AutoCAD là có thể dùng được ngay các lệnh này) ta
sẽ phải lưu dự án VBA thành tệp có tên là ACAD.DVB và tệp AutoLISP sẽ được lưu với
tên là ACAD.LSP, và cả hai tệp này phải được lưu vào thư mục cài đặt của AutoCAD (ví
dụ đối với AutoCAD 2002, nếu cài đặt thông thường, thư mục cài đặt của AutoCAD trong
Windows sẽ là: C:\Program Files\AutoCAD 2002).
Dưới đây là một ví dụ đơn giản để thực hiện mục tiêu này: chương trình (Macro)
HelloWorld.

Mô tả nội dung chương trình (Macro): Macro này sẽ hiển thị hộp thoại yêu cầu người sử
dụng nhập vào một thông điệp, sau đó thông điệp này sẽ được vẽ trên không gian mô hình
của AutoCAD. Để thực thi Macro này, ta chỉ cần gõ lệnh
Hello
trong dòng lệnh
AutoCAD. Và đây sẽ là lệnh thường trú trong AutoCAD.
Quá trình thực hiện để đáp ứng nhu cầu trên như sau:
a. Tạo dự án mới
1 Khởi động AutoCAD.
2 Mở cửa sổ VBA Manager (lệnh
VBAMAN
).
3 Chọn New.
4 Chọn Dự án VBA vừa được tạo trong danh sách các dự án, sau đó chọn Save As…
5 Trong hộp thoại Save As, chọn thư mục cài đặt của AutoCAD trong mục Save in; còn
trong mục File name nhập vào
ACAD.DVB
.
6 Chọn Save để lưu dự án và quay về cửa sổ VBA Manager.
b. Tạo và thực thi Macro HelloWorld
7 Trong cửa sổ VBA Manager, chọn Macros… để hiển thị hộp thoại Macros.
8 Chọn dự án ACAD.DVB trong mục Macros in

9 Trong mục Macro name, nhập vào tên Macro là
HelloWorld


10 Chọn Create. Màn hình VBA IDE sẽ được hiển thị, trong cửa sổ mã lệnh, con trỏ sẽ
được đặt ở vị trí của Macro vừa được tạo. Ta sẽ thấy được đoạn mã lệnh đã được tạo
sẵn như sau:

Sub HelloWorld()
End Sub

11 Thay đoạn mã lệnh trên bằng đoạn mã lệnh sau:
Sub HelloWorld()
Dim strMsg As String
strMsg = InputBox("Nhap thong diep chao mung", _
"HelloWorld")
Dim objText As AcadText
Dim pInsert(0 To 2) As Double
pInsert(0) = 50: pInsert(1) = 100: pInsert(2) = 0
Set objText = ThisDrawing.ModelSpace.AddText _
(strMsg, pInsert, 2.5)

×