Excel VBA:为什么可以';我不能从传入函数的工作表中获取范围吗?

Excel VBA:为什么可以';我不能从传入函数的工作表中获取范围吗?,excel,excel-2010,vba,Excel,Excel 2010,Vba,我试图使用一个helper函数来获取一个范围,以便将其存储到一个变量中,但我遇到了一些问题 起初,我只是简单地尝试了以下几点: Function GetRange(RangeLetter As String, Optional LastUniqueLine As Long = 1048576) As Varient Static LastUniqueLineStr As String If LastUniqueLineStr = "" Then LastUniqu

我试图使用一个helper函数来获取一个范围,以便将其存储到一个变量中,但我遇到了一些问题

起初,我只是简单地尝试了以下几点:

Function GetRange(RangeLetter As String, Optional LastUniqueLine As Long = 1048576) As Varient
    Static LastUniqueLineStr As String
    If LastUniqueLineStr = "" Then
        LastUniqueLineStr = LastUniqueLine
    End If
    Set GetRange = Range(RangeLetter + "2:" + LastUniqueLineStr)
End Function
但这似乎不起作用
Range()
似乎超出了此处的范围或其他内容,因此我想我必须传入工作表才能使其正常工作:

Function GetRange(RangeLetter As String, Optional LastUniqueLine As Long = 1048576, Optional ActiveSheet As Worksheet) As Variant
    Static LastUniqueLineStr As String
    Static CurrentSheet As Worksheet
    'If CurrentSheet = Nothing Then
    Set CurrentSheet = ActiveSheet
    'End If
    If LastUniqueLineStr = "" Then
        LastUniqueLineStr = LastUniqueLine
    End If
    Set GetRange = CurrentSheet.Range(RangeLetter + "2:" + LastUniqueLineStr) ' This is the line where I get the error.
End Function
这也不起作用。我得到以下错误:

Run-time error '1004':

Method 'Range' of object 'Worksheet' failed
当我调用它时,如何从中获得所需的范围?

尝试:

GetRange = Range(RangeLetter + "2:" + RangeLetter + LastUniqueLineStr).Value
您缺少一个
RangeLetter
,导致地址格式错误。另外,使用
.Value
属性返回变量/数组,并省略
Set
关键字

当限定为
CurrentSheet.Range…
时,我继续得到错误。函数上下文中没有
ActiveSheet
,因此您可以将工作表作为变量传递:

Sub Test()
Dim var As Variant
var = GetRange(ActiveSheet, "A")
End Sub

Function GetRange(sh As Worksheet, RangeLetter As String, Optional LastUniqueLine As Long = 1048576, Optional ActiveSheet As Worksheet) As Variant
    Static LastUniqueLineStr As String
    Dim myRange As Range

    If LastUniqueLineStr = "" Then
        LastUniqueLineStr = LastUniqueLine
    End If

    Set myRange = sh.Range(RangeLetter + "2:" + RangeLetter + LastUniqueLineStr)

    GetRange = myRange.Value ' This is the line where I get the error.
End Function

在我看来,错误出现在设置“GetRange”变量的行中。看起来.Range(RangeLetter+“2:+Last…”的结果将创建一个地址为“a2:#”的范围,该地址将失败。该格式的范围需要是“a2:e7”或类似的。您的范围参考必须是对称的。“RC:RC”、“R:R”或“C:C”。希望能有所帮助。

你解决了我的问题!谢谢至于第二部分,我试图传入当前活动的工作表,并将其设置为静态变量,以便以后不必再次传入,但我在使其正常工作方面遇到了问题,因为静态声明最初似乎没有将其设置为
Nothing
,尽管我刚刚发现,如果CurrentSheet为Nothing,我可以使用
测试
Nothing
,这似乎很好。