返回列表 上一主題 發帖

[發問] ByVal Target As Range 用法

Sub 執行我()
  '用 ByRef 發生 本尊信息 被 鄰居2 竄改事件
  '導致 鄰居3, 鄰居4 收到錯誤信息
  '改成 ByVal 就可以避開被 鄰居2 竄改
  
   msg = "我是陳小美, 星期日晚上6:00 歡迎來我家聚餐"
   發信息給鄰居1 msg
   發信息給鄰居2 msg
   發信息給鄰居3 msg
   發信息給鄰居4 msg
End Sub


Sub 發信息給鄰居1(ByRef msg)
    MsgBox "鄰居 1 收到信息: " + msg
End Sub
Sub 發信息給鄰居2(ByRef msg)
    MsgBox "鄰居 2 收到信息: " + msg
   
    msg = "我是陳小美, 星期日晚上聚餐因為有事緊急取消"            '鄰居2 惡搞信息
End Sub
Sub 發信息給鄰居3(ByRef msg)
    MsgBox "鄰居 3 收到信息: " + msg
End Sub
Sub 發信息給鄰居4(ByRef msg)
    MsgBox "鄰居 4 收到信息: " + msg
End Sub

TOP

cc lai 大大, jackyq  大大

而家我真的明白byval的用法,真的多謝你們不厭其煩幫忙解釋和提供列子給我參考
萬分感謝你們的幫忙....
謝謝

TOP

回復 12# mdr0465


補充
1. 沒宣告時為 ByRef
2. 用()括住引數時,強迫傳值。

Sub 主程式()
    Dim A%, B%, C%
    Debug.Print
        
    A = 123: B = 456: C = 789
    Debug.Print "主程式", A, B, C
   
    Call 副程式((A), (B), C) '(A)、(B)強迫傳值
    Debug.Print "副程式 - 1", A, B, C
   
    Call 副程式(A, B, C)
    Debug.Print "副程式 - 2", A, B, C
End Sub

Sub 副程式(X%, ByRef Y%, ByVal Z%) '沒有宣告時內定為ByRef
    X = 321: Y = 654: Z = 987
End Sub

'Debug.Print
'主程式         123           456           789
'副程式 - 1     123           456           789
'副程式 - 2     321           654           789
{...} 表示需要用 CTRL+SHIFT+ENTER 三鍵輸入公式

TOP

about byval  2,3.....
(2) 自轉型態
(3)  至於物件
       物件不需要分身 (  物件自己會處理  )
       物件也不適合有分身 (  效能折扣  )
so  byval object 編譯器傳的還是本尊

TOP

真的萬分多謝ML089版主,JACKQ 大大,不厭其煩對愚蠢的小弟給予詳細的解釋...
我現在更加明白到byval 的語法用途,
謝謝兩位.......

TOP

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