如何将范围设置为变量?

时间:2013-08-29 13:03:23

标签: excel vba function excel-vba

我正在尝试将范围从另一个工作表保存到变量,然后将其与单元格进行比较。 我有这段代码:

Function collectUtfall(A1 As String, Ax As String)
Dim rng As Variant
Dim sum as Integer

sum = 0

Set rng = Sheets("Utfall").Range("N2").Value <------- This line

If rng = Ax Then
        sum = sum + 10
        Else: sum = 33

End If

collectUtfall = sum
End Function

问题在于它不按我希望的方式行事。我得到#Value错误,我已将其缩小到代码中标记的行。如果我删除该行,我没有得到错误,但当然结果只有0。

我也尝试过暗淡作为范围也行不通。

可能是什么问题?

编辑:原始问题已解决,但遇到了另一个问题。 如果我插入使用此代码(小的更改)我再次得到相同的错误。我使用偏移错误或现在问题在哪里?

Function collectUtfall(A1 As String, Ax As String)
Dim rng As Variant
Dim sum As Integer

sum = 0

rng = Sheets("Utfall").Range("M2:O272").Value

If rng.Offset(0, 1) = Ax Then
    sum = sum + 10
    Else: sum = 33

End If


collectUtfall = sum
End Function

3 个答案:

答案 0 :(得分:3)

Set rng =中不需要“设置”;删除它。

rng = Sheets("sheet1").Range("N2").Value

答案 1 :(得分:3)

您的代码存在一些问题。

我建议你开始学习Set使用的内容和时间。

Difference between Dim and Set - Doug Glancy

提供

另外,请查看what datatypes to chose了解您的变量及其原因。查看它们的局限性和使用示例。

找出how to work with Ranges。何时使用.Value,何时不使用。将变量指向单个单元格以及何时指向多个单元格时。

了解范围集合中的how to loop

阅读一些关于代码缩进的内容。

之后你就可以自己写了:

Function collectUtfall(A1 As String, Ax As String)

    Dim rng As Range
    Dim sum As Long: sum = 0

    Set rng = Sheets("Utfall").Range("M2:O272")

    Dim cell As Range
    For Each cell In rng
        If StrComp(cell.Offset(0, 1).Text, Ax, vbTextCompare) = 0 Then
            sum = sum + 10
        Else
            sum = 33
        End If
    Next

    collectUtfall = sum
End Function

答案 2 :(得分:0)

您可能存在冲突的数据类型。如果Ax是类型字符串,您应该将字符串与它进行比较。您可以将rng定义为字符串(dim rng as string),或者执行cstr:

If CStr(Rng) = Ax Then