从函数返回范围

时间:2014-04-30 01:08:15

标签: excel vba excel-vba

我试图让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()行。

1 个答案:

答案 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

这样,您主要使用该函数来获取返回值,而不是对对象执行操作。但这主要是一个偏好问题。