Hàm VBA - Gọi, Giá trị trả về và Tham số

Hướng dẫn này sẽ dạy bạn tạo và sử dụng các hàm có và không có tham số trong VBA

VBA chứa một lượng lớn các hàm tích hợp sẵn để bạn sử dụng, nhưng bạn cũng có thể viết cho riêng mình. Khi bạn viết mã trong VBA, bạn có thể viết nó trong một Thủ tục con hoặc một Thủ tục Hàm. Thủ tục Hàm có thể trả về một giá trị cho mã của bạn. Điều này cực kỳ hữu ích nếu bạn muốn VBA thực hiện một tác vụ để trả về một kết quả. Các hàm VBA cũng có thể được gọi từ bên trong Excel, giống như các hàm Excel tích hợp sẵn của Excel.

Tạo một hàm không có đối số

Để tạo một hàm, bạn cần xác định hàm bằng cách đặt tên cho hàm. Khi đó, hàm có thể được định nghĩa như một kiểu dữ liệu cho biết loại dữ liệu bạn muốn hàm trả về.

Bạn có thể muốn tạo một hàm trả về giá trị tĩnh mỗi khi nó được gọi - một chút giống như một hằng số.

123 Hàm GetValue () As IntegerGetValue = 50Chức năng kết thúc

Nếu bạn chạy hàm, hàm sẽ luôn trả về giá trị 50.

Bạn cũng có thể tạo các hàm tham chiếu đến các đối tượng trong VBA nhưng bạn cần sử dụng Đặt từ khóa để trả về giá trị từ hàm.

123 Hàm GetRange () làm Phạm viĐặt GetRange = Range ("A1: G4")Chức năng kết thúc

Nếu bạn sử dụng hàm trên trong mã VBA của mình, hàm sẽ luôn trả về phạm vi ô từ A1 đến G4 trong bất kỳ trang tính nào bạn đang làm việc.

Gọi một hàm từ một thủ tục con

Khi bạn tạo một hàm, bạn có thể gọi nó từ bất kỳ nơi nào khác trong mã của mình bằng cách sử dụng Thủ tục con để gọi hàm.

Giá trị 50 sẽ luôn được trả lại.

Bạn cũng có thể gọi hàm GetRange từ một Thủ tục phụ.

Trong ví dụ trên, Hàm GetRange được gọi bởi Thủ tục con để in đậm các ô trong đối tượng phạm vi.

Tạo các chức năng

Đối số duy nhất

Bạn cũng có thể gán một tham số hoặc các tham số cho hàm của mình. Các tham số này có thể được gọi là Đối số.

123 Hàm ConvertKilosToPounds (dblKilo dưới dạng Double) thành DoubleConvertKiloToPounds = dblKilo * 2.2Chức năng kết thúc

Sau đó, chúng ta có thể gọi hàm trên từ một Thủ tục phụ để tính ra một khối lượng kg cụ thể là bao nhiêu pound.

Một hàm có thể được gọi từ nhiều thủ tục trong mã VBA của bạn nếu được yêu cầu. Điều này rất hữu ích vì nó ngăn bạn phải viết đi viết lại cùng một đoạn mã. Nó cũng cho phép bạn chia các thủ tục dài thành các chức năng nhỏ có thể quản lý được.

Trong ví dụ trên, chúng ta có 2 thủ tục - mỗi thủ tục đang sử dụng Hàm để tính giá trị pound của kg được chuyển cho chúng trong dblKilo Đối số của hàm.

Nhiều đối số

Bạn có thể tạo một Hàm với nhiều đối số và chuyển các giá trị cho Hàm bằng một Thủ tục con.

123 Hàm TínhDayDiff (Date1 as Date, Date2 as Date) dưới dạng DoubleTínhDayDiff = Ngày2-Ngày1Chức năng kết thúc

Sau đó chúng ta có thể gọi hàm để tính số ngày giữa 2 ngày.

Đối số tùy chọn

Bạn cũng có thể chuyển các đối số Tùy chọn cho một Hàm. Nói cách khác, đôi khi bạn có thể cần đối số, và đôi khi bạn có thể không - tùy thuộc vào mã bạn đang sử dụng Hàm với.

123456 Hàm TínhDayDiff (Ngày1 là Ngày, Ngày2 tùy chọn là Ngày) dưới dạng Double'kiểm tra ngày thứ hai và nếu không có, hãy đặt Date2 bằng ngày hôm nay.Nếu Date2 = 0 thì Date2 = Date'tính toán sự khác biệtTínhDayDiff = Ngày2-Ngày1Chức năng kết thúc

Giá trị đối số mặc định

Bạn cũng có thể đặt giá trị mặc định của các đối số Tùy chọn khi bạn đang tạo hàm để nếu người dùng bỏ qua đối số, giá trị mà bạn đã đặt làm mặc định sẽ được sử dụng thay thế.

1234 Hàm TínhDayDiff (Ngày1 là Ngày, Ngày2 tùy chọn là Ngày = "06/02/2020") dưới dạng Double'tính toán sự khác biệtTínhDayDiff = Ngày2-Ngày1Chức năng kết thúc

ByVal và ByRef

Khi bạn chuyển các giá trị cho một hàm, bạn có thể sử dụng ByVal hoặc ByRef từ khóa. Nếu bạn bỏ qua một trong hai điều này, ByRef được sử dụng làm mặc định.

ByVal có nghĩa là bạn đang chuyển một bản sao của biến vào hàm, trong khi ByRef có nghĩa là bạn đang tham chiếu đến giá trị ban đầu của biến. Khi bạn chuyển một bản sao của biến (ByVal), giá trị ban đầu của biến là KHÔNG PHẢI đã thay đổi, nhưng khi bạn tham chiếu đến biến, giá trị ban đầu của biến sẽ bị hàm thay đổi.

