我正在尝试将范围从另一个工作表保存到变量,然后将其与单元格进行比较。 我有这段代码:
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
答案 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