[英]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
的用途和时间。
另外,请检查为变量选择哪种数据类型以及原因。 查看其局限性和用法示例。
了解如何使用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.