0

我正在尝试使用辅助函数来获取将其存储到变体中的范围,但我遇到了一些问题。

起初,我只是简单地尝试了以下方法:

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

当我调用它时,如何获得我想要的范围?

4

2 回答 2

1

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

于 2013-10-09T20:21:21.710 回答
1

尝试:

GetRange = Range(RangeLetter + "2:" + RangeLetter + LastUniqueLineStr).Value

您错过了RangeLetter导致地址格式错误的 a。此外,使用该.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
于 2013-10-09T20:18:01.760 回答