Các biến và hằng số trong VBA

Trong VBA, cũng như bất kỳ ngôn ngữ lập trình nào khác, các biến và hằng số được sử dụng để lưu trữ bất kỳ giá trị nào. Như tên của nó, các biến có thể thay đổi, trong khi các hằng số lưu trữ các giá trị cố định.

Ví dụ, một hằng số Pi lưu trữ giá trị 3,14159265… Số “Pi” sẽ không thay đổi trong quá trình thực hiện chương trình, nhưng vẫn thuận tiện hơn khi lưu trữ một giá trị như một hằng số.

Đồng thời, chúng ta có thể sử dụng biến sVAT_Rate để ghi thuế suất thuế GTGT hàng mua vào. Giá trị biến sVAT_Rate có thể thay đổi tùy thuộc vào sản phẩm được mua.

Loại dữ liệu

Tất cả các biến và hằng thuộc một kiểu dữ liệu cụ thể. Bảng dưới đây liệt kê các kiểu dữ liệu được sử dụng trong VBA với mô tả và phạm vi giá trị có thể có:

Loại dữ liệu Kích thước máyMô tảPhạm vi giá trị
byte1 byteNhững số nguyên dương; thường được sử dụng cho dữ liệu nhị phântừ 0 để 255
Boolean2 byteCó thể là Đúng hoặc SaiĐúng hay sai
Số nguyên2 byteSố nguyên (không có phần lẻ)từ -32 đến +768
dài4 byteSố nguyên lớn (không có phần phân số)от -2 147 483 648 до +2 147 483 647
duy nhất4 byteSố dấu phẩy động chính xác đơntừ -3.4e38 đến + 3.4e38
Kép8 byteSố dấu phẩy động chính xác gấp đôitừ -1.8e308 đến + 1.8e308
Tiền tệ8 byteSố dấu phẩy động, với một số vị trí thập phân cố địnhот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Ngày8 byteNgày và giờ - Dữ liệu kiểu Ngày được biểu diễn bằng một số dấu phẩy động. Phần nguyên của số này biểu thị ngày, và phần thập phân biểu thị thời gian.từ ngày 1 tháng 100 năm 31 đến ngày 9999 tháng XNUMX năm XNUMX
Đối tượng4 byteĐối tượng tham chiếuBất kỳ tham chiếu đối tượng nào
Chuỗiđang thay đổiBộ ký tự. Kiểu chuỗi có thể có độ dài cố định hoặc thay đổi. Thường được sử dụng hơn với độ dài thay đổiĐộ dài cố định - lên đến khoảng 65 ký tự. Độ dài có thể thay đổi - lên đến khoảng 500 tỷ ký tự
biến thểđang thay đổiCó thể chứa ngày tháng, số thực hoặc chuỗi ký tự. Loại này được sử dụng trong trường hợp không biết trước loại dữ liệu nào sẽ được nhập vào.Số - Đôi, chuỗi - Chuỗi

Rõ ràng, sử dụng bảng trên và chọn kiểu dữ liệu phù hợp, bạn có thể sử dụng bộ nhớ tiết kiệm hơn (ví dụ: chọn kiểu dữ liệu Số nguyên thay vì dài or duy nhất thay vì Kép). Tuy nhiên, khi sử dụng các kiểu dữ liệu nhỏ gọn hơn, bạn cần phải cẩn thận rằng mã của bạn không cố gắng lắp các giá trị lớn không tương xứng vào chúng.

Khai báo biến và hằng số

Ghi chú của người dịch: Nói về các biến trong VBA, cần phải nhắc đến một điểm rất quan trọng nữa. Nếu chúng ta khai báo một biến nhưng không gán bất kỳ giá trị nào cho nó, thì nó sẽ được khởi tạo với một giá trị mặc định:

• chuỗi văn bản được khởi tạo bằng chuỗi rỗng;

• số - giá trị 0;

• loại biến Boolean - Sai;

• ngày - 30 tháng 1899 năm XNUMX.

Trước khi một biến hoặc hằng số có thể được sử dụng, nó phải được khai báo. Để thực hiện việc này, hãy thêm dòng mã đơn giản sau vào macro:

Dim Имя_Переменной As Тип_Данных

Trong dòng mã trên tên_biến là tên của biến sẽ được sử dụng trong mã và Loại dữ liệu là một trong những kiểu dữ liệu từ bảng được đưa ra trước đó một chút trong bài viết này. Ví dụ:

Dim sVAT_Rate As Single Dim i As Integer

Hằng được khai báo tương tự, nhưng khi khai báo hằng phải chỉ ra ngay giá trị của nó. Ví dụ, như thế này:

Const iMaxCount = 5000 Const iMaxScore = 100

Không nhất thiết phải khai báo biến trong Excel. Theo mặc định, tất cả các biến đã nhập nhưng không được khai báo trong Excel sẽ có kiểu biến thể và sẽ có thể chấp nhận cả giá trị số và văn bản.

Do đó, lập trình viên có thể sử dụng biến mới bất cứ lúc nào (ngay cả khi nó chưa được khai báo) và Excel sẽ coi nó như một biến kiểu biến thể. Tuy nhiên, có một số lý do tại sao điều này không nên được thực hiện:

  1. Sử dụng bộ nhớ và tốc độ tính toán. Nếu bạn không khai báo một biến có chỉ báo kiểu dữ liệu, thì theo mặc định, nó sẽ được đặt thành kiểu biến thể. Kiểu dữ liệu này sử dụng nhiều bộ nhớ hơn các kiểu dữ liệu khác. Một vài byte thừa cho mỗi biến nghe có vẻ không nhiều, nhưng trong thực tế, các chương trình có thể có hàng nghìn biến (đặc biệt là khi làm việc với mảng). Do đó, bộ nhớ phụ được sử dụng bởi các biến như biến thể, so với các biến loại Số nguyên or duy nhất, có thể thêm đến một số lượng đáng kể. Ngoài ra, các phép toán với các biến kiểu biến thể được thực thi chậm hơn nhiều so với các biến của các loại khác, tương ứng, thêm hàng nghìn biến loại biến thể có thể làm chậm đáng kể tính toán.
  2. Ngăn ngừa lỗi chính tả trong tên biến. Nếu tất cả các biến được khai báo, thì câu lệnh VBA có thể được sử dụng: Tùy chọn rõ ràng (chúng ta sẽ nói về nó sau) để xác định tất cả các biến chưa được khai báo. Điều này giúp loại bỏ sự xuất hiện của một lỗi trong chương trình do tên biến bị viết sai. Ví dụ: sử dụng một biến có tên sVAT_Rate, bạn có thể mắc lỗi đánh máy và gán giá trị cho biến này, hãy viết: “VATRate = 0,175”. Dự kiến ​​rằng từ nay, biến sVAT_Rate nên chứa giá trị 0,175 - nhưng tất nhiên là không. Nếu chế độ khai báo bắt buộc của tất cả các biến được sử dụng được bật, thì trình biên dịch VBA sẽ ngay lập tức chỉ ra lỗi, vì nó sẽ không tìm thấy biến Tỷ lệ VAT trong số những người đã công bố.
  3. Đánh dấu các giá trị không khớp với kiểu đã khai báo của một biến. Nếu bạn khai báo một biến thuộc một kiểu nhất định và cố gắng gán dữ liệu thuộc kiểu khác cho nó, bạn sẽ gặp lỗi, nếu không được sửa, có thể khiến chương trình bị treo. Thoạt nhìn, đây có vẻ là một lý do chính đáng để không khai báo các biến, nhưng trên thực tế, so với trước khi hóa ra một trong các biến đã nhận sai dữ liệu mà nó được cho là phải nhận - càng nhiều càng tốt! Ngược lại, nếu chương trình tiếp tục chạy, kết quả có thể không chính xác và không mong muốn, và việc tìm ra nguyên nhân gây ra lỗi sẽ khó khăn hơn nhiều. Cũng có thể là macro sẽ được thực thi "thành công". Kết quả là, lỗi sẽ không được chú ý và công việc sẽ tiếp tục với dữ liệu không chính xác!

Về vấn đề này, chúng tôi mong muốn phát hiện một kiểu dữ liệu không chính xác và sửa các lỗi như vậy trong mã càng sớm càng tốt. Vì những lý do này, bạn nên khai báo tất cả các biến khi viết macro VBA.

Tùy chọn rõ ràng

Nhà điều hành Tùy chọn rõ ràng khiến tất cả các biến sẽ được sử dụng trong mã VBA được khai báo và gắn cờ tất cả các biến chưa được khai báo là lỗi trong quá trình biên dịch (trước khi bắt đầu thực thi mã). Áp dụng toán tử này không khó - chỉ cần viết dòng này ở đầu tệp VBA:

Option Explicit

Nếu bạn muốn luôn luôn chèn Tùy chọn rõ ràng lên đầu mỗi mô-đun VBA mới được tạo, điều này có thể được thực hiện tự động. Để làm điều này, bạn cần bật tùy chọn Yêu cầu khai báo biến trong cài đặt trình chỉnh sửa VBA.

