Hiểu biến và hằng số trong Excel Macro

Trong bài viết này, bạn sẽ tìm hiểu các hằng và biến trong macro, chúng có thể được sử dụng ở đâu và sự khác biệt chính giữa các kiểu dữ liệu khác nhau là gì. Nó cũng sẽ được tiết lộ tại sao hằng số là cần thiết, nếu bạn chỉ có thể viết một biến và không bao giờ thay đổi nó.

Giống như các ngôn ngữ lập trình khác, dữ liệu có thể được lưu trữ trong các biến hoặc hằng số (cả hai đều thường được gọi là vùng chứa dữ liệu). Đây là sự khác biệt chính giữa các khái niệm này. Cái trước có thể thay đổi tùy thuộc vào những gì diễn ra trong chương trình. Đổi lại, các hằng được đặt một lần và không thay đổi giá trị của chúng.

Hằng số có thể hữu ích nếu bạn cần sử dụng cùng một giá trị lớn nhiều lần. Thay vì sao chép số, bạn có thể chỉ cần viết tên của hằng số. Ví dụ: bạn có thể sử dụng hằng số “Pi” để lưu trữ số Pi, là một giá trị không đổi. Nó rất lớn, và mỗi lần viết nó hoặc tìm kiếm và sao chép nó là một việc khá khó khăn. Và như vậy, chỉ cần viết hai ký tự là đủ, và môi trường sẽ tự động sử dụng số lượng mong muốn.

Người dùng Excel cần khai báo các biến nếu thỉnh thoảng anh ta cần thay đổi giá trị được lưu trữ trong chúng. Ví dụ: bạn có thể đặt một biến có tên là sVAT_Rate, biến này sẽ lưu trữ thuế suất VAT hiện tại cho sản phẩm. Nếu nó thay đổi, bạn có thể nhanh chóng sửa lại. Điều này đặc biệt hữu ích cho những người kinh doanh ở Hoa Kỳ, nơi một số hàng hóa có thể không phải chịu thuế VAT (và thuế này cũng khác nhau giữa các tiểu bang).

Loại dữ liệu

Mỗi vùng chứa dữ liệu có thể là một trong một số kiểu. Dưới đây là bảng mô tả các loại thông tin đã xử lý tiêu chuẩn. Có rất nhiều trong số chúng, và có vẻ như đối với người mới bắt đầu, chúng lặp lại nhau. Nhưng đây là một cảm giác hão huyền. Đọc tiếp để tìm hiểu lý do tại sao việc chỉ định kiểu dữ liệu chính xác lại quan trọng như vậy.

Không nên sử dụng kiểu dữ liệu chiếm nhiều dung lượng hơn trong bộ nhớ cho số lượng nhỏ. Ví dụ, đối với số 1, chỉ cần sử dụng kiểu Byte là đủ. Điều này sẽ có ảnh hưởng tích cực đến hiệu suất của mô-đun thực thi, đặc biệt là trên các máy tính yếu. Nhưng điều quan trọng là đừng đi quá xa ở đây. Nếu bạn sử dụng kiểu dữ liệu quá nhỏ gọn, giá trị quá khổ có thể không vừa với kiểu dữ liệu đó.

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

Không khuyến khích sử dụng vùng chứa dữ liệu mà không khai báo trước. Sau đó, một số vấn đề có thể phát sinh, để tránh điều này, cần phải viết một vài dòng mã nhỏ với liệt kê các biến hoặc hằng số.

Để khai báo một biến, câu lệnh Dim được sử dụng. Ví dụ, như thế này:

Dim tên_biến dưới dạng số nguyên

Variable_Name là tên của biến. Tiếp theo, toán tử As được viết, cho biết kiểu dữ liệu. Thay vì các chuỗi “Variable_Name” và “Integer”, bạn có thể chèn tên và kiểu dữ liệu của riêng mình.

Hằng số cũng có thể được khai báo, nhưng trước tiên bạn phải xác định giá trị của chúng. Một trong những tùy chọn là:

Hằng số iMaxCount = 5000

