<output id="os3gq"><ruby id="os3gq"></ruby></output>

    1. <mark id="os3gq"></mark>
    2. 過程和函數-楊雪
      Access軟件網QQ交流學習群(群號碼198465573),歡迎您的加入!
      首頁 >技術文章> Access數據庫-模塊/函數/VBA


      過程和函數

      發表時間:2019/8/23 21:26:31 評論(1) 瀏覽(1732)  評論 | 加入收藏 | 復制
         
      摘 要:VBA代碼有兩種組織形式,一種是過程,另一種就是函數。其實過程和函數有很多相同之處,除了使用的關鍵字不同之外,還有不同的是:
      正 文:

      VBA代碼有兩種組織形式,一種是過程,另一種就是函數。其實過程和函數有很多相同之處,除了使用的關鍵字不同之外,還有不同的是:

      • 函數有返回值,過程沒有
      • 函數可以在Access窗體,查詢中像一般的Access函數那樣使用,但過程不可以
      • 過程可以指定給Access窗體中的按鈕或者圖片等對象,但是函數不可以
      • 函數只能在被調用時執行,比如在過程中調用,或者在另一個函數中調用,或者在Access窗體中調用。但不能直接執行,而過程是可以的
      然可以把所有代碼都放在一個過程,或者一個函數里面,但是這樣會使代碼難以維護,特別是非常不便于其他人查看修改。而有時一些重復性的代碼,也應該把它們獨立出去,作為一個子過程或子函數來組織。使用子過程和子函數的目的,就是為了便于組織代碼、便于維護。

      1. 過程 Sub

      過程以Sub開頭,End Sub結束,過程中需要執行的代碼放在中間。格式如下:

      
      
      Sub 過程名()
          ' 需要在過程中執行的代碼
      End Sub

      過程名后面的括號是必須的,過程可以帶參數,就放置在括號里面,稍后會有說明。

      過程示例:

      
      
      Sub test()
          Debug.Print "Hello"
      End Sub

      2. 函數 Function

      與過程類似,函數的格式如下:

      
      
      Function 函數名(參數1, 參數2, ...) As 數據類型
          ' 需要在函數中執行的代碼
          函數名 = 函數執行后的結果
      End Function

      函數名后面的括號是必須的,函數通常都帶有參數,放置在括號里面。函數也可以不帶參數,但這種情況下的函數通常沒什么意義。

      括號后面的 As 數據類型 雖然并不是必須的,但是我強烈建議加上。因為函數通常都需要有返回值,這個數據類型就表示著返回值的數據類型。

      函數體最后通常都帶有一條返回值語句,把函數執行的結果賦值給函數名,就可以在調用這個函數的地方得到這個函數的執行結果。這個返回結果的數據類型應該與函數名后面As的數據類型一致,否則可能會出錯。

      函數示例:

      
      
      Function my_sum(n1 as Integer, n2 as Integer) As Integer
          Dim s As Integer
          s = n1 + n2
          my_sum = s
      End Function

      上例中定義了一個名為my_sum的函數,它接受兩個類型為Integer的參數,并且返回值是Integer類型。在函數內部計算了這兩個參數相加的和,并把這個和作為返回值賦給my_sum??梢酝ㄟ^調用這個函數,并傳遞相應的參數,獲得它的返回值。

      定義函數后,就可以在VBA中的過程,或者其它函數中使用這個函數了。


      3. 過程和函數的調用

      前面說過,過程和函數,都可以是被相互調用的。


      3.1 過程的調用

      格式1:

      Call 過程名

      格式2:

      Call 過程名(參數1, 參數2, ...)

      如果過程不帶參數,那么可以使用第1種格式,過程名后面不需要括號

      如果過程帶有參數,則要按照參數的順序依次把參數寫到過程名后面的括號中。即使用第2種格式。


      3.2 函數的調用

      函數的調用通常會在調用時把其賦值給一個變量,以獲取函數返回值。

      Sub test()
          Dim s As Integer
          s = my_sum(5, 5)
          Debug.Print s
      End Sub
      Function my_sum(n1 As Integer, n2 As Integer) As Integer
          Dim s As Integer
          s = n1 + n2
          my_sum = s
      End Function

      這里應該提出的是,函數應當要有返回值的,因為如果不需要返回值,那就應該直接使用過程而不是函數了。

      4. 參數的使用

      參數和使用對于過程和函數都是一樣的。所以本節的內容對過程和函數都適用。

      參數可分為可選參數和必選參數兩種。必選參數在調用(過程或函數時)必須加上,否則會報錯??蛇x參數則可寫可不寫。默認是必選參數,可選參數在定義時用Optional關鍵字聲明,并且可選參數必須放在參數列表的最后面。


      4.1 必選參數

      必選參數在定義時放置在過程或函數名后面的括號中,格式為:

      參數名 As 參數類型

      如:

      Sub sub_test(s As String)
          Debug.Print s
      End Sub

      在調用時,必須傳入參數:

      Sub test()
          Call sub_test("hello")
      End Sub

      4.2 可選參數

      格式與必選參數類似,只是在參數名前面用Optional聲明參數是可選的。

      Optional 參數名 As 參數類型

      如:

      Sub sub_test(Optional s As String)
          Debug.Print s
      End Sub

      在調用上述過程時,可以不傳入參數,此時則不會輸出任何東西,也不會報錯,因為參數是可選的。如果傳入了參數,則會輸出這個參數。

      可選參數還可以設置默認值,即如果在調用時不顯式傳入這個參數的話,那么就使用定義時所使用的值。如下過程:

      
      
      Sub sub_test(Optional s As String = "Hello, World")
          Debug.Print s
      End Sub

      帶參數調用

      
      
      Sub test()
          Call sub_test("I am a boy")
      End Sub

      輸出:I am a boy

      不帶參數調用

      
      
      Sub test()
          Call sub_test
      End Sub

      輸出:Hello, World


      4.3 同時使用可選參數與必選參數

      此時可選參數必須放在最后

       
      
      Sub sub_test(var As Integer, Optional s As String = "Hello, World")
          Debug.Print var
          Debug.Print s
      End Sub

      只傳入必選參數

      
      
      Sub test()
          Call sub_test(50)
      End Sub

      輸出:

      50

      Hello, World

      同時傳入可選參數與必選參數

      
      
      Sub test()
         Call sub_test(50, "Hi, Meinv")
      End Sub

      輸出:

      50

      Hi, Meinv


      Access軟件網交流QQ群(群號:198465573)
       
       相關文章
      打開和關閉窗體事件順序過程(一)  【久石讓的粉絲  2013/7/16】
      用代碼注釋指定過程或函數的代碼  【葉海峰  2013/11/27】
      項目過程  【麥田  2017/7/2】
      報表的記錄源是存儲過程,應該怎么做?  【楊雪  2018/2/27】
      調用參數存儲過程  【螢火蟲  2018/6/27】
      “子過程或函數未定義”解決方案詳解  【張志  2019/6/6】
       
       訪客評論
      2019/8/24丁先生
      好文!清晰易懂,頂!

      總記錄:1篇  頁次:1/1 9 1 :
       
       發表評論
      評論內容 (必填)

      常見問答
      技術分類
      相關資源
      文章搜索
      關于作者

      楊雪

      文章分類

      文章存檔

      友情鏈接
       
         
      湖北11选5