【问题标题】:Returning a Range from a Function从函数返回范围
【发布时间】:2014-04-30 16:15:00
【问题描述】:

我试图让 VBA 中的子调用另一个函数,该函数返回一个范围并设置为一个变量。尝试运行 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() 行。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    乍一看,您在范围赋值语句中缺少 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
    

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

    【讨论】:

    • 好吧,我想我的问题是别的。我重新添加了 Set 语句,我得到了同样的错误。事实上,我添加了一个名为 Test() 的空 Sub 并尝试运行它,但仍然得到相同的语法错误。
    • 如果您遇到语法错误,则 VBE 应该突出显示导致错误的行。请更新您的原始问题以包含您当前使用的代码:)
    • 或者指出哪一行引发了错误。我或许能帮上忙。
    • 我编辑了我的帖子,突出显示了 Sub Test() 行
    • 好的,我只是将页面顶部的3个功能剪切到底部,现在它正在工作......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 2019-11-11
    • 2013-10-15
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    相关资源
    最近更新 更多