training for local cadres.×lập trình vba for word×vba for excel and autocad×access 2010 vba for dummies pdf×vba for excel× Tối đa 6 từ khóa access 2007 vba programming for dummiesvba for autocad guidevba for autocadexcel 2010 vba for dummies pdftôp for cad
Trang 1Chương I Lịch sử phát triển môi trường CAD
Chương II Giới thiệu VBA
Một ứng dụng VBA for CAD sẽ bao gồm một số thành phần sau:
-UserForm là đối tượng giao diện người dùng, bên trong có chứa các đoạn code thực thicâu lệnh
1 Khai báo biến
Cú pháp khai báo biến:
Dim <tên biến> as [ As DataType ]Kiểu dữ liệu ở đây có thể hiểu là Integer, String, Object…
Cú pháp: Option Explicit Nếu trong chương trình chúng ta khai báo câu lệnh trên thì bắt buộc mọi biến trước khi sử dụng đều cần phải được khai báo rõ ràng, và ngược lại nếu không có thì chương trình sẽ tự tạo ra các biến mà chúng ta đã không khai báo Tuy nhiên như thế chúng ta sẽ khó mà kiểm soát được các biến của mình
Bạn có thể thay đổi tùy chọn khai báo biến trước khi sử dụng bằng cách vào Tool->Option và thay đổi chọn trong Require Variable Declaration.Nếu tích chọn thì chương trình lập trình của bạn sẽ yêu cầu phải khai báo trước khi dùng và ngược lại
2 Đặt tên biến
Đặt tên biến tuân theo quy tắc sau:
Trang 2- Ký tự đầu tiên phải là chữ
- Không được sử dụng các dấu trắng, (.), !,@,#,$ để đặt tên
- Tên không được dài hơn 255 ký tự
- Không đặt tên trùng với các tên đặc biệt dùng để điều khiển trong VB, ví dụ như Left vì trong UserForm có câu lệnh UserForm.Left
- Không thể có 2 biến trùng tên nhau trong một chương trìnhThông thường đặt tên trong VBA thì tên biến thường nói lên kiểu dữ liệu bên trong nó, vì vậy thông thường để tiện dùng, kiểm tra thì người ta thường tuân theo quy tắc đặt tên sau:
Ngoài ra người lập trình thường đặt tên theo cú pháp “lạc đà” để dễ đọc:
VD: OptSaveFormat thì chứ S và F viết hoa
3 Biến và phạm vi sử dụng
Nếu biến được khai báo trong hàm, thủ tục thì nó chỉ được hiểu trong hàm, thủ tục đó Đó chính là phạm vi ảnh hưởng của biến Trong trường hợp bạn muốn có các biến được sử dụng trong toàn bộ chương trình thì bạn phải khai báo chúng ở bên ngoài tất cả các hàm và thủ tục, và thông thường nó ở ngay đầu chương trình
Biến trong thủ tục: Chỉ được hiểu trong thủ tục đó và bạn không thể khai báo Public cho biến này
Biến trong Module: Được hiểu trong tất cả các thủ tục thuộc Module đó
Proceduce Variable
Cú pháp: Dim <Tenbien> as [KieuDuLieu]
VD: Dim Line as AcadLine
Module Variable
Để khai báo biến dùng trong cả Module bạn phải khai báo biến ở ngay đầu tiên của Module
Cú pháp: Private <TenBien> as [KieuDuLieu]
VD: Private LayerOn as Bolean
Global Variable
Trang 3Khi bạn muốn có một biến được hiểu trong tất cả chương trình bạn dùng
cú pháp
Cú pháp: Public <TenBien> as [KieuDuLieu]
VD: Public LayerOn as Bolean
Lưu ý rằng bạn không thể dùng từ khóa Public để khai báo biến trong
<Public> Const SaveTime = 15
Hằng khai báo trong hàm, thủ tục sẽ được hiểu trong hàm, thủ tục đó
<Private> Const SaveTime = 15
II Kiểu dữ liệu
1 Kiểu dữ liệu Variant
Là kiểu dữ liệu mà bạn hoàn toàn chưa xác định, sau này trong chương
trình tùy theo trường hợp sử dụng mà biến có kiểu dữ liệu này sẽ được
gán tương ứng:
Cú pháp:
Dim <TenBien>
2 Các kiểu dữ liệu cơ bản trong VB
a) Dữ liệu cơ bản đơn
Kiểu dữ
Integer -32768 đến +32767 Chứa một dải các số nguyên có miền giá trị ntLong
String Khoảng 2 tỉ ký tự Các ký tự kiểu Text
Boolean 1 hoặc 0 True/False hoặc On/Off hoặc Yes/No
Byte 0 đến 255
Data 1/1/100 đến 12/31/9999 và 0:00:00 đến 23:59:59
Variant Tất cả các kiểu giá trị
Đặc biệt trong VBA có sự chuyển đổi từ ký tự sang số:
Private Sub CommandButton1_Click()
Dim cout As Integer
Dim Chuoi As String
Trang 4b) Dữ liệu mảng
Dữ liệu mảng là một thành phần dữ liệu quan trọng lập trình Dữ liệu mảng là một tập các giá trị cùng kiểu dữ liệu và được lưu giữ dưới cùng 1tên biến, các giá trị mảng được truy nhập thông qua các chỉ số của mảng
Cú pháp: Dim <TenMang>() as [KieuDuLieu]
VD: Dim Index() as Integer
Khi cần xác lập độ dài của mảng ta dùng câu lệnh:
Redim Index(10)
Bất cứ mảng nào khi bạn dùng câu lệnh Redim thì toàn bộ nội dung bên trong của mảng đó sẽ bị xóa Muốn không bị xóa nội dung bên trong ta phải dùng câu lệnh sau:
Redim Preserve Index(10)
Ví dụ:
Dim Diem() As Double
Private Sub CommandButton1_Click() ‘Đoạn code cho Button giá trị đầu
MsgBox ("Diem (0):" & Diem(0) & "Diem_
(1):" & Diem(1) & "Diem (2):" & Diem(2))
End Sub
Private Sub CommandButton3_Click()
‘Đoạn code cho Button Redim Preserve
ReDim Preserve Diem(10)
MsgBox ("Diem (0):" & Diem(0) & "Diem_
(1):" & Diem(1) & "Diem (2):" & Diem(2))
End Sub
3 Các kiểu dữ liệu VBA for CAD
III Modules
Trang 5VBA application bao gồm các UseForm, Class, Module.
Để add một UserForm bạn có thể vào File->Import File (Lưu ý rằng file này cần được tạo bởi VB)
Standard
Standard Module thực chất là một mô đun bạn đã thực hiện, và muốn tận dụng
nó ở các chương trình khác nhau, VBA cho phép bạn xuất các File đó dưới dạng bas và Import vào các chương trình khác và dùng lại chúng (Tương tự nhưUserForm)
Class
Nền móng của lập trình hướng đối tượng trong VB chính là các Class Module Bạn có thể tạo ra một đối tượng mới có các thuộc tính, phương thức và các sự kiện Bạn có thể tạo ra các Class trong chương trình, Export các class và sử dụng
Trang 6lại chúng trong các chương trình khác nhau Cách Import một class tương tự nhưUserForm.
Cú pháp khai báo Sub:
[Private|Public|Static] Sub <TenProcedures>([Các Thông Số Đi Kèm])
<Các câu lệnh>
End SubPrivate Sub CommandButton1_Click() Dim Layer As AcadLayer
For Each Layer In ThisDrawing.Layers MsgBox Layer.Name
Next Layer End Sub
2 Function
Function cơ bản khác Sub đó là khi gọi Function sẽ trả về một giá trị
Cú pháp khai báo Function:
[Private|Public|Static] Function <TenProcedures>([Các Thông Số Đi Kèm]) as [KieuDuLieu]
Trang 7Code lập trình cho button Sub
Private Sub btFunction1_Click() Dim Tong1 As Double
Dim a1 As Double Dim b1 As Double Dim c1 As Double a1 = txtA.Text b1 = txtB.Text c1 = txtC.Text Tong1 = Module1.TinhTongFunction1(a1, b1, c1) txtA.Text = a1
txtB.Text = b1 txtC.Text = c1 MsgBox ("Tong=" & Tong1) End Sub
Code lập trình cho button Fuction1
Private Sub btFuction2_Click() Dim Tong1 As Double
Dim a1 As Double Dim b1 As Double Dim c1 As Double a1 = txtA.Text b1 = txtB.Text c1 = txtC.Text Tong1 = Module1.TinhTongFunction2(a1, b1, c1) txtA.Text = a1
txtB.Text = b1 txtC.Text = c1 MsgBox ("Tong=" & Tong1) End Sub
Code lập trình cho button Fuction2
Public Sub btSub_Click() Dim Tong1 As Double Dim a1 As Double Dim b1 As Double Dim c1 As Double a1 = txtA.Text b1 = txtB.Text c1 = txtC.Text MsgBox ("a=" & a1) Call Module1.TinhTongSub(a1, b1, c1, Tong1) txtA.Text = a1
Trang 8txtB.Text = b1 txtC.Text = c1 MsgBox ("Tong=" & Tong1) End Sub
Code lập trình hàm Function1 và Function2
Public Sub TinhTongSub(ByRef a As Double, ByRef b As Double, ByRef c As Double, ByRef tong As Double)
Event proceduce được thực thi khi sự kiện nào đó xảy ra tương ứng Bạn
có thể khai báo Event trong class, hoặc ngay trong UserForm hoặc ngay trong ActiveX
Event có những tên đặc trưng để phân biệt với các proceduce khác trong object, giống như các bạn khai báo kiểu int thì khác kiểu double
VD:
Private Sub btFuction2_Click()
Trang 9Trong câu lệnh này thì tên Event Proceduce gồm 2 phần btFunction2 và Click, sự kiện Click này để phân biệt với các sự kiện khác như là BbclickPrivate Sub btFuction2_DblClick(ByVal Cancel As
MSForms.ReturnBoolean)
Cùng một đối tượng có rất nhiều sự kiện bên trong nó
V Các cấu trúc điều khiển rẽ nhánh
1 If………….then
Khi bạn muốn kiểm tra một điều kiện để thực hiện một câu lệnh bạn dùng
If then
If <DieuKienKiemTra> Then [Câu lệnh]
If <Điều Kiện Kiểm Tra> Then
3 Select Case
Select Case <Biến kiểm tra>
Case <Biến kiểm tra>:
[Khối câu lênh]
Trang 102 Do………….Lope While
Cú pháp:
Do
[Khối câu lệnh]
Loop While <Điều kiện kiểm tra>
Vòng lặp này khác vòng lặp trên đó là khi chạy vòng lặp ít ra chương trình cũng thực hiện được một lần khối câu lệnh rồi, còn vòng lặp Do While … Loop thì có thể không thực hiện khối câu lệnh nào trong trườnghợp điều kiện kiểm tra sai
3 Do Until Loop và Do Loop Until
Cú pháp:
Do until <Điều kiện kiểm tra>
[Khối câu lệnh]
Loop
B1: Chương trình kiểm tra điều kiện
+Nếu đúng chương trình thực hiện khối câu lệnhB2:Kiểm tra điều kiện
-Do
[Khối câu lệnh]
Loop Until <Điều kiện kiểm tra>
B1: Chương trình thực hiện khối câu lệnh
B2: Chương trình kiểm tra điều kiện Nếu đúng thì chương trình dừng lại
Khi điều kiện kiểm tra đúng thì vòng lặp dừng lại Cú pháp của các câu lệnh này ngược lại với Do While Loop và Do Loop While
Các cú pháp câu lệnh trên được gọi là các vòng lặp không xác định vì ta không biết chính xác số vòng sẽ lặp Khi biết chính xác số vòng đã lặp ta dùng các cú pháp sau
Đầu tiên biến đếm được gán bằng giá trị bắt đầu
Sau đó thực hiện khối câu lệnh
Tăng giá trị biến đếm theo bước nhảy
Chuyển sang thực hiện khối câu lệnh
Trang 11Khi biến đếm bằng giá trị kết thúc thì chương trình dừng lại.VD:
Private Sub CommandButton1_Click()
Dim i As Integer
Dim tron(12) As AcadCircle
Dim Tam(0 To 2) As Double
Trang 125 For ……Each…………Next
For Each <phần tử> In <Danh Sách Chọn>
[Khối câu lệnh]
Next <phần tử>
6 Exit Sub và Exit Function
Public Sub SubName()
-Trong khi thực thi chương trình nếu gặp phải câu lệnh Exit Sub thì lập tức
nó sẽ thoát ra khỏi khối câu lệnh mà không thực hiện các lệnh tiếp theo nữa
7 Cách sử dụng With….End With
Dùng để nhắc lại cùng một tên đối tượng
Dim myLayer As AcadLine myLayer = ThisDrawing.ActiveLayer myLayer.color = acBlue
myLayer.Linetype = "Continuous"
myLayer.Lineweight = acLnWt000 myLayer.Freeze = False
myLayer.LayerOn = True myLayer.Lock = FalseKhi bạn dùng with bạn có thể tiết kiệm được thời gian code với cú pháp của nó:
Private Sub UserForm_Click() Dim myLayer As AcadLine myLayer = ThisDrawing.ActiveLayer with myLayer
.color = acBlue Linetype = "Continuous"
.Lineweight = acLnWt000 Freeze = False
.LayerOn = True Lock = False End WithVII Cấu trúc hướng đối tượng
Trang 13Chương III Các đối tượng công cụ trong VBA
I Cách tạo một UseForm
Từ môi trường CAD gõ lệnh VBAMAN sẽ hiện ra bảng VBA Manager
Click chuột chọn New để mở môi trường project mới Sau đó click vào Visual Basic Editor
Sau đó ta click vào Insert -> UserForm để chèn vào một UserForm mới
Trang 14Bên cạnh UserForm1 chúng thường sẽ nhìn thấy hộp Toolbox Nếu không nhìn thấy thì bạn click vào View -> Toolbox để cho nó hiện ra.
Trong hộp Toolbox có rất nhiều đối tượng lập trình Chúng ta sẽ lần lượt tìm hiểu về từng đối tượng này trong chương tiếp theo
II Cài đặt thuộc tính của UseForm
Khi ta click chuột vào vùng của UseForm1 thì trong Frame Properties –
UseForm sẽ hiển thị các thuộc tính của UseForm1
Các thuộc tính:
(Name) = UseForm1 : Đây là tên biến của Form1, khi chương trình chạy sẽ dùngtên này như là một biến để gọi tới nó Bạn có thể thay đổi được tên UseForm1 cho tiện sử dụng
Caption: Tên hiển thị ở phía trên của UseForm1 Bạn có thể sửa dữ liệu của caption này VD: Nhap Du Lieu
Height: Thuộc tính quy định chiều cao của Form
Width: Thuộc tính quy định chiều rộng của Form
Bạn có thể tùy chỉnh các thuộc tính này ngay trên bảng Properties hoặc lập trình
để thay đổi các thuộc tính đó
Top và Left của Form
Trang 15III Cách thêm các đối tượng vào UseForm
Tạo một đối tượng trên UseForm Bạn có thể dùng cách kéo thả để tạo một đối tượng
'Lay toa do diem ra man hinh UserForm1.Show
End SubSau khi gõ code xong bạn chạy thử chương trình bằng cách nhấn vào nút Run
Trang 16người dùng chọn một trong số những lựa chọn có sẵn thì ta ưu tiên dùng ComboBox.
Để dùng ComboBox các bạn vẫn dùng phương pháp kéo thả và form
Đoạn code để các bạn addcác Item vào ComboboxPrivate Sub
UserForm_Activate() Me.ComboBox1.Clear
Me.ComboBox1.AddItem "Ve Tam Giac"
Me.ComboBox1.AddItem "Ve Hinh Vuong"
Me.ComboBox1.AddItem "Ve hinh Tron"
End SubKhi các bạn chọn Index Ve Tam Giac, hoặc Ve Hinh Vuong trong ComboBox sẽ bắt sựkiện IndexChange
Để lập trình cho sự kiện đó các bạn gõ đoạn code sau:
Private Sub ComboBox1_Change() Dim KiemTra As Integer
KiemTra = Me.ComboBox1.ListIndex Dim View As AcadUCS
Select Case KiemTra Case "0"
'Ve Tam Giac UserForm1.Left = 500 Dim Diem1(2) As Double Dim Diem2(2) As Double Dim Diem3(2) As Double Dim Diem4(2) As Double Dim DuongThang As AcadLine Diem1(0) = 0: Diem1(1) = 0: Diem1(2) = 0 Diem2(0) = 10: Diem2(1) = 10: Diem2(2) = 0 Diem3(0) = 20: Diem3(1) = 0: Diem3(2) = 0 Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem1, Diem2)
Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem2, Diem3)
Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem1, Diem3)
Update Case "1"
'Ve Hinh Vuong Diem1(0) = 0: Diem1(1) = 0: Diem1(2) = 0 Diem2(0) = 0: Diem2(1) = 10: Diem2(2) = 0 Diem3(0) = 10: Diem3(1) = 10: Diem3(2) = 0 Diem4(0) = 10: Diem4(1) = 0: Diem4(2) = 0 Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem1, Diem2)
Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem2, Diem3)
Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem3, Diem4)
Set DuongThang = ThisDrawing.ModelSpace.AddLine(Diem4, Diem1)
Trang 17Update
Case "2"
Dim HinhTron As AcadCircle
Set HinhTron = ThisDrawing.ModelSpace.AddCircle(Diem1, 10) Update
Các bạn cũng cần add các Item vào trong ListBox để nó hiển thị khi chương trình chạy:
Private Sub ListBox1_Change() Dim result As Boolean
KiemTra = ListBox1.ListIndex Select Case KiemTra
‘*******************************
Private Sub UserForm_Activate() Me.ListBox1.AddItem ("Lop 51TH1 pro") Me.ListBox1.AddItem ("Lop 51TH2 pro") Me.ListBox1.AddItem ("Lop 51TH3 pro") Me.ListBox1.AddItem ("Lop 51TH4 pro") End Sub
‘********************************
Và đây là kết quả của đoạn code trên:
Trang 18Khi bạn Click vào các lớp tương ứng sẽ hiện ra các thông báo.
If OptionButton2.Value = True Then MsgBox ("Option 2 duoc chon") Else
MsgBox ("Option 3 duoc chon") End If
End If
Trang 198 ToggleButton
9 Frame
Tác dụng của Frame là khi bạn muốn nhóm các dữ liệu liên quan vào cùng một vùng, như vậy chương trình của bạn trông sẽ khoa học và chuyên nghiệp hơn
Khi thuộc tính Enable của Frame là False thì tất cả các đối tượng trên Frame đó bạn sẽ không thể tương tác được
10.CommandButton
11.TabStrip
Trang 2012 MultiPage
15.Image
Trang 21CHƯƠNG IV: LÀM VIỆC VỚI CÁC LAYER VÀ LINETYPES
I LAYER
Việc sử dụng các layer và linetypes là các công cụ để nâng cao hiệu quả quản lý bản vẽ trong khi vẽ và in ấn Trong chương này chúng ta sẽ học cách để tạo lập, điều khiển và sử dụng các Layer
Layer
Layer là một thuộc tính của các đối tượng nét vẽ trong CAD, việc sử dụng các layer để tạo thành các nhóm đối tượng vẽ khác nhau rất tiện trong quản lý các đối tượng vẽ Ví dụ tất các các nét trục được vẽ bằng cùng một layer,
Accessing Layer
AutoCad tổ chức quản lý layer theo các collection, đây là nơi tập hợp và quản lý các đối tượng layer trong bản vẽ Bạn có thể tạo ra các layer tùy theo yêu cầu sử dụng vẽ của bạn Để quản lý tất cả các đối tượng này ta khai báo biến
AcadLayers Đối tượng kiểu AcadLayers này bao gồm tất cả các Layer trong bảnvẽ
Private Sub CommandButton1_Click()
Dim ObjectLayer As AcadLayers
Set ObjectLayer = ThisDrawing.Layers
MsgBox (ObjectLayer.Count)
End Sub Dim ObjLayers as AcadLayers
Set ObjLayers = ThisDrawing.Layers
Để truy nhập vào một đối tượng Layer cụ thể ta dùng biến AcadLayer
Dim ObjLayer As AcadLayer
Set ObjLayer = ObjLayers.Item(2)
Set ObjLayer = ObjLayers.Item("Layer4")
MsgBox (ObjLayer.Name)
Câu lệnh Set ObjLayer = ObjLayers.Item(2) có nghĩa là đối tượng ObjLayer được gán phần tử Layer đứng thứ 2 (thứ tự từ trên xuống trong List Layer mà bạn thấy trong khi vẽ)
Interating Layer
Các layer cũng cho phép các bạn lặp như với các biến nguyên của vòng lặp for
Đó gọi là sự lặp các layer
Private Sub CommandButton2_Click()
Dim ObjLayer As AcadLayer
For Each ObjLayer In ThisDrawing.Layers
MsgBox (ObjLayer.Name)
Next
End Sub
Kiểm tra sự tồn tại của một Layer
Khi lập trình bạn có thể gặp trường hợp cần kiểm tra xem một Layer đã tồn tại hay chưa (có thể là để dùng, sửa hoặc xóa), bạn cần lưu ý rằng AutoCad quản lý Layer theo tên Đoạn Code sau giúp bạn kiểm tra sự có mặt của một Layer