VBA 中的“函數”和“子”過程

內置 VBA 函數

在開始創建自己的 VBA 函數之前,最好知道 Excel VBA 具有豐富的預建內置函數集合,您可以在編寫代碼時使用這些函數。

這些函數的列表可以在 VBA 編輯器中查看:

  • 打開 Excel 工作簿並啟動 VBA 編輯器(單擊以執行此操作 Alt + F11鍵),然後按 F2.
  • 從屏幕左上角的下拉列表中選擇一個庫 VBA.
  • 將出現一個內置 VBA 類和函數的列表。 單擊函數名稱可在窗口底部顯示其簡要說明。 緊迫 F1 將打開該功能的在線幫助頁面。

此外,可以在 Visual Basic 開發人員中心找到帶有示例的內置 VBA 函數的完整列表。

VBA 中的自定義過程“Function”和“Sub”

在 Excel Visual Basic 中,一組執行特定任務的命令被放置在一個過程中。 功能 (功能)或 (子程序)。 程序的主要區別 功能 и 是那個程序 功能 返回結果,過程 - 不是。

因此,如果您需要執行操作並獲得一些結果(例如,將幾個數字相加),則通常使用過程 功能,並且為了簡單地執行一些操作(例如,更改一組單元格的格式),您需要選擇過程 .

參數

可以使用參數將各種數據傳遞給 VBA 過程。 聲明過程時指定參數列表。 例如,程序 在 VBA 中,將給定的整數 (Integer) 添加到所選範圍內的每個單元格。 您可以使用參數將此數字傳遞給過程,如下所示:

Sub AddToCells(i As Integer) ... End Sub

請記住,對過程有論據 功能 и 在 VBA 中是可選的。 有些過程不需要參數。

可選參數

VBA 過程可以有可選參數。 這些是用戶可以根據需要指定的參數,如果省略,程序將使用它們的默認值。

回到前面的例子,要使函數的整數參數成為可選的,它會這樣聲明:

Sub AddToCells(可選 i As Integer = 0)

在這種情況下,整數參數 i 默認值為 0。

一個過程中可以有多個可選參數,所有這些參數都列在參數列表的末尾。

按值和按引用傳遞參數

VBA 中的參數可以通過兩種方式傳遞給過程:

  • BYVAL – 按值傳遞參數。 這意味著只有值(即參數的副本)被傳遞給過程,因此當過程退出時,對過程內的參數所做的任何更改都將丟失。
  • 為ByRef – 通過引用傳遞參數。 也就是說,參數位置在內存中的實際地址被傳遞給過程。 當程序退出時,對程序內的參數所做的任何更改都將被保存。

使用關鍵字 BYVAL or 為ByRef 在過程聲明中,您可以指定如何將參數傳遞給過程。 這在以下示例中顯示:

Sub AddToCells(ByVal i As Integer) ... End Sub
在這種情況下,整數參數 i 按值傳遞。 離開程序後 全部用 i 更改將丟失。
Sub AddToCells(ByRef i As Integer) ... End Sub
在這種情況下,整數參數 i 通過引用傳遞。 離開程序後 全部用 i 更改將存儲在傳遞給過程的變量中 .

請記住,VBA 中的參數默認通過引用傳遞。 換句話說,如果不使用關鍵字 BYVAL or 為ByRef,則參數將通過引用傳遞。

在進行程序之前 功能 и 更詳細地說,再看看這兩種程序之間的特徵和區別將是有用的。 以下是VBA程序的簡要討論 功能 и 並給出了簡單的例子。

VBA 程序 «功能»

VBA 編輯器識別過程 功能當它遇到一組包含在以下開始和結束語句之間的命令時:

功能...結束功能

如前所述,程序 功能 在 VBA 中(相對於 ) 返回一個值。 以下規則適用於返回值:

  • 返回值的數據類型必須在過程的頭部聲明 功能.
  • 包含返回值的變量必須與過程命名相同 功能. 該變量不需要單獨聲明,因為它始終作為過程的組成部分存在。 功能.

這在以下示例中得到了很好的說明。

VBA 函數示例:對 3 個數字執行數學運算

下面是一個 VBA 過程代碼示例 功能,它接受三個類型的參數 Double (雙精度浮點數)。 結果,該過程返回另一個數字類型 Double等於前兩個參數的總和減去第三個參數:

函數 SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 結束函數

這個非常簡單的 VBA 程序 功能 說明如何通過參數將數據傳遞給過程。 可以看到過程返回的數據類型定義為 Double (話說 作為雙 在參數列表之後)。 這個例子還顯示了程序的結果如何 功能 存儲在與過程名稱同名的變量中。

調用 VBA 過程“函數”

如果上面的簡單程序 功能 插入到 Visual Basic 編輯器中的模塊中,它可以從其他 VBA 過程中調用或在 Excel 工作簿中的工作表上使用。

從另一個過程調用 VBA 過程“函數”

程序 功能 可以從另一個 VBA 過程中調用,只需將該過程分配給一個變量即可。 以下示例顯示了對過程的調用 蘇米納斯,上面已經定義了。

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

從工作表調用 VBA 過程“函數”

