Excel 如何将函数的结果传递给子调用?
我有以下代码的问题。单步执行时,使用不带参数括号的子名称和使用带括号的调用具有相同的行为。同样,删除ByRef也没有什么区别 Vba进入SetRange,将返回设置为一个范围,然后结束,但下一步不是进入ColumntUpper。也就是说,当它遇到对ColumntUpper的调用块时,它只会多次进入SetRange,但从未进入任何ColumntUpper子类Excel 如何将函数的结果传递给子调用?,excel,vba,Excel,Vba,我有以下代码的问题。单步执行时,使用不带参数括号的子名称和使用带括号的调用具有相同的行为。同样,删除ByRef也没有什么区别 Vba进入SetRange,将返回设置为一个范围,然后结束,但下一步不是进入ColumntUpper。也就是说,当它遇到对ColumntUpper的调用块时,它只会多次进入SetRange,但从未进入任何ColumntUpper子类 'Beginning of main Sub ColumnToUpper SetRange(data, "Last Name")
'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
当然,我可以设置一个范围变量,并在对另一个函数的每次调用之间设置它,但我更喜欢一个更优雅的方法。注意,我不仅仅是将一大块已知列设置为上限(因为我可以使用一个较大的范围),而是将其缩小到这个易于理解但仍然失败的示例
&
用于连接,而不是+
设置设置范围…
因此:
您没有在
集合
问题上得到错误,这意味着您的错误处理能力较差。很可能是代码中的某个地方出现了“下一步继续执行错误时的”
,它绕过了错误而不返回任何内容。为什么需要使用&
而不是+
进行连接?根据我的经验,它们可以互换地工作,这与总是向任何范围对象声明父对象是一样的。这是很好的做法。如果您想串联使用&
如果您想求和,请使用+
,这样当用户在两个单元格中输入数字,而您想串联这些单元格而不是相加时,您就不会把它们混在一起。当用户做愚蠢的事情时,它会让你省去头疼。啊,我明白了。感谢您的澄清,只是要确保没有任何性能方面的考虑,我可能已经错过了好的ol'$
。明白了。两者都忘记使用Set,并且假定错误只应用于下一行@不幸的是,它一直有效,直到您在错误转到0时用停止它
Function SetRange(tbl As ListObject, hdr As String) As Range
Set SetRange = tbl.Parent.Range(tbl.Name & "[" & hdr & "]")
End Function