Các điều khiển trên biểu mẫu chỉ là một phần nhỏ của quá trình lập trình phát triển ứng dụng, nhằm tạo ra giao diện cho ứng dụng. Sau đó, bạn cần viết chương trình để ứng dụng hoạt động. Do đó, chương này sẽ đi sâu vào phần công việc chính của Visual Basic, viết chương trình.
Visual Basic là ngôn ngữ lập trình dựa trên đối tượng. Nếu bạn là người mới học, chương này sẽ giới thiệu các khối thiết kế cơ bản để xây dựng chương trình. Khi đã hiểu được các khái niệm cơ bản, bạn có thể tạo ra các ứng dụng rất mạnh bằng Visual Basic.
Chuẩn lập trình (Coding convention)
Coding conventions
Object Naming Conventions
Object name has 2 parts: prefix and description.
The prefix that makes it easy to identify the type of object, the description mentions name of objects.
- Conventions of description part are:
+ In English.
+ Can contain many words, each word is contiguous to others (No hyphen).
+ No acronym except listed in table Acronyms (see 4. Acronym).
+ Capitalize the first letter of each word.
(Note: These conventions will be applied to all of name types mentioned after in this document)
- Prefix conventions for some of the objects supported by Visual Basic are listed below (Sorted by control name):
Cont r ol t y pe | P r efix | E x a m ple |
3D Panel | Pnl | pnlGroup |
ADO Data | Ado | adoBiblio |
Animated button | Ani | aniMailBox |
Check box | Chk | chkReadOnly |
Combo box, drop-down listbox | Cbo | cboEnglish |
Command button | Cmd | cmdExit |
Common dialog | dlg | dlgFileOpen |
Communications | com | comFax |
Control (used withinprocedures when the specific type is unknown) | ctr | ctrCurrent |
Data | dat | datBiblio |
Data-bound combo box | dbcbo | dbcboLanguage |
Data-bound grid | dbgrd | dbgrdQueryResult |
Data-bound list box | dblst | dblstJobType |
Data combo | dbc | dbcAuthor |
Data grid | dgd | dgdTitles |
Data list | dbl | dblPublisher |
Data repeater | drp | drpLocation |
Date picker | dtp | dtpPublished |
Directory list box | dir | dirSource |
Drive list box | drv | drvTarget |
File list box | fil | filSource |
Flat scroll bar | fsb | fsbMove |
Form | frm | frmEntry |
Frame | fra | fraLanguage |
Gauge | gau | gauStatus |
Graph | gra | graRevenue |
Grid | grd | grdPrices |
Hierarchical flexgrid | flex | flexOrders |
Horizontal scroll bar | hsb | hsbVolume |
Image | img | imgIcon |
Image combo | imgcbo | imgcboProduct |
ImageList | ils | ilsAllIcons |
Label | lbl | lblHelpMessage |
Lightweight check box | lwchk | lwchkArchive |
Lightweight combo box | lwcbo | lwcboGerman |
Lightweight command button | lwcmd | lwcmdRemove |
Lightweight frame | lwfra | lwfraSaveOptions |
Lightweight horizontal scrollbar | lwhsb | lwhsbVolume |
Lightweight list box | lwlst | lwlstCostCenters |
Lightweight option button | lwopt | lwoptIncomeLevel |
Lightweight text box | lwtxt | lwoptStreet |
Lightweight vertical scroll bar | lwvsb | lwvsbYear |
Line | lin | linVertical |
List box | lst | lstPolicyCodes |
ListView | lvw | lvwHeadings |
MAPI message | mpm | mpmSentMessage |
MAPI session | mps | mpsSession |
MCI | mci | mciVideo |
Menu | mnu | mnuFileOpen |
Month view | mvw | mvwPeriod |
MS Chart | ch | chSalesbyRegion |
MS Flex grid | mfg | mfgClients |
MS Tab | mst | mstFirst |
OLE container | ole | oleWorksheet |
Option button | opt | optGender |
Picture box | pic | picVGA |
Picture clip | clp | clpToolbar |
ProgressBar | prg | prgLoadFile |
Remote Data | rd | rdTitles |
RichTextBox | rtf | rtfReport |
Shape | shp | shpCircle |
Slider | sld | sldScale |
Spin | spn | spnPages |
StatusBar | sta | staDateTime |
SysInfo | sys | sysMonitor |
TabStrip | tab | tabOptions |
Text box | txt | txtLastName |
Timer | tmr | tmrAlarm |
Toolbar | tlb | tlbActions |
TreeView | tre | treOrganization |
UpDown | upd | updDirection |
Vertical scroll bar | vsb | vsbRate |
Prefix conventions for menus
Menu control prefixes will be extended beyond the initial "mnu" label by adding an additional prefix for each level of nesting, with the final menu caption at the end of the name string. The following table lists some examples.
Menu caption sequence | Menu h a ndler n a me |
File Open | mnuFileOpen |
File Send Email | mnuFileSendEmail |
File Send Fax | mnuFileSendFax |
Format Character | mnuFormatCharacter |
Help Contents | mnuHelpContents |
Variable naming conventions
Variable name must describe data type, scope and identifier of a variable.
Variable data types
D ata type | P r e f i x | Ex a mple |
Boolean | bln | |
Byte | byt | |
Currency | cur | |
Date (Time) | dtm | |
Double | dbl | |
Error | err | |
Integer | int | |
Long | lng | |
Object | obj | |
Single | sng | |
String | str | |
User-defined type | udt | |
Variant | vnt |
Variable scope prefixes
Scope | P r efix | E x a m ple | N ote |
Global | G | gstrUserName | This variable is global and string type |
Module-level | M | mblnCalcInProgress | This variable is module and booleantype |
Local toprocedure | None | dblVelocity | This variable is local and double type |
Constants
The constant names will be UPPER_CASE with underscores (_) between words. For example:
Example | N ote |
USER_LIST_MAX | |
NEW_LINE |
Prefixes for ActiveX Data Objects(ADO)
Use the following prefixes to indicate ActiveX Data Objects.
A DO object | P r e f i x | Ex a mple |
Command | Cm | cmTitles |
Connection | Cn | cnTitles |
Field | Fld | fldName |
Field Collection | flds | fldsTitles |
Parameter | prm | prmTitleName |
Parameter Collection | prms | prmsNames |
Recordset | Rs | rsTitles |
Structured Coding Conventions
In addition to naming conventions, structured coding conventions, such as code commenting and consistent indenting, can greatly improve code readability.
Code Commenting Conventions
All procedures and functions should begin with a brief comment describing the functional characteristics of the procedure (what it does). Input, output patameters passed to a procedure should be described. Function return values and global variables that are changed by the procedure must also be described at the beginning of each procedure.
Section he a ding | C o mm e nt d e sc r iption |
Purpose | What the procedure does (not how). |
Inputs | Describe roles of input parameters |
Outputs | Describe roles of output parameters |
Returns | Explanation of the values returned by functions. |
Author | Author of module |
Remember the following points:
- Every important variable declaration should include an inline comment describing the use of the variable being declared.
- Variables, controls, and procedures should be named clearly enough that inline commenting is only needed for complex implementation details.
- At the start of the.bas module that contains the project's Visual Basic generic constant declarations, we should include an overview that describes the application, enumerating primary data objects, procedures, algorithms, dialogs, databases, and system dependencies. Sometimes a piece of pseudocode describing the algorithm can be helpful.
Formatting Your Code
Here are a few pointers:
- Standard, tab-based, nested blocks should be indented four spaces (as the Visual Basic default).
- The functional overview comment of a procedure should be indented one space. The highest level statements that follow the overview comment should
be indented one tab, with each nested block indented an additional tab. For
example:
'*****************************************************
' Purpose: Locates the first occurrence of a
' specified user in the UserList array.
‘ Inputs:
‘ strUserList(): the list of users to be searched.
‘ strTargetUser: the name of the user to search for.
' Returns: The index of the first occurrence of the
' rsTargetUser in the rasUserList array.
' If target user is not found, return -1.
'*****************************************************
Function FindUser (strUserList() As String, strTargetUser As _ String)As Integer
Dim inti As Integer ' Loop counter.
Dim blnFound As Integer ' Target found flag. intFindUser = -1
inti = 0
While inti <= Ubound(strUserList) and Not blnFound
If strUserList(inti) = strTargetUser Then blnFound = True
intFindUser = inti
End If
Wend
End Function
Grouping Constants
Visual Basic generic constants will be grouped in a single module to separate them from application-specific declarations.
& and + Operators
Always use the & operator when linking strings and the + operator when working with numerical values. Using the +operator to concatenate may cause problems when operating on two variants. For example:
vntVar1 = "10.01"
vntVar2 = 11
vntResult = vntVar1 + vntVar2 'vntResult = 21.01
vntResult = vntVar1 & vntVar2 'vntResult = 10.0111
Creating Strings for MsgBox, InputBox, and SQL Queries
When creating a long string, use the underscore line-continuation character to create multiple lines of code so that you can read or debug the string easily. This technique is particularly useful when displaying a message box (MsgBox) or input box (InputBox) or when creating an SQL string. For example:
Dim Msg As String
Msg = "This is a paragraph that will be " _
& "in a message box. The text is" _
& " broken into several lines of code" _
& " in the source code, making it easier" _
& " for the programmer to read and debug."
MsgBox Msg
Dim QRY As String
QRY = "SELECT *" _
& " FROM Titles" _
& " WHERE [Year Published] > 1988"
TitlesQry.SQL = QRY
Other conventions
Error trapping in development progress must follow these rules:
- Cascading error trapping. That mean all called functions will return system error codes, and showing message box will be implemented at the most exterior function/procedure.
- All system message will be located in resource file.
- Showing message boxes are implemented by pass parameters to a showing message global function.
Items | Conversations | Note | |
Interface | In Vietnamese | ||
Font name | MS Sans serif | Default | |
Font size | Default | ||
Font color | Black | Default | |
Font style | Normal | Default | |
Distance between command buttons | 100 Points | ||
Command buttons alignment | Right | ||
Label alignment | Left | ||
All labels in a form must be collected in an array | |||
All command buttons in a form must have same width | |||
Caption of OK button | Chấp nhận | ||
Caption of Cancel button | Thoát | ||
Caption of Help button | Hướng dẫn | ||
Caption of Add button | Thêm mới | ||
Caption of Delete button | Xoá | ||
Caption of Edit button | Sửa | ||
Caption of Close button | Đóng | ||
Caption of Save button | Ghi | ||
Order of buttons in from (Left to right): | |||
Thªm míi-Ghi-Söa-Xo¸-ChÊp nhËn-Tho¸t-H- íng dÉn | |||
Default button | Chấp nhận | ||
Cancel button | Đóng |
- Error code contains 3 number.
- Versioning all modules: form module, code module...
- Display solution: 800x600 pixels
- Font size setting: Large font
- All of file name (*.vbp, *.frm, *.bas...) must less than 3 characters.
- Error code = 0 is OK.
- Error code < 0 is error.
- Error code >0 is warning.
- Function names should begin with a verb, such as InitNameArray or CloseDialog.
Form design standard
Common conventions in form design
Sample:
Form controls appearance conventions
C ont r ol | P r operty | V a lue | N ote |
Check box | |||
All colors | Default | ||
Combo box, drop-down list box | |||
Height | 315 | ||
All colors | Default | ||
Command button | |||
Height | 375 Points | ||
Back color | Button face | VB Default | |
Form | |||
Border style | Fixed length | ||
Back color | Button face | VB Default | |
Startup position | CenterScreen | ||
Label | |||
Back color | Button face | VB Default | |
Vervical scroll bar | |||
Width | 260 Points | ||
Horizontal scroll bar | |||
Height | 260 Points | ||
Option button | |||
Height | 255 Points | ||
Text box | |||
Height | 285 Points | ||
All color | Default |
Report design standard (for Crystal Report)
Common conventions in report design
Items | Conventions | Note |
Above of each total row must be a line, calledGrouping line | ||
Report boder | Only title row isbordered | |
Colour of all objects in report (line,character...) | Black |
Report objects appearance conventions
Object | Property | Setting | Note |
Report title | |||
Font name | .VnArialH | ||
Font style | Bold | ||
Justify | Paper center | ||
Space betweenreport title and collumn heading | 50 Points | Should bereviewed | |
Colunmheading | |||
Font name | .VnArialNarrow | ||
Font style | Bold | ||
Font size | 10 | ||
Justify | Column left | ||
Before rowspacing | 6 Points | ||
After row spacing | 6 Points | ||
Report body(data) | |||
Font name | .VnArialNarrow | ||
Font style | Bold | ||
Font size | 9 | ||
Justify | Depend on column data type(Number: right, string: right, date: center) | ||
Row spacing | 0 | ||
Total row | |||
Font name | .VnArialNarrow | ||
Font style | Bold | ||
Font size | 9 | ||
Justify | Right | ||
Position | Under data block thatsummarized | ||
Grouping line | |||
Width | 1 Point | ||
Report boder | |||
Width | 1 Point | ||
Boder columntitle only | |||
Page number | |||
Font name | .VnArial | ||
Font size | 9 | ||
Font style | Normal | ||
Position | Right, bottom of page (Reportfooter) | ||
Style | Page/Total page | ||
Left sub title | |||
Font name | .VnArial | ||
Font size | 10 | ||
Font style | Normal | ||
Justify | Margin left | ||
Right sub title | |||
Font name | .VnArial | ||
Font size | 10 | ||
Font style | Normal |
Sample:
Left subtitle Report title Right subtitle