1234 Hàm GetValue (ByRef intA As Integer) As IntegerintA = intA * 4GetValue = intAChức năng kết thúc

Trong hàm trên, có thể bỏ qua ByRef và hàm sẽ hoạt động theo cách tương tự.

1234 Hàm GetValue (intA As Integer) As IntegerintA = intA * 4GetValue = intAChức năng kết thúc

Để gọi hàm này, chúng ta có thể chạy một thủ tục con.

123456789 Sub TestValues ​​()Dim intVal As Integer'điền biến với giá trị 10intVal = 10'chạy hàm GetValue và hiển thị giá trị trong cửa sổ ngay lập tứcDebug.Print GetValue (intVal)'hiển thị giá trị của biến intVal trong cửa sổ ngay lập tứcDebug.Print intValKết thúc Sub

Lưu ý rằng các cửa sổ gỡ lỗi hiển thị giá trị 40 cả hai lần. Khi bạn chuyển biến IntVal cho hàm - giá trị của 10 được chuyển cho hàm và nhân với 4. Sử dụng từ khóa ByRef (hoặc bỏ qua hoàn toàn), sẽ SỬA giá trị của biến IntVal. Điều này được hiển thị khi bạn hiển thị đầu tiên kết quả của hàm trong cửa sổ ngay lập tức (40), sau đó là giá trị của biến IntVal trong cửa sổ gỡ lỗi (cũng là 40).

Nếu chúng ta KHÔNG muốn thay đổi giá trị của biến ban đầu, chúng ta phải sử dụng ByVal trong hàm.

1234 Hàm GetValue (ByVal intA As Integer) As IntegerintA = intA * 4GetValue = intAChức năng kết thúc

Bây giờ nếu chúng ta gọi hàm từ một thủ tục con, giá trị của biến IntVal sẽ vẫn ở mức 10.

Chức năng thoát

Nếu bạn tạo một hàm kiểm tra một điều kiện nhất định và khi điều kiện được tìm thấy là đúng, bạn muốn trả về giá trị từ hàm, bạn có thể cần thêm câu lệnh Exit Function trong Hàm để thoát khỏi hàm trước đó. bạn đã chạy qua tất cả mã trong chức năng đó.

12345678910111213 Hàm FindNumber (strSearch As String) As IntegerDim i As Integer'lặp qua từng chữ cái trong chuỗiFor i = 1 To Len (strSearch)'nếu ký tự là số, hãy trả về giá trị cho hàmIf IsNumeric (Mid (strSearch, i, 1)) ThìFindNumber = Mid (strSearch, i, 1)'sau đó thoát khỏi chức năngChức năng thoátKết thúc nếuKế tiếpFindNumber = 0Chức năng kết thúc

Hàm trên sẽ lặp qua chuỗi được cung cấp cho đến khi nó tìm thấy một số và sau đó trả về số đó từ chuỗi. Nó sẽ chỉ tìm thấy số đầu tiên trong chuỗi vì sau đó nó sẽ Lối ra chức năng.

Hàm ở trên có thể được gọi bởi một Sub thường trình chẳng hạn như hàm dưới đây.

1234567 Sub CheckForNumber ()Dim NumIs dưới dạng Số nguyên'chuyển một chuỗi văn bản đến hàm tìm sốNumIs = FindNumber ("Tầng trên, 8 Oak Lane, Texas")'hiển thị kết quả trong cửa sổ ngay lập tứcDebug.Print NumIsKết thúc Sub

Sử dụng một hàm từ bên trong một trang tính Excel

Ngoài việc gọi một hàm từ mã VBA của bạn bằng thủ tục con, bạn cũng có thể gọi hàm từ bên trong trang tính Excel của mình. Các chức năng bạn đã tạo theo mặc định sẽ xuất hiện trong danh sách chức năng của bạn trong phần Người dùng xác định của danh sách chức năng.

Bấm vào fx để hiển thị hộp thoại Chèn Hàm.

Lựa chọn Đã xác định người dùng từ Danh sách Danh mục

Chọn chức năng bạn yêu cầu từ chức năng có sẵn Chức năng do người dùng xác định (Của UDF).

Ngoài ra, khi bạn bắt đầu viết hàm của mình trong Excel, hàm sẽ xuất hiện trong danh sách các hàm thả xuống.

Nếu bạn không muốn hàm có sẵn bên trong trang tính Excel, bạn cần đặt từ Riêng trước từ Hàm khi bạn tạo hàm trong mã VBA của mình.

123 Hàm Private TínhDayDiff (Date1 as Date, Date2 as Date) dưới dạng DoubleTínhDayDiff = Ngày2-Ngày1Chức năng kết thúc

Bây giờ nó sẽ không xuất hiện trong danh sách thả xuống hiển thị các hàm Excel có sẵn.

Tuy nhiên, khá thú vị, bạn vẫn có thể sử dụng chức năng - nó chỉ sẽ không xuất hiện trong danh sách khi tìm kiếm nó!

Nếu bạn đã khai báo đối số thứ hai là Không bắt buộc, bạn có thể bỏ qua nó trong trang tính Excel cũng như trong mã VBA.

Bạn cũng có thể sử dụng một hàm mà bạn đã tạo mà không có đối số trong trang tính Excel của mình.

Bạn sẽ giúp sự phát triển của trang web, chia sẻ trang web với bạn bè

wave wave wave wave wave