繁体   English   中英

如何设置范围为变量?

[英]How to set range to variable?

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

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设为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

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

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

您的代码有几个问题。

我建议您开始学习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

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

If CStr(Rng) = Ax Then

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM