我们的项目中有一些代码看起来像这样:
Private Sub Method1()
Call InnerMethod
End Sub
Private Sub Method2()
InnerMethod
End Sub
Private Sub InnerMethod()
'' stuff
End Sub
Run Code Online (Sandbox Code Playgroud)
Method2优于Method2的优势是什么?
我正在努力理解按值传递并在VB6中通过引用传递.我完全理解这些概念是面向对象的编程语言,如.NET和Java(我意识到Java没有通过引用传递).看看下面的代码:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox (Test)
End Sub
Private Sub TestFunction(ByVal i As Integer)
i = i + 1
End Sub
Run Code Online (Sandbox Code Playgroud)
当我在第5行的Test周围放置括号时,消息框会按照我的预期打印1.现在看看下面的代码:
Private Sub Form_Load()
Dim Test As Integer
Test = 1
TestFunction Test 'line 5
MsgBox Test
End Sub
Private Sub TestFunction(ByRef i As Integer)
i = i + 1
End Sub
Run Code Online (Sandbox Code Playgroud)
消息框按照我的预期打印2.但是,如果在第5行添加括号,则消息框将打印1,这是我不希望的.即使被调用函数中定义的变量是ByRef,看起来调用函数也可以通过值传递.反之亦然,即如果被调用函数具有定义为ByVal的变量的签名,则它将始终为ByVal(即使调用函数中的变量周围没有括号).在VB6中,这背后的想法是什么?我意识到这是VB6中的一个基本问题,但它让我很困惑.我已经阅读了MSDN文档,我意识到这一切都是正确的,但它并没有解释它背后的原因.
如图所示,test1来电FillEmptyWith却给了我一个
编译错误:=预期
有人可以帮忙吗?
Sub FillEmptyWith(Range, val)
For Each cell In Range
If IsEmpty(cell) Then
cell.Value = val
End If
Next cell
End Sub
Run Code Online (Sandbox Code Playgroud)
Sub test1()
FillEmptyWith ((Sheets("In Force Earnix").Range("S10:S20")),"N")
End Sub
Run Code Online (Sandbox Code Playgroud)