如何设置范围到variables?

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

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。

我试图把范围也变暗,不起作用。

可能是什么问题?

编辑:原来的问题解决了,但遇到另一个。 如果我insted使用这个代码(小的变化)我再次得到相同的错误。 我是否使用偏移量错误或现在的问题在哪里?

 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 

你的代码有几个问题。

我build议你开始学习Set和什么时候使用。

Dim灰色 之间的区别 – 由Doug Glancy提供

另外,请检查为variablesselect了哪些数据types以及为什么。 查看他们的限制和使用示例。

了解如何使用范围 。 何时使用.Value和什么时候没有。 将variables指向单个单元格以及何时指向多个单元格时。

了解如何遍历 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 

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

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

你可能有冲突的数据types。 如果Ax是stringtypes,你应该比较一个string。 你可以把rng定义为string(dim rng as string),或者做cstr:

 If CStr(Rng) = Ax Then