Database design standards
All of object names (include: table names, view names, field names...) in database must follow these conventions:
- In English.
- Can containts one or more words and no underscore between these words.
- No acronym except listed in table Acronyms bellow.
- The first letter of each word must be capitalized.
Thiết kế trước khi viết chương trình
Có lẽ khâu quan trọng nhất trong lập trình là thiết kế. Sau khi thiết kế giao diện, bạn cần thiết kế cấu trúc chương trình. Cách thiết kế khác nhau sẽ dẫn đến cách hoạt động khác nhau và bảo trì, theo đó cũng khác nhau.
Code trong VB được tổ chức theo dạng cây phân nhánh. Một ứng dụng thông thường chứa một hoặc nhiều mô-đun. Mỗi biểu mẫu có một mô-đun, có thể thêm những mô-đun chuẩn chứa những đoạn chương trình dùng chung, và cũng có thể có thêm mô-đun lớp.
Các thao tác thông dụng trong cửa sổ Code
Soạn thảo Code
Ngoài khả năng soạn thảo văn bản để viết chương trình, cửa sổ Code còn hỗ trợ một số chức năng khác như:
Đánh dấu (marks)
Dùng đánh dấu các dòng chương trình trong cửa sổ Code để dễ dàng xem lại về sau. Để bật tắt khả năng này, cũng như tìm kiếm dấu hiện hành, chọn Bookmarks từ menu Edit, hoặc chọn từ thanh công cụ Edit.
Dùng phím trong cửa sổ Code
Chức n ă ng | Ph í m tắt |
Xem cửa sổ Code | F7 |
Xem cửa sổ Object Browser | F2 |
Tìm kiếm | CTRL + F |
Thay thế | CTRL + H |
Tìm tiếp | SHIFT + F4 |
Tìm ngược | SHIFT + F3 |
Chuyển đến thủ tục kế tiếp | CTRL + DOWN ARROW |
Chuyển đến thủ tục trước đó | CTRL + UP ARROW |
Xem định nghĩa | SHIFT + F2 |
Cuộn xuống 1 màn hình | CTRL + PAGE DOWN |
Cuộn lên một màn hình | CTRL + PAGE UP |
Nhảy về vị trí trước đó | CTRL + SHIFT + F2 |
Trở về đầu của mô-đun | CTRL + HOME |
Đến cuối mô-đun | CTRL + END |
Chức n ă ng | Ph í m tắt |
Dời con trỏ sang phải 1 từ | CTRL + RIGHT ARROW |
Dời con trỏ sang trái 1 từ | CTRL + LEFT ARROW |
Dời con trỏ về cuối dòng | END |
Dời con trỏ về đầu dòng | HOME |
Lấy lại hành động trước đó | CTRL + Z |
Xoá dòng hiện hành | CTRL + Y |
Xoá 1 từ | CTRL + DELETE |
Canh trái | TAB |
Bỏ hành động canh trái trước đó | SHIFT + TAB |
Xoá tất cả các điểm dừng (break-points) | SHIFT + SHIFT + F9 |
Xem menu cảm ngữ cảnh | SHIFT + F10 |
Một số chức năng tự động
Auto Syntax Check
Từ menu Tools, chọn Option… Hộp thoại xuất hiện
Khi Auto Syntax Check không bật lên, nêu ta viết 1 dòng chương trình như sau: Form1.left =
rồi nhấn phím Enter. VB sẽ hiển thị dòng chương trình sai với mầu đỏ. Tuy nhiên, nó không giải thích thêm và ta có thể tiếp tục gõ chương trình. Nếu Auto Syntax Check được bật lên, khi ta vừa nhấn phím Enter, VB lập tức cho ta biết một số thông tin về lỗi và hiển thị con trỏ ngay dòng chương trình sai để chờ ta sửa. Trong trường hợp này, VB cần một giá trị bên phải dấu bằng.
Biến hằng và các kiểu dữ liệu
Dùng để chứa dữ liệu tạm thời cho tính toán, so sánh các hoạt động khác
Khai báo biến
Để khai báo biến ta dùng lệnh Dim: Dim <Tên biến > [As<kiểu dữ liệu>]
Biến khai báo trong thủ tục chỉ tồn tại khi thủ tục thi hành. Nó sẽ biến mất khi thủ tục chấm dứt. Giá trị của biến trong thủ tục là cục bộ đối với thủ tục đó, nghĩa là ta không thể truy nhập biến từ bên ngoài thủ tục. Nhờ đó, ta có thể dùng trùng tên biến cục bộ trong những thủ tục khác nha.
Kiểu dữ liệu trong khai báo Dim có thể là những kiểu cơ bản như Integer, String hoặc Currency. Ta cũng có thể dùng đối tượng của VB (như Object, Form1, TextBox) hoặc của các ứng dụng khác.
Khai báo biến trong phần Declarations của một mô-đun nghĩa là biến đó tông tại và có tầm hoạt động trong mô-đun đó.
Khai báo biến với từ khoá Public nghĩa là biến đó tồn tại và có tầm hoạt động của toàn ứng dụng .
Khai báo biến cục bộ với từ khoá Static nghĩa là mặc dầu biến đó biến mất khi thủ tục chấm dứt, nhưng giá trị của nó vẫn được giữ lại để tiếp tục hoạt động khi thủ tục được gọi trong lần sau.
Khai báo ngầm
Nghĩa là ta không cần khai báo tường minh trước khi sử dụng biến.
Function SafeSqr(num)
TempVal = Abs(num) SafeSqr = Sqr(TempVal)
End Function
Mặc dù cách này có vẻ thuận tiện nhưng có thể gây lỗi nếu ta gõ nhầm tên biến.
unction SafeSqr(num)
TempVal = Abs(num) SafeSqr = Sqr(TemVal)
End Function
Hàm này trả về zero. Khi VB gặp tên mới, nó tạo ra một biến khác với tên đó.
Khai báo tường minh
Để tránh những rắc rối trên, ta nên quy định VB phải báo lỗi khi gặp một tên biến không khai báo. Ta đặt dòng lệnh :
Option Explicit
Trong phần Declarations của mô-đun. Một cách khác, từ menu Tools, chọn
Options, chọn tab Editor và đánh dấu vào tuỳ chọn Require Variable Declaration. VB tự động chèn dòng lệnh Option Explicit vào một mô-đun mới, nhưng không phải là những mô-đun đã được tạo. Do đó, đối với các mô-đun này, ta phải thêm dòng lệnh bằng tay.
Option Explicit chỉ hoạt động trên từng mô-đun. Vì vậy, ta phải thêm dòng này vào mỗi mô-đun của biểu mẫu, mô-đun chuẩn, hay mô-đun lớp.
Tầm hoạt động của biến
Tầm hoạt động | Private | Public |
Thủ tục | Biến chỉ tồn tại và hoạt động trongthủ tục | Không có |
Mô-đun | Biến chỉ tồn tại và hoạt động trongmô-đun | Biến tồn tại và hoạt độngtrên mọi mô-đun |
Khai báo biến Static
Để khai báo tát cả các biến cục bộ trong một thủ tục là Static, ta đặt từ khoá Static vào tên thủ tục:
Static Function RunningTotal(num)
VB sẽ hiểu rằng tất cả các biến khai báo trong thủ tục này đều là Static, dù cho chúng được khai báo là Private, là Dim hoặc thậm chí khai báo ngầm.
Từ khoá Static có thể đặt ở đầu thủ tục Sub hoặc Function, kể cả thủ tục xử lý sự kiện hoặc những hàm Private.
Hằng
Dùng để chứa những dữ liệu tạm thời nhưng không thay đổi trong suốt thời gian chương trình hoạt động. Sử dụng hằng số làm chương trình sáng sủa và dễ đọc nhờ những tên gợi nhớ thay vì các con số. VB cung cấp một số hằng định nghĩa sẵn, nhưng ta có thể tự tạo hằng.
Ta có thể dùng cửa sổ Object Browser để xem danh sách các ứng dụng hằng có sẵn của VB và VBA( Visual basic for Application). Các ứng dụng khác cung cấp những thư viện đối tượng, như Microsoft Exel, Microsoft Project, hoặc các thư viện của điều khiển ActiveX cũng có hằng định nghĩa sẵn.
Trong trương hợp trùng tên hằng trong những thư viện khác nhau, ta có thể dung cách chỉ rõ tham chiếu hằng:
[<Libname>][<tên mô-đun>]<tên hằng>
Libname là tên lớp, tên điều khiển hoặc tên thư viện.
Khai báo hằng
|Public|private|Const<tên hằng>[As<kiểu dữ liệu>]= <biểu thức>
Tầm hoạt động
Hằng cũng có tầm hoạt động tương tự biến:
- Hằng khai báo trong thủ tục chỉ hoạt động trong thủ tục
- Hằng khai báo trong mô-đun chỉ hoạt động trong mô-đun
- Hằng khai báo Public trong phần Declarations của mô-đun chuẩn có tầm hoạt động trên toàn ứng dụng.Khai báo Public không thể dùng trong mô-đun của biểu mẫu hoặc mô-đun lớp.
Kiểu dữ liệu
Kiểm soát nội dung của dữ liệu. VB dùng kiểu Variant như là kiểu mặc định. Ngoài ra, một số kiểu dữ liệu khác cho phép tối ưu hoá về tốc độ và kích cỡ chương trình. Khi dùng Variant, ta không phải chuyển đổi giữa các kiểu dữ liệu. VB tự động làm việc đó.
Một dòng lệnh có thể kết hợp nhiều kiểu khai báo :
Private I as Interger, Amt as double
Private YourName as String, BillsPaid as Currency
Private Test,Amount, J as integer
Kiểu số
Integer, Long, Double và Currency. Kiểu số tốn ít vùng chứa hơn kiểu Variant. Tất cả biến kiểu số có thể được gán cho nhau và cho biến Variant. VB làm tròn thay vì chặt bỏ phần thập phân trước khi gắn nó cho số Integer.
Kiểu Integer tốn ít vùng nhớ hơn các kiểu khác, nó thường dùng làm biến đếm trong các vòng lặp For....Next.
Kiểu Single, Double, Currency dùng cho các số có phần thập phân. Currency hỗ trợ đến 4 chữ số phần thập phân và 15 chữ số cho phần nguyên, đùn cho ácc tính toán tiền tệ.
Các giá trị dấu chấm động được thể hiện là :A*10B.Ví dụ:
1.2341E12=1.2341 *1012
3.402823E+38 cho số Single hoặc 1.7976931486232D+308 cho số Double
Ta dùng các phép cộng (+), trừ(-) nhân(*), chia(/ hoặc\). Dấu / là số chia thập phân.
5/3 cho kết quả là 1.66666666667. Trong khi 5/3 cho kết quả là 1, phần thập phân bị chặt bỏ. Phép tính này đặc biệt nhanh khi sử dụng trong vòng lặp.
Kiểu Byte
Thường dùng đẻ chứa dữ liệu nhị phân. Tất cả các thao tác trên kiểu Integer có thể thực hiện trên kiểu Byte, ngoại trừ dấu. Vì Byte là kiểu không dấu (trong khoản từ 0- 255), nó không thể nhận ra số âm.
Kiểu String
Mặc định, biến hay tham số kiểu chuỗi có chiều dài thay đổi, nó có thể tăng hoặc giảm tuỳ theo ta gán dữ liệu. Ta có thể khai báo chuỗi có chiều dài cố định:
Dim EmpName As String *50
Nếu ta gán một chuỗi ngắn hơn 50 ký tự, EmpName sẽ được thêm vào phần đuôi các kỹ tự khoảng trắng cho đầy 50 ký tự, nếu chuỗi gán vào dài hơn 50 ký tự, VB tự động chặt bỏ.
Khi làm việc với chuỗi, ta cần dùng các ham Trim và RTrim để cắt bỏ các ký tự trắng không cần thiết. Ngoài ra một số hàm thông dụng để thao tác trên chuỗi như:
a. Len: Lấy chiều dài chuỗi
b. Mid$: Trích chuỗi con từ chuỗi gốc
c. Left$: Trích chuỗi con từ phần đầu chuỗi gốc.
d. Right$:Trích chuỗi con từ phần đuôi của chuỗi gốc.
e. InStr: Tìm chuỗi con trong chuỗi gốc. Nếu hàm InStr trả về 0, nghĩa là không tìm thấy.
Tìm kiếm không phân biệt cõ chữ. Nhưng nếu tham số thứ 3 là vbBinaryCompare thì đây là tìm kiếm chuỗi có phân biệt chữ in hoa và chữ in thường.
f. Replace: Tìm và thay thể chuỗi. Replace(“Peter PeterWright”,” Peter ”,John,6) Chuỗi kết quả là “John Wright”, bắt đầu từ vị trí thứ 6. Nếu muốn giữ lại phần đầu
ta làm như sau:
Left$(“Peter Peter Wright”,5)&Replace (“Peter Peter Wright”,”Peter”,”John”,6) Một tham số khác là số lần thay thế:
Replace(“Peter Peter Peter Wright”,”Peter”,”Hooray”,1,2)
Kết quả là “Hooray Hooray Peter Wright”, nghĩa là hai lần thay thế. THam số này mang giá trị mặc định là -1, nghĩa là thay thế toàn bộ.
Tham số cuối cùng tương tự hàm Instr(), cho biết nó có phân biệt chữ in hoa và chữ thường hay không
Replace(“Peter Wright, “Peter”, “P.”,1,-1,vbTextCompare) Kết quả là “P.Wright”.
Chuỗi có chiều dài cố định được khai báo Public hay Private trong mô-đun chuẩn. Trong mô-đun của biểu mẫu hoặc mô-đun lớp, nó phải được khai báo Private.
VB cho phép chuyển đổi một chuỗi thành thành một số nếu chuỗi đang thể hiện một con số. Ngược lại, ta cũng có thể chuyển một số thành chuỗi. Tuy nhiên nên cẩn thận, vì chuyển đổi một chuỗi có giá trị không phải số sẽ gây lỗi chương trình thi hành.
Một số lập trình viên Visual Basic thích dùng dấu + để nối chuỗi thay vì dùng dấu &. Mặc dù không khác nhau lắm, nhưng thực ra dùng dấu + có điểm bất tiện. Vì là phép toán, nó có kiểm tra kiểu. Nếu ta có một số và một chuỗi nối với nhau, nó sẽ chuyển đổi từ số sang chuỗi trước khi thực sự kết nối. Hơn nữa, việc chuyển đổi này được làm tự động, không hề báo lỗi khi biên dịch.
Kiểu Boolean
Nếu ta có một biến có hai giá trị True/False, Yes/No,On/Off, ta nên dùng kiểu Boolean. Giá trị mặc định của Boolean là False.
Dim blnRunning as Boolean
‘ Check to see ì the tape is running.
If recorder.Direction = 1 Then blnRunning = True
End if
Kiểu Date
Khi các kiểu dữ liệu khác được chuyển sang Date, giá trị đứng trước dấu chấm là ngày, giá trị đứng sau dấu chấm là giờ. Nửa đêm là 0, giữa ngày là 0,5. Dấu âm thể hiện ngày trước 30/12/1999. Kiểu Date đã giải quyết vấn đề Y2K
Nhấn Ctrl-G để hiển thị cửa sổ Immediate.
Gõ vào:
“01/02/98” và nhấn Enter.
Nếu hiểu theo người Mỹ, “01/02/98” có nghĩa là ngày 2 tháng Giêng năm 1998, nếu hiểu theo người Anh thì đây là ngày 1 tháng 2 năm 1998. Nếu dùng ngày như trong hình trên thì VB hiểu rằng lấy 1 chia cho 2 rồi lấy kết quả chia cho 98!
Trở lại cửa sổ Immediate gõ vào: ?#01/02/98#
Dấu # cho biết là dữ liệu kiểu Date, không phải một biểu thức toán học. Tuy nhiên, định dạng ngày tháng hiển thị phụ thuộc vào quy định của Windows.
Hộp thoại này hiển thị khi người sử dụng nhấp đúp chuột vào biểu tượng Regional Setting trong cửa sổ Control Panel của Windows. Nó cho phép quy định kiểu ngày tháng tuỳ thuộc quốc gia. Bên trong chương trình VB xử lý ngày tháng theo kiểu Mỹ
#01/02/98# là ngày 2 tháng Giêng năm 1998, nhưng nếu máy đang dùng theo hệ Anh thì nó sẽ hiển thị trên cửa sổ Immediate là 2/1/98
Kiểu Object
Biến kiểu Object chứa một địa chỉ 4 byte (32bit) trỏ đến đối tượng trong ứng dụng hiện hành hoặc các ứng dụng khác. Dùng lệnh Set để chỉ ra đối tượng thực sự:
Dim objDb As Object
Set objDb=OpenDatabase(“c:\vb5\Biblio.mdb”)
Khi khai báo biến đối tượng, nên chỉ ra tên lớp tường minh, như TextBox thay vì Control, Database thay vì Object). Ứng dụng sẽ chạy nhanh hơn, ta có thể xem danh sách các lớp trong cửa sổ Object Browser.
Kiểu Variant
Có thể chứa mọi loại dữ liệu, số, thậm chí mảng. Ta không cần chuyển đổi kiểu dữ liệu, VB làm việc đó một cách tự động.
Dim Somevalue 'Variant by default
Somevalue = "17" 'SomeValue contains "17"(a two character string). Somevalue = Somevalue – 15'somevalue now cotains the numeric value 2. Somevalue = "U" & Somevalue 'somevalue now cotains.
Variant cũng thuận tiện khi ta không biết trước kiểu dữ liệu
Private Sub cmdExplore_click() Dim VarVariant As Variant VarVariant = 12
Form1.Print VarType(VarVariant) VarVariant = "Peter"
Form1.Print VarType(VarVariant) VarVariant = True
Form1.Print VarType(VarVariant) VarVariant = #1/1/2001# Form1.Print VarType(VarVariant) End Sub
Hàm VarType kiểm tra kiểu dữ liệu
Giá trị VarType | Giải thích |
0 – vbEmpty | Không chứa gì cả |
1 – vbNull | Không có dữ liệu hợp lệ |
2 – vbInteger | Dữ liệu Integer dạng chuẩn |
3 – vbLong | Dữ liệu kiểu Long Integer |
4 - vbsingle | Dữ liệu kiểu chấm động single |
5 – vbDouble | Dữ liệu kiểu chấm động Double |
6 – vbCurrency | Kiểu Currency |
7 – vbDate | Kiểu ngày giờ |
8 – vbString | Kiểu chuỗi đơn giản |
9 – vbObject | Kiểu đối tượng |
10 – vbError | Có một đối tượng Error |
11 – vbBoolean | Kiểu giá trị Boolean chuẩn |
12 – vbVariant | Kiểu Variant |
13 – vbDataObject | Kiểu DAO chuẩn |
14 – vbDecimal | Giá trị thuộc hệ thập phân Decimal |
17 – vbByte | Kiểu Byte |
36 – UserDefinedType | Kiểu do người dùng định nghĩa |
8192 - vbArray | Kiểu mảng |
Tuy nhiên cần chú ý khi dùng biến Variant:
- Nếu muốn thi hành các hàm số học, Variant phải chứa giá trị số.
- Nếu muốn nối chuỗi, dùng toán tử & thay vì toán tử +.
Giá trị Empty
Đôi khi ta cần kiểm tra một giá trị có được gán cho biến hay chưa. Biến Variant có giá trị Empty trước khi nó được gán giá trị. Giá trị Empty là một giá trị đặc biệt không phải zero, không phải chuỗi rỗng(“”), không phải giá trị Null. Ta dùng ham IsEmpty để kiểm tra giá trị Empty: If IsEmpty(z) then z =0
Khi một biến Variant chứa giá trị Empty, ta có thể dùng nó trong biểu thức. Nó có thể được xem là 0 hoặc chuỗi rỗng tuỳ theo biểu thức.
Giá trị Empty biến mất khi có một giá trị bất kỳ được gán cho Variant. Muốn trở về giá trị Empty, ta gán từ khoá Empty cho Variant.
Giá trị Null
Biến Variant chứa giá trị Null dùng trong những ứng dụng cơ sở dữ liệu thể hiện không có dữ liệu hoặc dữ liệu không xác định.
Dùng hàm IsNull để kiểm tra biến Variant có chứa Null hay không. Biến không bao giờ mang giá trị Null nếu ta không gán trực tiếp cho nó. Vì vậy, không cần phải dùng hàm IsNull.
Nếu gán Null cho một biến khác kiểu Variant, VB sẽ báo lỗi.
Giá trị Error
Trong một biến Variant, Error là một giá trị đặc biệt thể hiện một điều kiện lỗi vừa xảy ra trong thủ tục. Tuy nhiên, không như các lỗi khác, các xử lý lỗi thông thường của ứng dụng không xảy ra. Do đó, ta có thể xử lý dựa trên các giá trị lỗi. Giá trị Error được sinh ra bằng cách chuyển đổi giá trị lỗi dùng cho hàm CVErr.
Chuyển đổi giữa các kiểu dữ liệu
H à m c h uyển đổi | Đổi sang kiểu |
Cbool | Boolean |
Cbyte | Byte |
Ccur | Currency |
CDate | Date |
CDbl | Double |
Cint | Integer |
CLng | Long |
CSng | Single |
Cstr | String |
Cvar | Variant |
CVErr | Error |
Lưu ý rằng giá trị truyền cho hàm phải hợp lệ, nghĩa là phải thuộc khoảng của kiểu kết quả. Nếu không VB sẽ báo lỗi.
Kiểu mảng(Array)
Mảng là một xâu các biến có cùng tên và cùng kiểu dữ liệu. Dung Array làm chương trình đơn giản và rút gọn, vì ta có thể dùng vòng lặp. Mảng có biên trên và biên dưới, và các thành phần trong mảng là liên tục giữa 2 biên.
Khái niệm mảng ở đây khác với mảng các điều khiển (Control Array). Control Array không cho phép nạp hay thoát khỏi một thành phần ở giữa Array.
Có 2 loại biến mảng mảng có chiều dài cố định và mảng động, có chiều dài thay đổi lúc thi hành. Mảng có chiều dài cố định có thể được khai báo Public trong ứng dụng.
Private trong mô-đun hoặc Private trong một thủ tục.
Mảng có chiều dài cố định
Biên trên và biên dưới
Biên trên được xác định ngay lúc khai báo .
Dim counters(14) As Integer
Public sums(20) As Double
Mặc định, biên dưới là 0. Ta có thể khai báo tường minh biên dưới:
Dim counter(1 To 15) As Integer
Dim sums(100 To 120) As String
a. Hàm UBound trả về phần tử cuối của mảng(Upper Bound).
b. Hàm LBound trả về phần tử đầu tiên của mảng (Lower Bound).
Mảng trong mảng
Private Sub command1_click() Dim intX As Integer
'Declare and populate an integer array
Dim countersA(5) As Integer
For intX = 0 To 4 countersA(intX) = 5
Next intX
'Declare and populate a string array
Dim countersB(5) As String
For intX = 0 To 4 countersB(intX) = "Hello" Next intX
Dim arrX(2) As Variant
'Declare a new two-member
arrX(1) = countersA()
arrX(2) = countersB()
MsgBox arrX(1)(2)
' display a member of each array
MsgBox arrX(2)(3)
End Sub
Mảng nhiều chiều
Ta khai báo một mảng 2 chiều có 10 phần tử
Static MatrixA(9, 9) As Double
Static MatrixA(1 To 10, 1 To 10) As Double
Dim MultiD(3, 1 To 10, 1 To 15)
Khai báo này tạo ra một mảng 3 chiều có kích cỡ 4×10×15, là số phần tử của ma trân,600
Nên thận trọng trong khi sử dung các mảng nhiều chiều, nhất là các mảng các Variant vì nó lớn hơn các kiểu dữ liệu khác.
Mảng động(dynamic Array)
Mảng này có thể thay đổi kích cỡ. là một trong những ưu điểm của Visual Basic, mảng động giúp quản lý bộ nhớ một cách hiệu quả. Ta có thể dùng một mảng lớn trong thời gian ngắn, sau đó xoá bỏ để trả vùng nhớ cho hệ thống
Khai báo
- Khai báo Public hoặc Dim trong mô-đun, hoặc khai báo Static hay Dim trong thủ tục. Khai báo một mảng động bằng cách cho nó một danh sách không theo chiều nào cả.
Dim DynArray(0
- Cấp phát số phần tử thực sự bằng dòng lệnh ReDim.
ReDim DynArray(x+1)
Sử dụng ReDim
Dòng lệnh ReDim chỉ có thể xuất hiện trong thủ tục. Khác với Dim hay Static, ReDim là một dòng lệnh thi hành, nó làm ứng dụng phải thực hiện một hành động lúc chạy chương trình. Sử dụng ReDim tương tự trong mảng có chiều dài cố định, dùng thay đổi số phần tử cũng như biên trên hoặc biên dưới. tuy nhiên, số chiều không thay đổi.
ReDim DynArray(4 to 12)
Dim Matrix1() as integer Sub CalcValuesNow()
ReDim Matrix1(19,29)
End sub
Mỗi lần gọi ReDim, tất cả các giá trị chứa trong mảng hiện hành bị mất. Vb khởi tạo lại giá trị cho chúng (Empty đối với mảng Variant, 0 cho mảng số, chuỗi rỗng cho mảng chuỗi, hoặc nothing cho mảng các đối tượng). Cách này tiện lợi khi ta muốn thêm dữ liệu mới hoặc muốn xoá bớt vùng nhớ. Đôi khi, ta muốn thay đổi kích cỡ của mảng mà không mất dữ liệu. Ta dùng ReDim với từ khoá Preserve. Ví dụ, mở rộng mảng thêm một phần tử và không mất dữ liệu:
ReDim Preserve DynArray(UBound(DynArray)+1)
Tuy nhiên chỉ có biên trên của chiều cuối cùng trong mảng được thay đổi khi ta dùng Preserve. Nếu thay đổi chiều khác, hoặc biên dưới của chiều cuối cùng VB sẽ báo lỗi.
Một số tính năng mở rộng của mảng
Không những gán mảng cho một mảng, ta còn tạo các hàm trả về mảng và các thuộc tính trả về mản. Trong nhiều trường hợp, những kỹ thuật này sẽ cải tiến đáng kể tốc độ xử lý chương trình
Sao chép mảng
Trong Visual Basic 5, để sao chép từ một mảng sang một mảng khác, ta phải dung vòng lặp For Each quét qua mảng nguồn, rồi tuần tự ReDim lại mảng đích để copy từng phần tử.
Tuy nhiên cách này chỉ áp ụng cho mảng Dynamic mà thôi. Khi gán biến, có một số quy luật mà ta cần nhớ. Ví dụ: Ta có thể gán một giá trị kiểu Integer vào biến long, không vấn đề nhưng gán Long cho Integer sẽ gây lỗi tràn. Ngoài quy luật về kiểu dữ liệu, việc gán mảng cũng có những quy luật liên quan đên số chiều, kích thước của chiều và laọi mảng gì (mảng có chiều dài cố định hay mảng động)
Gán mảng với chiều và kiểu dữ liệu khác nhau có thể không thành công, do những nguyên nhân sau:
- Mảng bên trái dấu gán(=) là mảng chiều dài cố định hay mảng động
- Số chiều của mảng bên trái có đồng nhất với số chiều của mảng bên phải không
- Số phần tử trên mỗi chiều của mỗi bên có tương thích không. Chiều có thể tương thích thậm chí khi khai báo khác nhau, ví dụ như một mảng bắt đầu từ số 0 trong khi mảng kia bắt đầu từ số 1 miên là chúng có cùng số phần tử
Kiểu dữ liệu cảu các phần tử mỗi bên phải tương thích.
Hàm và thủ tục
- Chia nhỏ chương trình thành nhiều phần logic, giúp gỡ rối dễ dàng.
- Thủ tục có thể được sử dụng lại trong một ứng dụng khác.
Các loại thủ tục
a. Thủ tục không trả về giá trị
[Private | Public | Static] Sub <Tên thủ tục> (Tham số)
Các dòng lệnh
End sub
b. Hàm luôn trả về giá trị:
[Private | Public | Static] Function <Tên hàm> (Tham số) [As <Kiểu dữ liệu>]
Các dòng lệnh
End Function
Trong trường hợp không khai báo As <type>, mặc định, VB hiểu là kiểu variant
c. Thủ tục thuộc tính
Có thể trả về và gán giá trị, hay đặt tham chiếu đến đối tượng.
Xem thủ tục trong module hiện hành
Trong cửa sổ code, chọn Genaral trong hộp Object, và chọn tên thủ tục trong hộp
Procedure.
Để xem thủ tục xử lý sự kiện chọn tên đối tượng từ hộp Object trong cửa sổ code, sau đó chọn tên sự kiện trong hộp procedure
Thoát khỏi thủ tục /hàm
Exit sub dùng để thoát khỏi thủ tục, Exit Function dùng để thoát khỏi hàm.
Cấu trúc điều khiển
Cấu trúc chọn
So sánh mặc định trong Visual basic mặc định là so sánh có phân biệt cỡ chữ. Nếu muốn tắt chế độ này, ta thêm dòng khai báo sau vào chương tình
Option Copare Text
Nếu muốn trả về trạng thái ban đầu, có 2 cách: Đưa dòng khai báo:
Option Compare Binary
Chỉ cần xoá dòng khai báo “Option Compare Text” Các biểu thức so sánh
K ý hiệu | Ý nghĩa |
= | Bằng |
<> | Khác |
> | Lớn hơn |
< | Nhỏ hơn |
>= | Lớn hơn hoặc bằng |
<= | Nhỏ hơn hoặc bằng |
If.. Then
Một dòng lệnh
If <điều kiện> Then
<dòng lệnh> Nhiều dòng lệnh
If <điều kiện>
Then
<dòng lệnh>
End if
Điều kiện là một so sánh hay một biểu thức mang giá trị số. Visual basic thông dịch giá trị này thành True / False. Nếu True thì Visual basic thi hành dòng lệnh sau từ khoá Then.
If.. Then...Else
If <điều kiện 1> Then
[Khối lệnh - 1]
Else
If <điều kiện 2> Then
[Khối lệnh - 2]
...... Else
[Khối lệnh - n]
End if
Select Case
Giải quyết trường hợp có quá nhiều ElseIf được dùng, giúp chương trình sáng sủa dễ đọc. Biểu thức để so sánh được tính toán một lần vào đầu cấu trúc. Sau đó Visual basic so sánh kết quả biểu thức với từng Case. Nếu bằng nó thi hành khối lệnh trong Case đó.
Select Case <biểu thức kiểm tra>
Case <danh sách biểu thức 1> Khối lệnh 1
Case <danh sách biểu thức 2> Khối lệnh 2
.................... Case else
Khối lệnh n
End Select
Mỗi danh sách biểu thức chứa một hoặc nhiều giá trị, các giá trị cách nhau bằng dấu phảy. Mỗi khối lệnh có thể chứa từ 0 đến nhiều dòng lệnh. Nếu có hơn một Case thoả mãn điều kiện thì Case đầu tiên được thực hiện. Case else không nhất thiết phải có, dùng trong trường hợp còn lại của các Case trước.
Cấu trúc lặp
Do..loop
Thi hành một khối lệnh với số lần lặp không định trước, tỏng đó, một biểu thức điều kiện dùng so sánh để quyết định vòng lặp có tiếp tục hay không. điều kiện phải quy về False hoặc True.
Kiểu 1:
Do While <điều kiện>
<khối lệnh> Loop
Kiểu 2:Vòng lặp luôn có ít nhất một lần thi hành khối lệnh
Do
<Khối lệnh>
Loop While <điều kiện>
Kiểu 3: Lặp trong khi điều kiện là False
Do until <điều kiện>
<khối lệnh> Loop
Kiểu 4: Lặp trong khi điều kiện là False và có ít nhất một lần thi hành khối lệnh
Do
<khối lệnh>
Loop Until
For...Next
Biết trước số lần lặp. Ta dùng biến đếm tăng dần hoặc giảm dần trong vòng lặp.
For <biến đếm> = <điểm đầu> To <điểm cuối> [Step <bước nhảy>]
<Khối lệnh>
Next [<Biến đếm>]
Biến đếm, điểm đầu, điểm cuối và bước nhảy là những giá trị số.
Bước nhảy có thể là âm hoặc dương. Nếu bước nhảy là dương, điểm đầu phải nhỏ hơn hoặc bằng điểm cuối, nếu bước nhảy là âm thì ngược lại.
For Each...Next
Tương tự vòng lặp For... Next, nhưng nó lặp khối lệnh theo số phần tử của một tập các đối tượng hay một mảng thay vì theo số lần lặp xác định. Vòng lặp này tiện lợi khi ta không biết chính xác bao nhiêu phần tử trong tập hợp.
For Each <phần tử> In <Nhóm>
<khối lệnh>
Next <phần tử>
Vòng lặp While...Wend
Tương tự vòng lặp Do...While, nhưng ta khôing thể thoát vòng lặp bằng lệnh Exit.
Vì vậy, vòng lặp kiểu này chỉ thoát khi biểu thức điều kiện sai.
While <điều kiện>
<khối lệnh>
Wend
Câu lệnh GoTo
Được dùng cho bẫy lỗi.
On Error Goto ErrorHandler
Khi có lỗi, chương trình sẽ nhảy đến nhãn ErrorHandler và thi hành lệnh ở đó
Làm việc với cấu trúc
Ta có thể lồng các cấu trúc với nhau ví dụ có thể lồng nhiều vòng For Nẽex với nhau. Để thoát khỏi cấu trúc ta dùng lệnh Exit, Exit for cho phép thoát khỏi vòng For, Exit do cho phép thoát khỏi Do loop.
Gỡ rối chương trình
Không một chương tình nào là không có lỗi. Tuy nhiên, giảm khả năng lỗi đến mức tối thiểu là có thể làm được. Để có chương trình tốt, ta cần có thiết kế chặt chẽ. Sau đó, chương trình phải được viết sao cho có ít sinh lỗi và nếu có thì dễ tìm.
Một số giải pháp giảm lỗi
- Thiết kế cẩn thận, ghi ra các vấn đề quan trọng và cách giải quyết cho từng phần. Ghi ra từng thủ tục và mục đích của nó.
- Chú thích rõ ràng trong chương trình
- Đối tượng có tham chiếu tường minh thay vì kiểu chung chung như Object, Control
- Tuân thủ Coding convention
- Một tỏng những nguyên nhân gây lỗi là gõ sai tên biến hoặc nhầm lẫn điều khiển. Dùng Option Explicit để tránh trường hợp này.
Truyền giá trị khi gọi thủ tục
Là một trong những cách giảm thiểu khả năng lỗi. Tuy nhiên, trở ngại duy nhất của nó là tiêu tốn nhiêềuvùng nhớ hơn truyền địa chỉ, làm chương tình chạy chậm hơn.
Đối tượng Err
Là đối tượng do Visual basic cung cấp sẵn. Nó có vô số thuộc tính. Sau đây là những thuộc tính thông dụng:
T h uộc tí n h | Giải thích |
Number | Giá trị mặc định, số hiệu lỗi |
Description | Mô tả lỗi |
Source | Tên đối tượng gây ra lỗi |
Gỡ rối
Có thể tạm dừng chương trình bằng cách chọn Break từ menu Run hoặc nhấn trên thanh công cụ, hoặc nhấn trên tổ hợp phím Ctrl-Break. Ta cũng có thể đặt dòng lệnh Stop trong chương trình nhưng sẽ có cách khác tốt hơn.
Cửa sổ Immediate
Cửa sổ này cho phép ta xem các giá trị của các biến trong form khi ta chaỵ gỡ rối
Cửa sổ Watch
Hiển thị các giá trị của một biến, thuộc tính hay biểu thức bất kỳ. Thậm chí có thể buộc chương trình tạm ngưng sau một số lần lặp.
Đi qua từng dòng chương trình
Thanh Debug
Thứ tự nút bấm từ trái sang phải như sau:
- Start: thi hành chương trình
- Break: tạm dừng chương trình
- End: Kết thúc chương trình
- BreakPoint: Điểm đánh dấu dòng lệnh để tạm dừng chương trình. Nút này được sử dụng để bật tắt chế độ breakpoint. Khi có lỗi xảy ra và ta chưa khoanh được khu vực nghi ngờ, thì Breakpoint là giải pháp tốt nhất để cô lập vùng chương trình bị lỗi.
- Step Into: Nếu dòng lệnh hiện hành đang gọi một thủ tục, nhấn F8 sẽ nhảy vào bên trong thủ tục.
- Step Over: Nếu dòng lệnh hiện hành đang gọi một thủ tục, nhấn Shipt- F8 sẽ chạy qua thủ tục.
- Step Out: Nếu điểm dừng đang ở trong một thủ tục, nhấn Ctrl-Shift-F8
sẽ chạy hết thủ tục và dừng ở dòng kế tiếp sau lệnh gọi thủ tục
- ......
Bẫy lỗi
Lệnh On Error
Lệnh On Error dùng trong hàm hay thủ tục báo cho Visual basic biết cách xử ký khi lỗi xảy ra.
On Error GoTo <Nhãn>
Dùng On error Goto 0 tắt xử lý lỗi
Kết thúc bẫy lỗi