Excel VBA:为什么可以';我不能从传入函数的工作表中获取范围吗?
我试图使用一个helper函数来获取一个范围,以便将其存储到一个变量中,但我遇到了一些问题 起初,我只是简单地尝试了以下几点: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
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
,这似乎很好。