返回列表 上一主題 發帖

[發問] ByVal Target As Range 用法

回復 1# mdr0465
多多上網查詢,你便會更加明瞭外面的世界了。
以 ByVal 和 ByRef 傳遞引數

ByRef and ByVal Parameters

TOP

本帖最後由 c_c_lai 於 2016-1-28 16:07 編輯

回復 1# mdr0465
舉個實例說明,你便會明瞭:
  1. Sub joke()
  2.     Dim txt As String, num As Integer
  3.    
  4.     txt = "你好嗎?": num = 200
  5.     Test1 txt, num    '  傳址  (即 jackyq 大大分享的 "本尊")
  6.     MsgBox "txt = " & txt & " , num = " & num
  7.     '  答案是: txt = 很好,謝謝! 大家可好? , num = 150
  8.    
  9.     txt = "早餐吃了嗎?": num = 100
  10.     Test2 txt, num     '  傳值  (即 jackyq 大大分享的 "分身")
  11.     MsgBox "txt = " & txt & " , num = " & num
  12.     '  答案是: txt = 早餐吃了嗎? , num = 100
  13. End Sub

  14. Sub Test1(ByRef txt As String, ByRef num As Integer)   '  傳址 (位址 Address)
  15.     txt = "很好,謝謝! 大家可好?"                      '   (Reference)
  16.     num = num - 50
  17. End Sub

  18. Sub Test2(ByVal txt As String, ByVal num As Integer)   '  傳值  (數值 Value)
  19.     txt = "非常好!伯父身體好麼?"
  20.     num = num - 85
  21. End Sub
複製代碼

TOP

回復 6# mdr0465
  1. Sub Test2(ByVal txt As String, ByVal num As Integer)   '  傳值  (數值 Value)
  2.     txt = "非常好!伯父身體好麼?"
  3.     num = num - 85
  4. End Sub
複製代碼
一般實務上除非須同步更新變數值 (ByRef),否則都是宣告成傳入值 (ByVal):
以上範例即等於平常習慣使用的:
  1. Sub Test2(txt As String, num As Integer)   '  傳值  (數值 Value)
  2.     txt = "非常好!伯父身體好麼?"
  3.     num = num - 85
  4. End Sub
複製代碼
如此說明,明白否?

TOP

本帖最後由 c_c_lai 於 2016-1-28 18:39 編輯

回復 9# mdr0465
在函式裡引入參數如為傳值,則無論該參數在該
函式裡如何變化都不會改變該參數傳入時的引入初始值,
該範例內之舉例,只是告訴你,txt 或 num 在函式裡不管
它怎麼異動都不會改變傳入當時的初始值 (原值)。
如果用白話說的話,就如 jackyq  大大說的。

TOP

        靜思自在 : 盡多少本份,就得多少本事。
返回列表 上一主題