1

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

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。

我也尝试将 rng As Range 调暗,但不起作用。

可能是什么问题?

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

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
4

3 回答 3

3

中不需要“设置” Set rng =;去掉它。

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

于 2013-08-29T13:08:56.033 回答
3

您的代码有几个问题。

我建议您开始学习Set用途和时间。

DimSet    -之间的区别Doug Glancy提供

此外,请查看为变量选择的数据类型以及原因。查看它们的限制和使用示例。

了解如何使用 Ranges。何时使用 .Value 何时不使用。当您将变量指向单个单元格时以及何时指向多个单元格时。

了解如何循环Range 集合。

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

之后,您将能够编写自己的:

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
于 2013-08-29T14:25:48.403 回答
0

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

If CStr(Rng) = Ax Then
于 2013-08-29T13:12:36.763 回答