我试图让VBA中的sub调用另一个函数,该函数返回一个范围并设置为一个变量。我尝试运行GetInputs()方法时出现语法错误。
Function GetDataRange(str As String) As Range
' This prompts the user to select a range of data, we will need to call this once for inputs and once for outputs
Dim rRange As Range
On Error Resume Next
Application.DisplayAlerts = False
Set rRange = Application.InputBox(Prompt:= _
str, _
Title:="SPECIFY RANGE", Type:=8)
On Error GoTo 0
Application.DisplayAlerts = True
If rRange Is Nothing Then
Exit Function
Else
rRange.Font.Bold = True
End If
GetDataRange = rRange
End Function
Sub GetInputs()
Dim rg As Range
Set rg = GetDataRange("Select Inputs:")
End Sub
编辑:我添加了以下代码:
Sub Test()
End Sub
当我尝试运行它时,我得到相同的语法错误,并突出显示Sub Test()行。
答案 0 :(得分:4)
乍一看,您在范围分配声明中缺少Set
关键字:
GetDataRange = rRange
相反,它应该是:
Set GetDataRange = rRange
已更新我已运行代码,这是我观察到的唯一错误。这应该解决它。
就个人而言,我会避免在你的函数体内执行此操作:
rRange.Font.Bold = True
而是把它放在你的调用程序中:
Sub GetInputs()
Dim rg as Range
Set rg = GetDataRange("Select Inputs:")
If Not rg Is Nothing Then rg.Font.Bold = True
End If
这样,您主要使用该函数来获取返回值,而不是对对象执行操作。但这主要是一个偏好问题。