Công bằng mà nói, trong một số trường hợp, bạn có thể làm mà không cần khai báo một biến, nhưng trong trường hợp này, chúng sẽ tự động được gán kiểu Biến thể. Tuy nhiên, điều này không được khuyến khích vì những lý do sau:

  1. Biến thể được xử lý chậm hơn nhiều và nếu có nhiều biến như vậy, việc xử lý thông tin có thể bị chậm lại đáng kể trên các máy tính yếu. Có vẻ như những giây đó sẽ quyết định? Nhưng nếu bạn phải viết một số lượng lớn các dòng mã, và sau đó chạy nó trên các máy tính yếu (vẫn được bán, do các bộ văn phòng hiện đại yêu cầu rất nhiều RAM), bạn hoàn toàn có thể dừng công việc. Có những trường hợp khi việc viết macro không hợp lý đã dẫn đến việc đóng băng các sổ thông minh có dung lượng RAM nhỏ và không được thiết kế để thực hiện các tác vụ phức tạp. 
  2. Việc ghi sai tên được cho phép, điều này có thể được ngăn chặn bằng cách sử dụng câu lệnh Option Explicit, cho phép bạn tìm thấy một biến chưa được khai báo, nếu một biến được tìm thấy. Đây là một cách dễ dàng để phát hiện lỗi, vì lỗi đánh máy nhỏ nhất khiến trình thông dịch không thể xác định biến. Và nếu bạn bật chế độ khai báo biến, trình thông dịch sẽ đơn giản là không cho phép bạn chạy macro nếu tìm thấy vùng chứa dữ liệu không được khai báo ngay từ đầu mô-đun.
  3. Tránh lỗi do giá trị biến không khớp với kiểu dữ liệu. Thông thường, việc gán giá trị văn bản cho một biến số nguyên sẽ gây ra lỗi. Đúng, một mặt, kiểu chung được gán mà không cần khai báo, nhưng nếu chúng được khai báo trước thì có thể tránh được các lỗi ngẫu nhiên.

Do đó, bất chấp mọi thứ, chúng tôi khuyên bạn nên khai báo tất cả các biến trong macro Excel.

Có một điều nữa cần lưu ý khi khai báo biến. Có thể không gán bất kỳ giá trị nào cho một biến khi khai báo, nhưng trong trường hợp này, nó nhận một giá trị mặc định. Ví dụ:

  1. Các dòng được làm trống.
  2. Các số nhận giá trị 0.
  3. Các biến kiểu Boolean ban đầu được coi là sai.
  4. Ngày mặc định là ngày 30 tháng 1899 năm XNUMX.

Ví dụ: bạn không cần gán giá trị 0 cho một biến số nguyên nếu trước đó không có giá trị nào được chỉ định. Cô ấy đã chứa số này.

Tuyên bố rõ ràng về tùy chọn

Câu lệnh này cho phép bạn khai báo tất cả các biến được sử dụng trong mã VBA và xác định sự hiện diện của bất kỳ vùng chứa chưa được khai báo nào trước khi chạy mã. Để sử dụng tính năng này, chỉ cần viết một dòng mã Option Explicit ở đầu mã macro.

Nếu bạn cần đưa câu lệnh này vào mã của mình mọi lúc, bạn có thể làm như vậy bằng cách sử dụng cài đặt đặc biệt trong trình soạn thảo VBA. Để bật tùy chọn này, bạn phải:

  1. Chuyển đến môi trường phát triển theo đường dẫn - Công cụ> Tùy chọn.
  2. Trong cửa sổ mở ra sau đó, hãy mở tab Trình chỉnh sửa.
  3. Và cuối cùng, chọn hộp bên cạnh mục Yêu cầu khai báo biến.

Sau khi hoàn thành các bước này, hãy nhấp vào nút “OK”. 

Vậy là xong, bây giờ khi viết mỗi macro mới, dòng này sẽ tự động được chèn vào đầu đoạn mã.

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

Mỗi biến hoặc hằng số chỉ có một phạm vi giới hạn. Nó phụ thuộc vào nơi bạn khai báo nó.

Giả sử chúng ta có một hàm Tổng chi phí()và nó sử dụng biến sVAT_Rate. Tùy thuộc vào vị trí trong mô-đun, nó sẽ có phạm vi khác nhau:

Tùy chọn rõ ràng

Dim sVAT_Rate as Single

Hàm Total_Cost () As Double

.

.

.

Cuối Chức năng

Nếu một biến được khai báo ở trên cùng của chính một mô-đun, thì nó sẽ lan truyền trong toàn mô-đun đó. Đó là, nó có thể được đọc bằng mọi thủ tục.

Hơn nữa, nếu một trong các quy trình đã thay đổi giá trị của biến, thì quy trình tiếp theo cũng sẽ đọc giá trị đã sửa này. Nhưng trong các mô-đun khác, biến này sẽ vẫn không được đọc.

Tùy chọn rõ ràng

Hàm Total_Cost () As Double

