【问题标题】:How to set range to variable?如何将范围设置为变量?
【发布时间】:2013-09-01 22:30:39
【问题描述】:

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

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 调暗为范围,但不起作用。

可能是什么问题?

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

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

【问题讨论】:

  • 您应该尊重对上一个问题的回答,将其标记为正确并提出一个新问题。 Offset 是一个 Range 方法。删除.Value,一切都会正常运行。
  • 好的,抱歉。不确定我是否应该开始一个新问题。下次会做!

标签: vba function excel


【解决方案1】:

您的代码有几个问题。

我建议您开始了解Set 的用途和时间。

Difference between Dim and Set   - Doug Glancy提供

另外,请查看what datatypes to chose 了解您的变量以及原因。查看它们的限制和使用示例。

找出how to work with Ranges。何时使用 .Value 何时不使用。当您将变量指向单个单元格时以及何时指向多个单元格时。

通过 Range 集合了解 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】:

    Set rng = 中不需要“设置”;删除它。

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

    【讨论】:

    • 哇,这很简单。谢谢!为了将来参考,什么时候需要设置?
    • 您在分配对 object 的引用时使用 Set。例如:Dim c as Range : Set c = Range("A1")。在您的代码中,您将 rng 分配给 value.
    • 您可以在网上找到更多信息。这是一个开始:stackoverflow.com/questions/3872339/….
    【解决方案3】:

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

    If CStr(Rng) = Ax Then
    

    【讨论】:

      猜你喜欢
      • 2022-12-01
      • 2021-12-19
      • 1970-01-01
      • 2016-04-30
      • 2013-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多