Các toán tử logic trong vba. Toán tử logic VBA. Cú pháp và ngữ nghĩa của ngôn ngữ lập trình VBA

Ngôn ngữ VBA được thiết kế khá dễ dàng và nhanh chóng để học và sử dụng hàng ngày. Ngôn ngữ VBA hữu ích cho cả lập trình viên chuyên nghiệp và người dùng thông thường để tự động hóa công việc hàng ngày. Cho dù mục tiêu của bạn là đơn giản hóa công việc hàng ngày hay tăng năng suất, VBA chắc chắn là ngôn ngữ tốt nhất cho những mục đích này vì nó được thiết kế đặc biệt để hoạt động với các ứng dụng Microsoft Office.

Kiến thức về các toán tử là cơ sở cần thiết để học bất kỳ chủ đề nào trong VBA, tức là. Trước khi bắt đầu học một ngôn ngữ, bạn nên dành đủ thời gian cho các toán tử và hàm.

Toán tử VBA

  • Tiêu đề ứng dụngKích hoạt, chờ- Kích hoạt một ứng dụng đang mở theo tiêu đề hoặc mã định danh tác vụ được chỉ định bởi đối số tiêu đề
  • Tiếng kêu bíp- tín hiệu âm thanh
  • Gọi tên, tranh luận- Gọi một thủ tục gọi là tên. (Vì từ khóa Call là tùy chọn và bạn có thể gọi một thủ tục chỉ bằng tên của nó nên câu lệnh này hiếm khi được sử dụng trong lập trình VBA)
  • Đường dẫn ChDir- Thay thế thư mục hiện tại bằng thư mục được chỉ định bởi đối số đường dẫn
  • Đóng danh sách số tập tin- Thay đổi ổ đĩa hiện tại thành ổ đĩa được chỉ định bởi đối số ổ đĩa
  • hằng số CONSTNAME- Khai báo một biến có tên CONSTNAME là hằng số
  • Ngày = ngày- Thay đổi ngày hệ thống thành ngày được chỉ định bởi đối số ngày
  • Khai báo tên- Khai báo một thủ tục từ thư viện liên kết động (DLL)
  • Phạm vi chữ DefBool- Toán tử cấp mô-đun đặt Boolean làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số dãy chữ cái (ví dụ: DefBool A-F)
  • Phạm vi chữ DefByte- Đặt Byte làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Phạm vi chữ DefCur- Đặt Tiền tệ làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi phạm vi chữ cái
  • Phạm vi chữ DefDate- Đặt Ngày làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi phạm vi chữ
  • Phạm vi chữ DefDbl- Đặt Double làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Phạm vi chữ DefInt- Đặt Số nguyên làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Phạm vi chữ cái DefLng- Đặt Long làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi letterrange
  • Phạm vi chữ DefObj- Đặt Đối tượng làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Phạm vi chữ DefSng- Đặt Đơn làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Phạm vi chữ DefStr- Đặt Chuỗi làm kiểu dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi phạm vi chữ cái
  • Phạm vi chữ DefVar- Đặt loại Biến thể làm loại dữ liệu mặc định cho tất cả các biến bắt đầu bằng các chữ cái được chỉ định bởi đối số phạm vi chữ cái
  • Xóa tên ứng dụng, phần, khóa- Loại bỏ phần hoặc khóa khỏi sổ đăng ký Windows
  • tên mờ- Khai báo một biến có tên varname
  • Thực hiện: Vòng lặp- Lặp qua nhiều câu lệnh cho đến khi điều kiện Boolean là True
  • Từ khóa cuối- Chấm dứt một thủ tục, chức năng hoặc cấu trúc điều khiển
  • Tên liệt kê- Toán tử cấp mô-đun khai báo một biến thuộc kiểu liệt kê
  • Xóa danh sách mảng- Xóa bộ nhớ khỏi mảng được cấp phát động hoặc khởi tạo lại mảng có kích thước cố định
  • số lỗi lỗi- Mô phỏng lỗi bằng cách đặt đối tượng Err thành số lỗi
  • Tên thủ tục sự kiện(arglist)- Một toán tử chỉ có thể có mặt trong mô-đun lớp. Nó khai báo một sự kiện do người dùng xác định
  • Thoát từ khóa- Thoát khỏi một thủ tục, chức năng hoặc cấu trúc điều khiển
  • FileSao chép nguồn, đích- Sao chép file nguồn vào thư mục đích (có thể đổi tên file nguồn)
  • Dành cho mỗi người:Tiếp theo- Lặp qua từng thành viên của bộ sưu tập
  • Cho tiếp theo- Lặp qua một số câu lệnh cho đến khi bộ đếm vòng lặp đạt đến một giá trị xác định
  • Chức năng- Khai báo một thủ tục hàm tùy chỉnh
  • Nhận #filenumber, varname- Đọc thành một biến từ file I/O được mở bằng câu lệnh Open
  • GoSub:Trở về- Vào và thoát khỏi chương trình con được mô tả trong thủ tục. (Không nên sử dụng câu lệnh này vì việc tạo một thủ tục riêng sẽ giúp mã dễ hiểu hơn)
  • dòng GoTo- Chuyển điều khiển tới dòng mã được chỉ định bởi nhãn dòng
  • Nếu:Thì:Khác- Thực thi một trong hai đoạn mã dựa trên kết quả kiểm tra logic
  • Triển khai Tên giao diện, Lớp- Xác định tên của giao diện hoặc lớp sẽ được triển khai trong mô-đun lớp
  • Nhập #filenumber, varlist- Đọc từ file I/O thành các biến
  • Giết tên đường dẫn- Xóa tên đường dẫn tệp khỏi đĩa
  • Đặt varname = biểu thức- Đặt biến varname thành biểu thức. Từ khóa Let là tùy chọn và hầu như không bao giờ được sử dụng
  • Đầu vào dòng #filenumber, var- Đọc một dòng từ tệp I/O và lưu nó vào một biến chuỗi
  • Trọng tải- Tải biểu mẫu vào bộ nhớ nhưng không hiển thị trên màn hình
  • Khóa #filenumber, recordrange- Kiểm soát quyền truy cập I/O của tập tin
  • LĐặt chuỗivar = chuỗi- Đặt chuỗi, bắt đầu bằng ký tự ngoài cùng bên trái, vào một biến kiểu String. Trong trường hợp này, kích thước của biến không thay đổi
  • LĐặt var1 = var2- Sao chép một biến của một loại do người dùng xác định sang một biến thuộc loại khác, nhưng tương thích, do người dùng xác định
  • Giữa- Thay thế một số ký tự được chỉ định trong một biến chuỗi bằng các ký tự từ một chuỗi khác
  • trungb- Thay thế các ký tự trong một chuỗi biến theo từng byte bằng các ký tự từ một chuỗi khác
  • đường dẫn MkDir- Tạo thư mục có tên là path
  • Đặt tên oldpathname là newpathname- Thay đổi tên file hoặc thư mục
  • Có lỗi- Đặt cách xử lý lỗi
  • Trên:GoSub, Trên:GoTo- Chuyển điều khiển sang một chuỗi nhất định dựa trên kết quả của biểu thức
  • Mở tên đường dẫn, :- Mở một tập tin cho I/O
  • Tùy chọn Cơ sở 0|1- Đặt (ở cấp mô-đun) cho mảng giới hạn dưới mặc định (số phần tử đầu tiên)
  • Tùy chọn So sánh văn bản|Nhị phân- Xác định (ở cấp mô-đun) chế độ so sánh chuỗi mặc định
  • Tùy chọn rõ ràng- Buộc người lập trình phải khai báo biến một cách tường minh. Nhập câu lệnh này ở cấp mô-đun
  • Tùy chọn Riêng tư- Chỉ ra rằng mô-đun đã bị đóng và không thể truy cập được từ các thủ tục nằm trong các mô-đun khác. Nhập toán tử cấp mô-đun
  • In #filenumber- Ghi vào tập tin I/O
  • Tên riêng- Khai báo biến varname sẽ ở chế độ riêng tư và chỉ được sử dụng trong module mà nó được khai báo. Nhập toán tử cấp mô-đun
  • Nhận tài sản- Khai báo một thủ tục thuộc tính sẽ chấp nhận các giá trị của thuộc tính này
  • Cho thuê tài sản- Gán giá trị cho một thuộc tính trong thủ tục thuộc tính
  • Tập thuộc tính- Đặt tham chiếu đến một đối tượng trong thủ tục thuộc tính
  • Tên công khai- Cấp quyền truy cập vào biến varname cho tất cả các thủ tục có trong mô-đun
  • Đặt #filenumber,varname- Ghi dữ liệu từ biến varname vào file I/O
  • Tên sự kiện, đối số RaiseEvent- Đưa ra một sự kiện có tên tên sự kiện
  • Số ngẫu nhiên- Khởi tạo trình tạo số ngẫu nhiên. Bỏ qua đối số số để khởi tạo nó với một hạt giống khác nhau mỗi lần
  • Tên biến thể ReDim- Cấp phát lại bộ nhớ cho mảng động
  • Bình luận lại- Cho VBA biết rằng văn bản sau câu lệnh là một nhận xét. Ký hiệu dấu nháy đơn thường được sử dụng thay cho toán tử này
  • Cài lại- Đóng tất cả các file I/O đã được mở trước đó bằng câu lệnh Open
  • Bản tóm tắt- Sau khi xảy ra lỗi, tiếp tục thực hiện chương trình từ dòng xảy ra lỗi
  • Đường dẫn RmDir- Xóa một thư mục
  • RĐặt chuỗivar = chuỗi- Ghi một chuỗi vào một biến chuỗi, căn chỉnh các ký tự về bên phải
  • LưuĐặt tên ứng dụng, :- Tạo hoặc lưu cài đặt trong sổ đăng ký Windows
  • Tìm kiếm #filenumber, vị trí- Đặt vị trí hiện tại trong tệp I/O
  • Chọn trường hợp- Thực hiện một nhóm câu lệnh dựa trên giá trị của biểu thức
  • Chuỗi SendKeys, đợi đã- Truyền các lần nhấn phím được chỉ định bằng chuỗi tới ứng dụng đang hoạt động như thể chúng được nhập từ bàn phím
  • Đặt objectvar = đối tượng- Gán đối tượng đối tượng cho một biến đối tượng có tên objectvar
  • Tên đường dẫn SetAttr, attr- Đặt các thuộc tính truy cập được chỉ định bởi đối số attr (ví dụ: vbReadOnly) cho tệp được chỉ định bởi đối số tên đường dẫn
  • Tên biến tĩnh- Khai báo (ở cấp mô-đun) rằng biến varname sẽ giữ nguyên giá trị của nó miễn là mã mô-đun được thực thi
  • Dừng lại- Đưa VBA vào chế độ tạm dừng
  • phụ- Khai báo thủ tục
  • Thời gian = thời gian- Đặt thời gian hệ thống thành đối số thời gian
  • Nhập tên biến thể- Khai báo một kiểu dữ liệu tùy chỉnh. (Chỉ được sử dụng ở cấp mô-đun)
  • Dỡ bỏ- Xóa biểu mẫu khỏi bộ nhớ
  • Mở khóa #filenumber, recordrange- Loại bỏ các thuộc tính truy cập cho một file I/O
  • Trong khi:Wend- Lặp qua một nhóm câu lệnh cho đến khi điều kiện logic là đúng
  • Chiều rộng #filenumber, chiều rộng- Đặt độ rộng dòng cho tệp I/O
  • Với:Kết thúc bằng- Thực hiện một nhóm câu lệnh cho một đối tượng nhất định
  • Viết #filenumber- Ghi dữ liệu vào file I/O

Chương trình VBA là một chuỗi các câu lệnh.

Có một số quy ước cần được tuân theo khi viết chương trình. Vì vậy, một số câu lệnh có thể được đặt trên một dòng. Dấu hai chấm được đặt giữa các câu lệnh trên cùng một dòng.

Bất kỳ dòng nào cũng có thể được chia thành hai dòng bằng cách đặt các ký tự “Space” + “Underscore” (_) ở cuối dòng đầu tiên, trong trường hợp đó dòng thứ hai sẽ được coi là phần tiếp theo của dòng đầu tiên.

Chú thích được sử dụng để làm cho chương trình dễ đọc. Có hai cách để nhập nhận xét trong VBA: sử dụng dấu nháy đơn (‘), có thể đặt ở bất kỳ đâu trên một dòng và sử dụng từ dành riêng Rem thay vì dấu nháy đơn.

1. Toán tử mờđược dùng để khai báo các loại biến.

1. Dim A là số nguyên – biến A được khai báo là số nguyên, tức là nó sẽ chỉ lưu trữ các giá trị số nguyên .

2. Dim D Như Ngày – biến D được khai báo để lưu trữ ngày tháng.

3. Làm mờ họ, tên dưới dạng chuỗi – các biến được khai báo. Họ và Tên, dùng để lưu trữ văn bản.

4. Dim B(12) Là Số nguyên – một mảng một chiều (vectơ) gồm 12 số nguyên được khai báo và theo mặc định, phần tử đầu tiên của mảng sẽ là B(0) và B(12) cuối cùng.

5. Dim B(3,3) Là Đơn – một mảng 3x3 hai chiều (ma trận) bao gồm các số thực được khai báo.

Nếu loại biến không được chỉ định thì loại Biến thể sẽ được sử dụng theo mặc định. Tuy nhiên, việc chỉ định một loại biến cụ thể sẽ làm cho chương trình trở nên đáng tin cậy hơn và tăng tốc độ hoạt động của nó, bởi vì VBA không phải lãng phí thời gian để nhận ra một biến không được khai báo mỗi khi nó được truy cập.

Nếu kích thước của mảng M không được biết trước và được xác định trong chương trình, thì khi mô tả mảng, số phần tử không được chỉ định và mảng được xác định như sau:

Dim M() là số nguyên

Sau khi xác định được số phần tử của mảng, ví dụ N, bạn cần viết toán tử

2. Toán tử gán nhằm mục đích gán giá trị cho một biến.

Cú pháp:

Biến (hoặc thuộc tính đối tượng) = biểu thức.

1. a=5 – gán biến A giá trị 5 ;

2. b=“Người quản lý” – biến b giao phó có nghĩa là "Người quản lý";

· Địa chỉ=Trang tính("Tổ chức").Cells(2,2) – gán biến Địa chỉ cho nội dung của ô B2, nằm trên trang Tổ chức trong sổ làm việc hiện tại;

Họ=UserForm1.TextBox1.Text – Biến đổi Họ được gán cho nội dung của trường TextBox1 của biểu mẫu người dùng UserForm1.

Với/Kết thúc bằng câu lệnh cứu người lập trình khỏi một số lượng lớn sự lặp lại tên của cùng một đối tượng.

Cú pháp:

Với đối tượng

toán tử1

toán tử2

toán tửN

Ví dụ, thay vì một chuỗi các câu lệnh

UserForm1.TextBox1.Text = Ngày

UserForm1.TextBox2.Text = “ “

UserForm1.ComboBox1.Text = “ “

có thể được viết như thế này

TextBox1.Text = Ngày

. TextBox2.Text = “ “

. ComboBox1.Text = “ “

REM Trên tờ Sheet1 ở cột A, bắt đầu từ dòng thứ hai, ‘mức thuế dành cho nhân viên’ được viết ra. Điền vào combo box ComboBox1 trong user form UserForm1

‘Dòng đầu tiên của chương trình – trên sheet Sheet1 ở cột A’ đếm số ô được điền, kết quả ‘gán cho biến N

N=Application.CountA(Sheets(“Sheet1”).Range(“A:A”)).

D=”A2:A”&Cint(N)

Trang tính(“Trang tính1”).Range(D).Name=”Thuế quan”

TextBox1.Text = Ngày

. TextBox2.Text = “ “

. ComboBox1.Text = “ “

. ComboBox1.Rowsource = “Thuế quan”

1. Câu lệnh điều kiện If/Then/Else– cho phép bạn kiểm tra một điều kiện nhất định và tùy thuộc vào kết quả kiểm tra, thực hiện một hoặc một hành động khác

Cú pháp:

Nếu như tình trạng Sau đó toán tử1 [ Khác toán tử2]

Nếu điều kiện đúng thì câu lệnh 1 được thực thi, ngược lại câu lệnh 2 sẽ được thực thi.

Cũng có thể sử dụng toán tử điều kiện phức tạp, được viết dưới dạng khối:

Nếu nhưđiều kiện1 Sau đó

toán tử1

KhácNếuđiều kiện2 Sau đó

toán tử2

toán tử3

Họ=.TextBox1.Text

Nếu Họ =”“ Thì MsgBox”Bạn chưa nhập họ”

REM Khi hộp kiểm số 1 được chọn, khách hàng được giảm giá 5%

‘ Số tiền – số tiền khách hàng thanh toán

‘ Giá thành của sản phẩm được lưu trong biến Chi phí

Nếu UserForm1.CheckBox1.Value = True thì

Số tiền=Chi phí-Chi phí*0,05

Số tiền khác=Chi phí

1) REM Giả sử rằng Biểu phí là biểu giá được thiết lập và Thời gian là thời gian làm việc. Thời gian và biểu phí được nhập vào các trường đầu vào tương ứng trong TextBox1 và TextBox2. Mức lương được tính bằng công thức Thuế quan*Thời gian. Hãy viết chương trình hiển thị mức lương tính được trên biểu mẫu. Nhãn4 – dòng chữ được chuẩn bị để 'hiển thị giá trị tiền lương'