Dim sVAT_Rate as Single

   .

   .

   .

Cuối Chức năng

Trong trường hợp này, biến được khai báo bên trong thủ tục và trình thông dịch sẽ báo lỗi nếu nó được sử dụng trong thủ tục khác.

Nếu bạn muốn biến được đọc bởi các mô-đun khác, bạn phải sử dụng từ khóa Public thay vì từ khóa Dim. Tương tự, bạn có thể giới hạn phạm vi của một biến chỉ trong mô-đun hiện tại bằng cách sử dụng câu lệnh Public, được viết thay cho từ Dim.

Bạn có thể đặt phạm vi của hằng theo cách tương tự, nhưng từ khóa ở đây được viết cùng với toán tử Const.

Đây là một bảng với một ví dụ điển hình về cách nó hoạt động với các hằng và biến.

Tùy chọn rõ ràng

SVAT_Rate công khai dưới dạng duy nhất

Const iMax_Count công khai = 5000

Trong ví dụ này, bạn có thể thấy cách từ khóa Public được sử dụng để khai báo một biến và những gì bạn cần viết trong trình soạn thảo Visual Basic để khai báo một hằng số chung. Phạm vi của các vùng chứa giá trị này áp dụng cho tất cả các mô-đun.
Tùy chọn rõ ràng

SVAT_Rate Riêng tư Như Đơn lẻ

Const iMax_Count riêng tư = 5000

Ở đây, các biến và hằng được khai báo bằng từ khóa Private. Điều này có nghĩa là chúng chỉ có thể được nhìn thấy trong mô-đun hiện tại và các thủ tục trong các mô-đun khác không thể sử dụng chúng.

Tại sao hằng số và biến lại cần thiết

Việc sử dụng các hằng và biến cho phép bạn tăng mức độ dễ hiểu của mã. Và nếu người mới bắt đầu nói chung không có câu hỏi về lý do tại sao cần có biến, thì sẽ có nhiều điều mơ hồ về sự cần thiết của hằng số. Và câu hỏi này, thoạt nhìn, có vẻ khá logic. Sau cùng, bạn có thể khai báo một biến một lần và không bao giờ thay đổi nó nữa.

Câu trả lời hóa ra nằm ở đâu đó trong cùng một mặt phẳng liên quan đến việc sử dụng các kiểu dữ liệu chiếm một không gian lớn trong bộ nhớ. Nếu chúng ta đang xử lý một số lượng lớn các biến, chúng ta có thể vô tình thay đổi vùng chứa hiện có. Nếu người dùng quy định rằng một giá trị nhất định sẽ không bao giờ thay đổi, thì môi trường sẽ tự động kiểm soát điều này.

Điều này đặc biệt quan trọng khi macro được viết bởi một số lập trình viên. Người ta có thể biết rằng một số biến không nên thay đổi. Còn cái khác thì không. Nếu bạn chỉ định toán tử Const, một nhà phát triển khác sẽ biết rằng giá trị này không thay đổi.

Hoặc, nếu có một hằng số có một tên và biến có một tên khác, nhưng tương tự. Nhà phát triển đơn giản có thể nhầm lẫn chúng. Ví dụ: một biến không cần thay đổi được gọi là Biến11 và một biến khác có thể chỉnh sửa được gọi là Biến1. Một người có thể tự động, khi viết mã, vô tình bỏ qua một đơn vị thừa và không nhận thấy nó. Do đó, vùng chứa cho các giá trị sẽ bị thay đổi, không được chạm vào.

Hoặc bản thân nhà phát triển có thể quên biến nào anh ta có thể chạm vào và biến nào anh ta không thể. Điều này thường xảy ra khi mã được viết trong vài tuần và kích thước của nó trở nên lớn. Trong thời gian này, bạn rất dễ quên ngay cả biến này hay biến kia có nghĩa là gì.

Có, bạn có thể làm với các nhận xét trong tình huống này, nhưng không phải dễ dàng hơn để chỉ định từ Const phải không?

Kết luận

Các biến là một thành phần thiết yếu của lập trình macro, cho phép bạn thực hiện các hoạt động phức tạp, từ tính toán đến thông báo cho người dùng về các sự kiện nhất định hoặc chỉ định các giá trị cụ thể trong các ô của bảng tính.

Các hằng số nên được sử dụng nếu nhà phát triển biết chắc chắn rằng nội dung của các vùng chứa này sẽ không thay đổi trong tương lai. Bạn không nên sử dụng các biến để thay thế, vì có thể vô tình làm sai.

Bình luận