Mal*_*red 5 excel vba excel-vba
我试图尝试JaredPar ByRef和ByVal Clarification所回答的问题
ByVal
在VB.NET中意味着将提供的值的副本发送到该函数.对于值类型(Integer
,Single
等),这将提供值的浅表副本.对于较大的类型,这可能是低效的.对于引用类型(String
,类实例),传递引用的副本.因为副本通过突变传递给参数,=
所以调用函数不会看到它.
ByRef
在VB.NET中意味着对原始值的引用将被发送到函数(1).它几乎就像在函数中直接使用原始值.类似的操作=
会影响原始值并在调用函数中立即可见.
我试着用以下代码测试它,我似乎无法让它工作使用ByRef
更改单元格的值,0
如果它是1
这是我正在测试的下面的代码,我做错了什么?价值Range("A1")
仍然是1
Sub test1()
Dim trythis As Boolean
trythis = False
If (Sheets("TESTING").Range("A1").value = 1) Then
testingRoutine (trythis)
If (trythis) Then
Debug.Print "Value changed to 0"
Sheets("TESTING").Range("A1").value = 0
End If
End If
End Sub
Private Function testingRoutine(ByRef trythis As Boolean)
Debug.Print "Ran Function"
trythis = True
End Function
Run Code Online (Sandbox Code Playgroud)
VB子例程不需要在参数列表周围使用大括号.但是,如果您传递一个参数并将其括在大括号中,则表示您正在传递一个表达式.表达式不能通过引用传递.因此,您必须删除调用中的大括号testingRoutine (trythis)
并写入testingRoutine trythis
注意:如果在不使用其返回值的情况下调用函数,则必须将其写为过程调用(参数列表周围没有大括号).