在我的函数中发送strCont
变量来填充文档,然后我测试该变量而不是具有与发送之前相同的内容(在这种情况下是空字符串)它现在具有的值Cont
变量接受了函数("_ _ _ _ _ _ _ _ _ _"
)。
strCont
会在Cont
的确切时刻更改值,这意味着它不是关于Return,而是两个变量以某种方式链接在一起。
为什么这两个变量相关联?我所知道的关于功能的一切都告诉我它应该不那样工作。
提前致谢
以下是代码:
Private Sub btnPrint_Click()
Dim strClient2 As String, strTag As String, strCont As String
'...
strCont = strClient2
strTag = "client2"
Call Filling(strCont, strTag)
If strCont = "" Then Call Filling("", "and2")
'...
End Sub
功能
Function Filling(Cont As String, whatev As String)
'other ifs...
If Cont = "" Then Cont = "_ _ _ _ _ _ _ _ _ _"
'fills doc...
End Function
当然,问题可以(并且在我的程序中)通过在参数中传递变量的副本来避免,但这种情况并不是它应该如何,而我只是“不要”。明白为什么。
答案 0 :(得分:3)
虽然我们认为字符串是“简单的”,但它们实际上并非“在幕后”。实际上,它们是“引用类型” - 您已将字符串的两个“指针”设置为内存中的相同地址,使它们完全等效。 (数字不会发生这种情况。)字符串隐式传递“ByRef”,这意味着它们可以在其他过程中更改。
更改函数以明确获取字符串ByVal
。这样,进入函数的内容只会在函数中更改。
Sub btnPrint_Click()
Dim strClient2 As String, strTag As String, strCont As String
'...
strCont = strClient2
strTag = "client2"
Call Filling(strCont, strTag)
If strCont = "" Then Call Filling("", "and2")
'...
End Sub
Function Filling(ByVal Cont As String, ByVal whatev As String)
'other ifs...
If Cont = "" Then Cont = "_ _ _ _ _ _ _ _ _ _"
'fills doc...
End Function
有用的链接: