Мне не нравится этот бит, но если вы не можете изменить функцию, которая требует диапазона, вы можете создать функцию, которая преобразует строку в диапазон. Вы хотите быть уверены, что единственная вещь, о которой заботится первая функция, это свойства Value или Text.
Function FuncThatTakesRange(rng As Range)
FuncThatTakesRange = rng.Value
End Function
Function ConvertStringToRange(sInput As String) As Range
Dim ws As Worksheet
Set ws = Workbooks.Add.Sheets(1)
ws.Range("A1").Value = sInput
Set ConvertStringToRange = ws.Range("A1")
Application.OnTime Now + TimeSerial(0, 0, 1), "'CloseWB """ & ws.Parent.Name & """'"
End Function
Sub CloseWb(sWb As String)
On Error Resume Next
Workbooks(sWb).Close False
End Sub
Используйте в «Немедленном окне», как
?functhattakesrange(convertstringtorange("Myvalue"))