2
我遇到以下代码有问题。在逐步完成它时,使用不带参数括号的子名称和使用带括号的Call都具有相同的行为。同样,删除ByRef也没有区别。如何将函数的结果传递给子调用?
Vba进入SetRange,将返回值设置为Range并结束,但是接下来的步骤不会输入ColumnToUpper。也就是说,当它碰到ColumnToUpper的调用块时,它只是多次进入SetRange,但从不进入任何ColumnToUpper Subs。
'Beginning of main Sub
ColumnToUpper SetRange(data, "Last Name")
Call ColumnToUpper(SetRange(data, "First Name"))
'more calls
End Sub
Sub ColumnToUpper(ByRef rng As Range)
For i = 1 To rng.Count
rng(i) = UCase(rng(i))
Next i
End Sub
Function SetRange(tbl As ListObject, hdr As String) As Range
SetRange = Range(tbl.Name + "[" + hdr + "]")
End Function
当然,我可以设置一个范围变量,并将其设置每次调用其他功能之间,但我宁愿一个更优雅的方式。请注意,我不只是将大量已知列设置为较高(因为我可以使用一个大范围),但是我缩小了它的范围,使其易于消化,并且仍然是失败的示例!
为什么你需要使用'&'而不是'+'来连接?根据我的经验,它们可以互换使用。 – GibralterTop
这与总是将父对象声明为任何Range对象相同。这是很好的做法。如果你想连接使用'&',如果你想总结使用'+'这样的方式,当用户把数字放在两个单元格中,并且你想连接这些单元格而不是添加时,你不会混淆它们。当用户做出愚蠢的事情时,它会为你节省头痛。 –
啊,我明白了。感谢您的澄清,只要确保没有任何性能考虑因素,我可能会错过良好的'$'。 – GibralterTop