Nếu IsNumeric(TextBox1.Text)=True Và _

IsNumeric(TextBox2.Text)=True Sau đó

Thuế quan=TextBox1.Text

Thời gian=TextBox2.Text

Label4.Caption=Biểu phí*Thời gian

Trong ví dụ đầu tiên, chúng tôi làm việc với biểu mẫu người dùng số một. Biến đổi Họ nội dung của trường đầu vào số một được chỉ định. Sau đó nó kiểm tra xem liệu có gì được nhập vào trường đầu vào không (biến có trống không Họ). Nếu biến Họ trống, trên màn hình sẽ hiển thị hộp thông báo.

Trong ví dụ thứ hai, những dòng đầu tiên bắt đầu bằng từ REM và dấu nháy đơn là những nhận xét giải thích mục đích của các biến. Toán tử có điều kiện xác định số tiền mà khách hàng phải trả.

Ví dụ thứ ba kiểm tra xem số có được nhập vào trường đầu vào hay không. Nếu các số được nhập vào hai trường, thì các biến được gán giá trị của các trường đầu vào và nhãn được gán giá trị của kết quả nhân biểu giá theo thời gian.

1) Toán tử nhảy vô điều kiện Đi đến nhằm mục đích chỉ định chuyển đổi sang một dòng được chỉ định trong chương trình.

Cú pháp:

Đi đến chuỗi

Đối số bắt buộc Chuỗi có thể là bất kỳ nhãn dòng hoặc số dòng nào.

Nếu IsNumeric(TextBox1.Text)=False thì GoTo Error

Lỗi: MsgBox “Lỗi nhập số!”

Ví dụ trên kiểm tra xem một số đã được nhập vào trường đầu vào chưa. Nếu số đã nhập không phải là số, dòng này sẽ được chuyển đến dòng có nhãn Lỗi và thông báo hiển thị trên màn hình.

2) Toán tử vòng lặp Cho/Tới/Tiếp theođược thiết kế để lập trình các đoạn lặp lại, tức là để mô tả các thuật toán tuần hoàn.

Cú pháp:

biến=M1 ĐẾN M2 [ Bước chân M3]

toán tử

M1, M2, M3 – biểu thức. Câu lệnh vòng lặp lặp lại việc thực thi một nhóm câu lệnh trong khi biến (bộ đếm) thay đổi từ giá trị ban đầu M1 đến giá trị cuối cùng M2 với bước M3 được chỉ định. Nếu bước này không được chỉ định thì nó được coi là 1.

Họ = Trang tính(“Nhân viên”).Cells(I,1)

Tên cuối cùng của UserForm1.ComboBox1.AddItem

Trong ví dụ đã cho, giả định rằng trên trang “Nhân viên”, cột đầu tiên chứa tên của những nhân viên cần được đưa vào danh sách hộp tổ hợp số một của biểu mẫu người dùng số một. Thuật toán vận hành chương trình:

1) Biến I được gán giá trị 2.

2) Biến Họ được gán giá trị của ô A(I,1), nằm trên trang “Nhân viên”. (Khi vòng lặp được thực hiện lần đầu tiên, đây là ô A(2,1))

3) Một phần tử từ biến Họ được thêm vào danh sách hộp tổ hợp ComboBox1.

4) 1 được thêm vào giá trị của biến I (nếu bước này không được chỉ định thì nó được coi là bằng 1). Việc kiểm tra được thực hiện để xem giá trị của I có vượt quá 10 hay không (giá trị cuối cùng của biến I, trong ví dụ M3=10)? Nếu giá trị của I thậm chí còn nhỏ hơn hoặc bằng 10 thì các bước 2-4 sẽ được thực hiện, nếu không thì chu trình sẽ kết thúc.

Do đó, chương trình trên cho phép bạn điền dữ liệu vào hộp tổ hợp ComboBox1.

Các thuật toán cơ bản dùng để giải
nhiệm vụ kinh tế

Hãy xem xét các thuật toán cơ bản bằng ví dụ sau. Nhân viên từ các phòng ban khác nhau đã tham gia thực hiện công việc theo hợp đồng. Bảng trên trang “Trang tính 1” trình bày dữ liệu về số giờ làm việc của mỗi nhân viên (Hình 8).


Hình 8. Dữ liệu về số giờ làm việc

nhân viên của công ty

dấu hiệuTênSự miêu tả
= BằngTrả về True nếu toán hạng bên trái và bên phải bằng nhau. Lưu ý rằng đây là tình trạng quá tải của toán tử gán.
<> Không công bằngTrả về True nếu toán hạng bên trái và bên phải không bằng nhau.
> Tốt hơnTrả về True nếu toán hạng bên trái lớn hơn toán hạng bên phải.
< Ít hơnTrả về True nếu toán hạng bên trái nhỏ hơn toán hạng bên phải.
>= Nhiều hơn hoặc bằngTrả về True nếu toán hạng bên trái lớn hơn hoặc bằng toán hạng bên phải.
<= Ít hơn hoặc bằngTrả về True nếu toán hạng bên trái nhỏ hơn hoặc bằng toán hạng bên phải.
Vốn tham khảoTrả về True nếu tham chiếu đối tượng bên trái giống với tham chiếu đối tượng bên phải. Nó cũng có thể được sử dụng với Nothing (tham chiếu đối tượng null) ở cả hai bên. Ghi chú. Toán tử Is sẽ cố gắng ép cả hai toán hạng vào Object trước khi thực hiện so sánh. Nếu một trong hai bên là kiểu nguyên thủy hoặc Biến thể không chứa đối tượng (loại phụ không phải đối tượng hoặc vtEmpty) sẽ dẫn đến lỗi thời gian chạy 424 - "Yêu cầu đối tượng". Nếu bất kỳ toán hạng nào thuộc về một toán hạng khác giao diện cùng một đối tượng, phép so sánh sẽ trả về True. Nếu bạn cần kiểm tra tính công bằng của cả hai trường hợp, thì giao diện, ObjPtr(left) = ObjPtr(right) sử dụng ObjPtr(left) = ObjPtr(right) .

Ghi chú

Cú pháp VBA cho phép "xâu chuỗi" các toán tử so sánh, nhưng nói chung nên tránh những cấu trúc này. Việc so sánh luôn được thực hiện từ trái sang phải chỉ trên 2 toán hạng cùng một lúc và mỗi phép so sánh đều dẫn đến một Boolean. Ví dụ như biểu thức...

A = 2: b = 1: c = 0 expr = a > b > c

Có thể được đọc trong một số ngữ cảnh để kiểm tra xem b có nằm giữa a và c hay không. Trong VBA điều này được đánh giá như sau:

A = 2: b = 1: c = 0 expr = a > b > c expr = (2 > 1) > 0 expr = Đúng > 0 expr = -1 > 0 "CInt(True) = -1 expr = Sai

Bất kỳ toán tử so sánh nào khác ngoài Is được sử dụng với Object làm toán hạng sẽ thực hiện trên giá trị trả về của thành viên mặc định của Object. Nếu đối tượng không có thành viên mặc định, việc so sánh sẽ dẫn đến lỗi thời gian chạy 438 - "Đối tượng không hỗ trợ thuộc tính hoặc phương thức của nó."

Nếu Đối tượng không được khởi tạo, việc so sánh sẽ dẫn đến lỗi thời gian chạy 91 - "Biến đối tượng hoặc Biến khối bị khóa."

Nếu không có gì bằng chữ được sử dụng với bất kỳ toán tử so sánh nào ngoài Is, nó sẽ dẫn đến lỗi biên dịch - "Sử dụng đối tượng bất hợp pháp".

Nếu Đối tượng mặc định của Đối tượng là đối tượng khác, VBA sẽ liên tục gọi phần tử mặc định của từng giá trị trả về tiếp theo cho đến khi trả về kiểu nguyên thủy hoặc xảy ra lỗi. Ví dụ: giả sử SomeClass có thành viên mặc định Value , là một phiên bản của ChildClass với thành viên ChildValue là ChildValue . So sánh...

Đặt x = Gỡ lỗi SomeClass mới.Print x > 42

Sẽ được đánh giá là:

Đặt x = NewClass Debug.Print x.Value.ChildValue > 42

Nếu toán hạng là số và khác toán hạng là Chuỗi hoặc Biến thể của kiểu con Chuỗi, việc so sánh số sẽ được thực hiện. Trong trường hợp này, nếu Chuỗi không thể được ánh xạ tới một số, kết quả so sánh sẽ là lỗi thời gian chạy 13 - "Loại không khớp".

Nếu như cả hai toán hạng là Chuỗi hoặc Biến thể của kiểu con Chuỗi, việc so sánh chuỗi sẽ được thực hiện dựa trên tham số so sánh của các tham số mô-đun mã. Những so sánh này được thực hiện trên cơ sở từng nhân vật. lưu ý rằng Ký hiệu biểu tượng Chuỗi chứa số Không giống như các giá trị số phù hợp:

Public Sub Ví dụ() Dim left As Variant Dim right As Variant left = "42" right = "5" Debug.Print left > right "In Debug sai.In Val(left) > Val(right) "In True End Sub

Vì lý do này, hãy đảm bảo rằng các biến Chuỗi hoặc Biến thể được chuyển sang số trước khi thực hiện so sánh bất đẳng thức số.

Nếu một trong các toán hạng là Ngày thì phép so sánh số trên số kép cơ bản sẽ được thực hiện nếu toán hạng còn lại là số hoặc có thể được chuyển đổi thành kiểu số.

Nếu toán hạng còn lại là Chuỗi hoặc Biến thể của một kiểu con Chuỗi có thể được chuyển sang Ngày bằng cách sử dụng ngôn ngữ hiện tại thì Chuỗi sẽ được chuyển sang Ngày. Nếu không thể áp dụng nó cho Ngày ở ngôn ngữ hiện tại, kết quả so sánh sẽ là lỗi thời gian chạy 13 - "Loại không khớp".

Cần cẩn thận khi so sánh các giá trị Đôi hoặc Đơn và Booleans. Không giống như các kiểu số khác, các giá trị khác 0 không thể được coi là True do hành vi của VBA trong việc thúc đẩy kiểu dữ liệu so sánh bằng cách sử dụng số dấu phẩy động trong Double:

Public Sub Ví dụ() Dim Test As Double Test = 42 Debug.Print CBool(Test) "Prints True." True được thăng cấp thành Double - Kiểm tra không được chuyển sang Boolean Debug.Print Test = True "In sai" Với các giá trị rõ ràng: Debug.Print CBool(Test) = True "In True Debug.Print CDbl(-1) = CDbl(True) "In True End Sub


Có năm toán tử logic cơ bản và quan trọng trong Visual Basic: And, Or, Not, Xor và Eqv. Bây giờ tôi sẽ cố gắng giải thích vai trò của từng người trong số họ!

Vậy sau đó!
Đây có lẽ là toán tử logic đơn giản và cần thiết nhất trong số những toán tử khác.

Giúp đỡ:
Trả về kết quả của sự kết hợp (logic AND) của hai biểu thức.

Cú pháp:
kết quả = biểu thức1biểu thức2

Những thứ kia. kết quả sẽ chỉ đúng nếu đúng biểu thức1biểu thức2. Các giá trị được toán tử trả về được trình bày trong bảng sau:

biểu thức1 biểu thức2 kết quả
ĐÚNG VẬY ĐÚNG VẬY ĐÚNG VẬY
ĐÚNG VẬY SAI SAI
ĐÚNG VẬY Vô giá trị Vô giá trị
SAI ĐÚNG VẬY SAI
SAI SAI SAI
SAI Vô giá trị SAI
Vô giá trị ĐÚNG VẬY Vô giá trị
Vô giá trị SAI SAI
Vô giá trị Vô giá trị Vô giá trị

