返回列表 上一主題 發帖

[發問] ByVal Target As Range 用法

[發問] ByVal Target As Range 用法

各位師兄,師姐,

我是EXCEL VBA的初學者,而我亦都有買書黎自學,但有TERM "VBA ByVal Target As Range" 我上網,睇書都不是好明白這句語法的意思,

請求各位指點

謝謝

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

ByRef and ByVal Parameters

TOP

byval object =byref object = object的本尊
byval 變數a = 變數a的分身
byref 變數a = 變數a的本尊

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

回復 4# c_c_lai
謝謝分享!!

TOP

回復 4# c_c_lai
jackyq 師兄,謝謝你有用的資料
cc lai 謝謝你仔細提供的sample, 但因為我都比較蠢,我想問多少少,byref 我都大約知道佢既用法,佢係會改變原有數值的值,

但是byval 佢係法係唔會改變個變本身原有既數值,咁要設定byval 有什麼作用呢??

謝謝

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

byval 用來保護本尊的
如果本尊資料很重要
不允許被人竄改 ( read  only )
就可以派分身出去拋頭露臉
萬一分身在外地被他人霸凌
甚至被殺死
甚至還死的很慘
本尊依然會完好無缺

TOP

本帖最後由 mdr0465 於 2016-1-28 18:08 編輯

cc lai師兄,
真的謝謝你耐心的解釋,我亦都有上網再了解byval 語法
以我所理解,byval 是不會影響程式中有既數值,
如果我無理由錯誤的話,
咁test2 的
txt = "非常好!伯父身體好麼?"
    num = num - 85
是不會出現的,但是用byval是沒有影響原有的數值變更的情況下為什麼我們還要寫
txt = "非常好!伯父身體好麼?"
    num = num - 85

而不寫其他的字句呢??

不好意思,我腦筋真的很笨,所以想請教各位解答多少少問題.....
謝謝

TOP

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

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

TOP

        靜思自在 : 自己害自己,莫過於亂發脾氣。
返回列表 上一主題