Điều này được thực hiện như thế này:

  • Từ menu Visual Basic Editor, bấm công cụ > Các lựa chọn
  • Trong hộp thoại xuất hiện, hãy mở tab Biên tập viên
  • Kiểm tra hộp Yêu cầu khai báo biến và báo chí OK

Khi được bật, chuỗi Tùy chọn rõ ràng sẽ được tự động chèn vào đầu mỗi mô-đun mới được tạo.

Phạm vi của các biến và hằng số

Mỗi biến hoặc hằng được khai báo có phạm vi giới hạn riêng của nó, nghĩa là, một phần giới hạn của chương trình mà biến này tồn tại. Phạm vi phụ thuộc vào nơi thực hiện khai báo biến hoặc hằng số. Lấy ví dụ, biến sVAT_Rate, được sử dụng trong hàm Tổng chi phí. Bảng sau đây thảo luận về hai tùy chọn cho phạm vi thay đổi sVAT_Rateđược khai báo ở hai vị trí khác nhau trong mô-đun:

Tùy chọn Dim sVAT_Rate rõ ràng như một hàm Total_Cost () As Double ... End Function
Nếu biến sVAT_Rate được khai báo ở phần đầu của mô-đun, thì phạm vi của biến này sẽ là toàn bộ mô-đun (tức là biến sVAT_Rate sẽ được công nhận bởi tất cả các thủ tục trong mô-đun này).

Do đó, nếu trong hàm Tổng chi phí biến sVAT_Rate sẽ được gán một số giá trị, sau đó hàm tiếp theo được thực thi trong cùng một mô-đun sẽ sử dụng biến sVAT_Rate với ý nghĩa tương tự.

Tuy nhiên, nếu một số hàm nằm trong một mô-đun khác được gọi, thì đối với nó, biến sVAT_Rate sẽ không được biết đến.

Tùy chọn Hàm rõ ràng Total_Cost () Như đôi Dim sVAT_Rate Như một ... Kết thúc Hàm
Nếu biến sVAT_Rate được khai báo ở đầu hàm Tổng chi phí, thì phạm vi của nó sẽ chỉ giới hạn trong chức năng này (tức là trong chức năng Tổng chi phí, bạn có thể sử dụng biến sVAT_Rate, nhưng không phải bên ngoài).

Khi cố gắng sử dụng sVAT_Rate trong một thủ tục khác, trình biên dịch VBA sẽ báo lỗi vì biến này không được khai báo bên ngoài hàm Tổng chi phí (miễn là nhà điều hành được sử dụng Tùy chọn rõ ràng).

Trong ví dụ minh họa ở trên, biến được khai báo ở cấp mô-đun với từ khóa Sun. Tuy nhiên, có thể cần các biến đã khai báo có thể được sử dụng trong các mô-đun khác. Trong những trường hợp như vậy, để khai báo một biến thay vì một từ khóa Sun từ khóa phải được sử dụng Công khai.

Nhân tiện, để khai báo một biến ở cấp độ mô-đun, thay vì từ khóa Sun từ khóa có thể được sử dụng Riêng, chỉ ra rằng biến này chỉ được sử dụng trong mô-đun hiện tại.

Bạn cũng có thể sử dụng từ khóa để khai báo hằng số. Công khai и Riêng, nhưng không thay vì từ khóa const, cùng với nó.

Các ví dụ sau đây cho thấy việc sử dụng các từ khóa Công khai и Riêng áp dụng cho các biến và hằng số.

Tùy chọn Công khai rõ ràng sVAT_Rate như một Const iMax_Count công khai duy nhất = 5000 ...    
Trong ví dụ này, từ khóa Công khai được sử dụng để khai báo một biến sVAT_Rate và hằng số iMax_Count. Phạm vi của các phần tử được khai báo theo cách này sẽ là toàn bộ dự án hiện tại.

Điều này có nghĩa rằng sVAT_Rate и iMax_Count sẽ có sẵn trong bất kỳ mô-đun dự án nào.

Tùy chọn Riêng tư rõ ràng sVAT_Rate Như Đơn lẻ Const iMax_Count = 5000 ...    
Trong ví dụ này, để khai báo một biến sVAT_Rate và hằng số iMax_Count từ khóa được sử dụng Riêng. Phạm vi của các phần tử này là mô-đun hiện tại.

Điều này có nghĩa rằng sVAT_Rate и iMax_Count sẽ có sẵn trong tất cả các thủ tục của mô-đun hiện tại, nhưng sẽ không có sẵn cho các thủ tục trong các mô-đun khác.

Bình luận