Và bây giờ là một ví dụ nhỏ:

Hãy tưởng tượng rằng các biến User_Has_Computer và User_Has_Car được khai báo là giá trị Boolean ​​và trong quá trình thực hiện một số hành động, chúng nhận các giá trị Đúng hoặc Sai. Bạn đặt điều kiện để kiểm tra các giá trị này:

Chúng tôi tự mô phỏng điều này :) - nhập các dòng sau vào đâu đó:


Dim User_Has_Car dưới dạng Boolean
Người dùng_Has_Computer = Đúng
Người dùng_Has_Car = Đúng

Nếu User_Has_Computer và User_Has_Car thì
MsgBox "Bạn là người hạnh phúc!"
Kết thúc nếu

Khi kiểm tra điều kiện này, trên màn hình sẽ hiện lên một thông báo thông báo người dùng là người hạnh phúc, bởi vì. anh ấy có một chiếc xe hơi máy tính:-)! Và bây giờ, trước dòng thứ ba hoặc thứ tư, hãy đặt dấu nháy đơn """ - nhận xét dòng đó. Bây giờ, một trong các biến sẽ là Sai theo mặc định. Bây giờ thông báo sẽ KHÔNG bật lên, vì người dùng không hài lòng lắm với việc có một chiếc ô tô HOẶC máy tính...

Toán tử tiếp theo cũng không kém phần đơn giản - Hoặc.

Giúp đỡ:
Thực hiện thao tác OR (cộng) logic trên hai biểu thức.

Cú pháp:
kết quả = biểu thức1Hoặcbiểu thức2

Kết quả sẽ chỉ đúng nếu chỉ một trong các biểu thức đúng. Các giá trị được toán tử trả về được trình bày trong bảng sau:

biểu thức1 biểu thức1 kết quả
ĐÚNG VẬY ĐÚNG VẬY ĐÚNG VẬY
ĐÚNG VẬY SAI ĐÚNG VẬY
ĐÚNG VẬY Vô giá trị ĐÚNG VẬY
SAI ĐÚNG VẬY ĐÚNG VẬY
SAI SAI SAI
SAI Vô giá trị Vô giá trị
Vô giá trị ĐÚNG VẬY ĐÚNG VẬY
Vô giá trị SAI Vô giá trị
Vô giá trị Vô giá trị Vô giá trị

Và một lần nữa một ví dụ nhỏ với các biến Boolean tương tự User_Has_Computer và User_Has_Car, trong quá trình thực hiện một số hành động đã nhận các giá trị Đúng hoặc Sai.

Dim User_Has_Computer dưới dạng Boolean
Dim User_Has_Car dưới dạng Boolean
Người dùng_Has_Computer = Sai
Người dùng_Has_Car = Đúng

Nếu như User_Has_Computer Hoặc User_Has_Car Sau đó
MsgBox "Bạn gần như là một người hạnh phúc!"
Kết thúc nếu

Khi kiểm tra điều kiện này, trên màn hình sẽ hiện lên một thông báo thông báo người dùng gần như là một người hạnh phúc, bởi vì anh ấy có ô tô nhưng không có máy tính:-|...

Không phải nhà điều hành

Giúp đỡ:
Thực hiện một phép toán phủ định logic trên một biểu thức.

Cú pháp:
kết quả = Không sự biểu lộ

Những thứ kia. kết quả trở nên ngược lại sự biểu lộ(không bao gồm Null). Các giá trị được toán tử trả về được trình bày trong bảng sau:

Ví dụ:

Dim User_Has_Computer dưới dạng Boolean

Người dùng_Has_Computer = Sai

Nếu không phải User_Has_Computer thì
MsgBox "Tôi thông cảm...:)"
Kết thúc nếu

Hãy để tôi giải thích: điều kiện If ... Then được thực thi khi một số biểu thức (tại chỗ ...) là Đúng. Hãy tưởng tượng rằng biến Người dùng_Has_Computer = Sai. Sau đó, dòng
Không phải User_Has_Computer cho kết quả True và điều kiện là đúng!

Toán tử Xor.

Giúp đỡ:
Thực hiện thao tác OR độc quyền trên hai biểu thức.

Cú pháp:
[kết quả =] biểu thức1 Xor biểu thức2

Về nguyên tắc, toán tử này tương tự như Or nhưng không đơn giản HOẶC, và độc quyền HOẶC. Nếu một và chỉ một trong biểu thứcđúng (có giá trị True), kết quả là đúng. Và toán tử Or cho phép hai giá trị đúng biểu thức. Kết quả

Ví dụ:

Dim User_Has_Computer dưới dạng Boolean
Dim User_Has_Car dưới dạng Boolean
Người dùng_Has_Computer = Sai
Người dùng_Has_Car = Đúng

Nếu User_Has_Computer X hoặc User_Has_Car thì
MsgBox "Bạn cần một chiếc ô tô VÀ một chiếc máy tính!"
Kết thúc nếu

Ở đây, giống như trong ví dụ trước, điều kiện chỉ được đáp ứng khi dòng User_Has_Computer Xor User_Has_Car là đúng (= Đúng). Và nó đúng khi và chỉ khi chỉ một trong các điều kiện là đúng. Nếu cả hai, thì điều kiện sẽ không còn được đáp ứng nữa.

Toán tử Eqv.

Giúp đỡ:
Được sử dụng để kiểm tra sự tương đương logic của hai biểu thức.

Cú pháp:
kết quả = biểu thức1 phương trình biểu thức2

Mọi thứ ở đây khá đơn giản: kết quả sẽ đúng nếu cả hai biểu thức đều đúng hoặc sai. Kết quảđược định nghĩa như sau:

Ví dụ:

Dim User_Has_Computer dưới dạng Boolean
Dim User_Has_Car dưới dạng Boolean
Người dùng_Has_Computer = Đúng
Người dùng_Has_Car = Đúng

Nếu User_Has_Computer Eqv User_Has_Car thì
MsgBox "Bạn là người hạnh phúc hay bất hạnh!"
Kết thúc nếu

Ở đây máy tính sẽ gọi bạn là người “hạnh phúc hay bất hạnh”, bởi vì... điều kiện chỉ được thỏa mãn khi người dùng có cả ô tô và máy tính hoặc không có gì cả.

Thông tin lý thuyết tóm tắt

1. Cú pháp và ngữ nghĩa của ngôn ngữ lập trình VBA

Cú pháp của ngôn ngữ lập trình là một tập hợp các quy tắc mô tả sự kết hợp của các ký tự chữ cái được coi là một chương trình (tài liệu) có cấu trúc chính xác hoặc đoạn của nó.

Các nguyên tắc cú pháp cơ bản của ngôn ngữ này như sau:

  • VBA không phân biệt chữ hoa chữ thường;
  • Để nhận xét mã ở cuối dòng, hãy sử dụng một dấu ngoặc kép (") hoặc lệnh REM;
  • giá trị ký tự phải được đặt trong dấu ngoặc kép (");
  • độ dài tối đa của bất kỳ tên nào trong VBA (biến, hằng, thủ tục) là 255 ký tự;
  • bắt đầu một câu lệnh mới - chuyển sang một dòng mới (dấu chấm phẩy, như trong C, Java, JavaScript, không được sử dụng cho việc này);
  • Không có hạn chế nào về độ dài dòng tối đa (mặc dù trong trình chỉnh sửa chỉ có 308 ký tự có thể vừa trong một dòng). Nhiều câu lệnh trên cùng một dòng được phân tách bằng dấu hai chấm:
    MsgBox "Kiểm tra 1" : MsgBox "Kiểm tra 2"
  • Để dễ đọc, bạn có thể kết hợp nhiều dòng vật lý thành một dòng logic bằng cách sử dụng dấu cách và dấu gạch dưới sau dòng đó:
    MsgBox "Thông báo tới người dùng" _
    & vTên người dùng

Ngữ nghĩa của một ngôn ngữ là ý nghĩa ngữ nghĩa của từ. Trong lập trình - ý nghĩa ngữ nghĩa ban đầu của các toán tử, cấu trúc ngôn ngữ cơ bản, v.v.

Nhà điều hành là đơn vị nhỏ nhất của mã VBA có thể được thực thi. Một câu lệnh có thể khai báo hoặc xác định một biến, đặt tùy chọn trình biên dịch VBA hoặc thực hiện một số hành động trong chương trình.

Môn số học Chỉ có 7 toán tử trong VBA.

Bốn phép tính tiêu chuẩn: cộng (+), trừ (-), nhân (*), chia (/) và ba phép tính khác:

  • lũy thừa (^). Ví dụ: 2^3 = 8;
  • phép chia số nguyên (\). Chia số đầu tiên cho số thứ hai, loại bỏ (không làm tròn) phần phân số. Ví dụ: 5\2 = 2;
  • phép chia modulo (Mod). Chia số đầu tiên cho số thứ hai, chỉ trả về phần còn lại của phép chia. Ví dụ: 5 Mod 2 = 1.

Toán tử gán trong VBA là dấu bằng. Bạn có thể viết nó như thế này:

Đặt nVar = 10
hoặc thậm chí đơn giản hơn:
nVar = 10

Ở đây, đừng nhầm lẫn dấu bằng với toán tử bằng. Biểu thức cuối cùng có nghĩa là "đặt giá trị của nVar thành 10" và nếu dòng trông như thế này: If (nVar = 10) thì nó có nghĩa là "nếu giá trị của nVar là 10".

Toán tử so sánh trong VBA chỉ có 8:

  • đẳng thức (=). Ví dụ: Nếu (nVar = 10);
  • lớn hơn (>) và nhỏ hơn (10);
  • lớn hơn hoặc bằng (>=) và nhỏ hơn hoặc bằng (= 10);
  • không công bằng (). Ví dụ: If(nVar10);
  • so sánh các đối tượng (Is). Xác định xem các biến đối tượng có tham chiếu đến cùng một đối tượng hay đến các đối tượng khác nhau hay không. Ví dụ: Nếu (obj1 là obj2);
  • sự tương đồng (Thích). So sánh một đối tượng chuỗi với một mẫu và xác định xem mẫu đó có khớp hay không.

Toán tử so sánh luôn trả về ĐÚNG VẬY(nếu tuyên bố là đúng) hoặc SAI(nếu phát biểu sai).

Rất thường xuyên, khi kiểm tra một số điều kiện, họ sử dụng toán tử logic:

  • Và - logic AND. Cả hai điều kiện đều phải đúng;
  • Hoặc - logic HOẶC. Ít nhất một trong các điều kiện phải đúng;
  • Không - phủ định hợp lý. Trả về True nếu điều kiện sai;
  • Xor là một ngoại lệ hợp lý. Trong biểu thức E1 Xor E2 trả về True nếu chỉ E1 = True hoặc chỉ E2 = True, nếu không thì Sai;
  • Eqv - sự tương đương của hai biểu thức, trả về True nếu chúng có cùng giá trị;
  • Imp - ngụ ý, E1 Imp E2 trả về Sai nếu E1 = Đúng và E2 = Sai, nếu không thì Đúng.

Bạn cần nhớ về Và, Hoặc, Không, các toán tử logic khác hiếm khi được sử dụng.

Biến- Đây là những thùng chứa để lưu trữ dữ liệu có thể thay đổi. Hầu như không có chương trình nào có thể làm được nếu không có chúng. Để đơn giản, một biến có thể được so sánh với một con số trong tủ quần áo - bạn cung cấp một số dữ liệu cho tủ quần áo và để đáp lại, bạn sẽ nhận được một con số. Khi cần lại dữ liệu này, bạn “trình số” và nhận.

Mỗi biến có một tên. Một biến được truy cập theo tên. Quy tắc chọn tên trong VBA giống nhau đối với nhiều thành phần (biến, hằng, hàm, thủ tục, v.v.):

  • tên phải bắt đầu bằng một chữ cái;
  • không được chứa dấu cách hoặc ký hiệu dấu chấm câu (ngoại trừ dấu gạch dưới);
  • độ dài tối đa - 255 ký tự;
  • phải là duy nhất trong phạm vi hiện tại
  • Không thể sử dụng các từ dành riêng (những từ được đánh dấu màu xanh lam trong cửa sổ soạn thảo mã).

Khi tạo chương trình VBA, bạn nên quyết định các quy tắc mà đối tượng sẽ được đặt tên - quy ước đặt tên. Được sử dụng phổ biến nhất là cái gọi là thỏa thuận Hungary (để vinh danh một trong những lập trình viên của Microsoft, Charles Simonyi, một người Hungary có quốc tịch):

  • Tên biến phải bắt đầu bằng tiền tố, viết bằng chữ thường. Tiền tố cho biết chính xác những gì sẽ được lưu trữ trong biến này:
    str (hoặc s) - Chuỗi, giá trị ký tự;
    fn (hoặc f) - hàm;
    thủ tục phụ;
    c (hoặc tất cả các chữ cái trong tên được viết hoa) - không thay đổi(một vùng chứa để lưu trữ dữ liệu, không giống như các biến, không thay đổi trong quá trình thực thi chương trình VBA);
    b - Giá trị Boolean, logic (Đúng hoặc Sai);
    d - ngày;
    obj (hoặc o) - tham chiếu đối tượng;
    n - giá trị số;
  • Tên hàm, phương thức và mỗi từ trong từ ghép phải bắt đầu bằng chữ in hoa:
    MsgBox objMyDocument.Name
    Kiểm tra phụDateSub()

Loại dữ liệuđược coi là những khái niệm cơ bản nhất của bất kỳ ngôn ngữ lập trình nào. Kiểu dữ liệu xác định tập hợp các giá trị hợp lệ mà một giá trị (biến hoặc hằng) có thể nhận và tập hợp các hành động có thể được thực hiện trên giá trị đó.

2. Các kiểu dữ liệu VBA cơ bản

VBA cung cấp các kiểu dữ liệu sau:

  • số:
    Byte- một số nguyên từ 0 đến 255, cần thiết cho việc lưu trữ 1 byte ký ức;
    số nguyên- một số nguyên từ −32,768 đến 32,767, 2 byte ;
    Dài- một số nguyên lớn từ −2 147 483 648 đến 2 147 483 647, 4 byte ;
    Tiền tệ(tiền tệ) - một số thập phân lớn có 19 chữ số, trong đó có 4 chữ số thập phân
    (từ –922337203685477.5808 đến 922337203685477.5807), 4 byte,
    dùng để lưu trữ các con số khi độ chính xác là cực kỳ quan trọng, xảy ra khi tính toán bằng đơn vị tiền tệ;
    Số thập phân- một số thập phân thậm chí còn lớn hơn với 29 vị trí (sau dấu thập phân bạn có thể sử dụng từ 0 đến 28 vị trí), 8 byte;
    ĐơnGấp đôi- giá trị dấu phẩy động ( 4 và 8 byte)
    (từ -3.402823·10 38 đến -1.401298·10 -45 cho các giá trị âm và
    từ 1.401298·10 -45 đến 3.402823·10 38 cho các giá trị dương cho Độc thân và
    từ -1.79769313486232·10 308 đến -4.94065645841247·10 -324 cho các giá trị âm và
    từ 4.94065645841247·10 -324 đến 1.79769313486232·10 308 cho giá trị dương cho Double);
  • sợi dây( Sợi dâyđộ dài thay đổi (tối đa khoảng 2 tỷ ký tự) và độ dài cố định (tối đa khoảng 65.400 ký tự));
  • ngày và giờ ( Ngày- từ 01.01.100 đến 31.12.9999), 8 byte;
  • boolean ( Boolean- chỉ có thể lưu trữ giá trị Đúng và Sai), 2 byte;
  • sự vật ( Sự vật- lưu trữ một tham chiếu đến bất kỳ đối tượng nào trong bộ nhớ);
  • Khác nhau- một loại dữ liệu đặc biệt có thể lưu trữ bất kỳ loại dữ liệu nào, 16 byte +1
Chỉ định loại dữ liệu là từ khóa ngôn ngữ (và được đánh dấu khi nhập vào trình soạn thảo VBA). Các hoạt động khác nhau được phép trên các loại dữ liệu khác nhau. Có ba loại hoạt động chính trong VBA:
  • toán học, được thực hiện trên các con số, kết quả của chúng là các con số;
  • các phép toán quan hệ có thể được áp dụng không chỉ cho các số; kết quả của chúng là một giá trị thuộc kiểu logic;
  • logic được sử dụng trong các biểu thức logic và kết quả của chúng là các giá trị logic.

3. Ưu tiên hoạt động

Ưu tiên Hoạt động
1
2
3
4
5
6
7
8
9
10
11
12
Lệnh gọi hàm và dấu ngoặc đơn
^
- (đổi dấu)
*, /
\
mod
+, –
>, <, >=, <=, <>, =
Không

Hoặc
Xor

4. Hàm toán học

Chức năng Giá trị trả về
Cơ bụng(<число>) Mô đun (giá trị tuyệt đối) của một số
Atn (<число>) Arctang
Vì (<число>) Cô sin
Exp (<число>) Số mũ, tức là kết quả của việc nâng cơ số logarit tự nhiên lên lũy thừa xác định
Nhật ký(<число>) logarit tự nhiên
Rnd (<число>) Số ngẫu nhiên từ khoảng)