Excel 如何将函数的结果传递给子调用?

Excel 如何将函数的结果传递给子调用?,excel,vba,Excel,Vba,我有以下代码的问题。单步执行时,使用不带参数括号的子名称和使用带括号的调用具有相同的行为。同样,删除ByRef也没有什么区别 Vba进入SetRange,将返回设置为一个范围,然后结束,但下一步不是进入ColumntUpper。也就是说,当它遇到对ColumntUpper的调用块时,它只会多次进入SetRange,但从未进入任何ColumntUpper子类 'Beginning of main Sub ColumnToUpper SetRange(data, "Last Name")

我有以下代码的问题。单步执行时,使用不带参数括号的子名称和使用带括号的调用具有相同的行为。同样,删除ByRef也没有什么区别

Vba进入SetRange,将返回设置为一个范围,然后结束,但下一步不是进入ColumntUpper。也就是说,当它遇到对ColumntUpper的调用块时,它只会多次进入SetRange,但从未进入任何ColumntUpper子类

'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