1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

giáo trình VBA for CAD

32 685 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 32
Dung lượng 1,67 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

Chươ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 3

Khi 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 4

b) 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 5

VBA 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 6

lạ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 7

Code 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 8

txtB.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 9

Trong 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 10

2 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 11

Khi 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 12

5 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 13

Chươ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 14

Bê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 15

III 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 16

ngườ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 17

Update

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 18

Khi 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 19

8 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 20

12 MultiPage

15.Image

Trang 21

CHƯƠ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

Ngày đăng: 26/10/2014, 06:50

TỪ KHÓA LIÊN QUAN

w