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