VBA 程序 功能 可以像任何其他內置 Excel 函數一樣從 Excel 工作表調用。 因此,前面示例中創建的過程 功能 - 蘇米納斯 可以通過在工作表單元格中輸入以下表達式來調用:

=SumMinus(10, 5, 2)

VBA 程序 «子»

VBA編輯器明白前面有一個程序 當它遇到一組包含在以下開始和結束語句之間的命令時:

子...結束子

VBA 程序“Sub”:示例 1. 選定單元格範圍內的中心對齊和字體大小更改

考慮一個簡單的 VBA 過程的示例 ,其任務是更改所選單元格區域的格式。 單元格居中(垂直和水平),字體大小更改為用戶指定的:

Sub Format_Centered_And_Sized(Optional iFontSize As Integer = 10) Selection.Horizo​​ntalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

這個程序 執行操作但不返回結果。

此示例還使用了可選參數 字體大小. 如果論據 字體大小 未傳遞給程序 ,則其默認值為 10。但是,如果參數 字體大小 傳遞給程序 ,則選定的單元格範圍將設置為用戶指定的字體大小。

VBA 子程序:示例 2:在選定的單元格範圍內居中對齊和粗體字體

以下過程與剛剛討論的過程類似,但這次不是調整大小,而是將粗體字體樣式應用於選定的單元格區域。 這是一個示例過程 ,不帶參數:

Sub Format_Centered_And_Bold() Selection.Horizo​​ntalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

在 Excel VBA 中調用“子”過程

從另一個過程調用 VBA 過程“Sub”

調用 VBA 過程 從另一個 VBA 程序,你需要寫關鍵字 請致電伯明翰華人社區中心(CCC-B), 過程名稱 括號中是過程的參數。 這在下面的示例中顯示:

Sub main() 調用 Format_Centered_And_Sized(20) End Sub

如果程序 格式居中和大小 有多個參數,它們必須用逗號分隔。 像這樣:

Sub main() 調用 Format_Centered_And_Sized(arg1, arg2, ...) End Sub

從工作表中調用 VBA 過程“Sub”

程序 不能直接輸入到 Excel 工作表單元格中,可以通過程序來完成 功能因為程序 不返回值。 不過,手續 ,它們沒有參數並被聲明為 評價 (如下所示)將提供給工作表的用戶。 因此,如果上面討論的簡單程序 插入到 Visual Basic 編輯器中的模塊中,過程 格式居中和粗體 將可在 Excel 工作表中使用,並且該過程 格式居中和大小 – 將不可用,因為它有參數。

這是運行(或執行)過程的簡單方法 ,可從工作表訪問:

  • 媒體推薦 Alt + F8鍵 (按鍵 其他 並在按住它的同時按 鍵 F8).
  • 在出現的宏列表中,選擇要運行的宏。
  • 媒體推薦 (跑)

執行程序 您可以快速輕鬆地為其分配鍵盤快捷鍵。 為了這:

  • 媒體推薦 Alt + F8鍵.
  • 在出現的宏列表中,選擇要為其分配鍵盤快捷鍵的宏。
  • 媒體推薦 參數 (選項)並在出現的對話框中輸入鍵盤快捷鍵。
  • 媒體推薦 OK 並關閉對話框 (宏)。

注意: 為宏分配鍵盤快捷鍵時,請確保它不是 Excel 中的標準(例如, 按Ctrl + C)。 如果您選擇一個已經存在的鍵盤快捷鍵,它將被重新分配給宏,因此,用戶可能會意外啟動宏。

VBA 過程範圍

本教程的第 2 部分討論了變量和常量的範圍以及關鍵字的作用。 評價 и 私人的. 這些關鍵字也可以用於 VBA 過程:

Public Sub AddToCells(i As Integer) ... End Sub
如果過程聲明前面有關鍵字 評價,則該過程將可用於該 VBA 項目中的所有模塊。
Private Sub AddToCells(i As Integer) ... End Sub
如果過程聲明前面有關鍵字 私人的,則此過程將僅適用於當前模塊。 在任何其他模塊或 Excel 工作簿中都不能調用它。

請記住,如果在聲明 VBA 過程之前 功能 or 未插入關鍵字,為過程設置默認屬性 評價 (也就是說,它將在此 VBA 項目中隨處可用)。 這與變量聲明相反,變量聲明默認為 私人的.

提前退出 VBA 程序“Function”和“Sub”

如果您需要終止 VBA 過程的執行 功能 or ,無需等待其自然結束,則為此有運算符 退出功能 и 退出小組. 下面以一個簡單的過程為例說明這些運算符的使用。 功能A 期望收到一個肯定的參數來執行進一步的操作。 如果將非正值傳遞給過程,則無法執行進一步的操作,因此應向用戶顯示錯誤消息並且過程應立即退出:

Function VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Expected a Positive value of sVAT_Rate but Received" & sVAT_Rate 退出函數 End If ... End Function

請注意,在完成程序之前 功能 - 增值稅金額,在代碼中插入了一個內置的 VBA 函數 MSGBOX,向用戶顯示警告彈出窗口。

發表評論