【问题标题】:Assign an incoherent range to a variable为变量分配不连贯的范围
【发布时间】:2022-01-20 10:02:28
【问题描述】:

我试图将一个不连贯的范围分配给一个变量,但我似乎无法做到正确。谁能帮帮我?

我的代码如下所示:

    Dim tstRange As Range
    Dim strRange As String
    Select Case strSite
        Case "Lerum/Aspedalen"
            strRange = "B" & iLastRow & ", H" & iLastRow & ":L" & iLastRow
            With Kurtans_favorit
                Set tstRange = .Range(strRange)
                Set tstRange = .Range("B" & iLastRow, "H" & iLastRow & ":L" & iLastRow)
            End With

将范围分配给tstRange 的第一种方法和第二种方法都不起作用(嗯,实际上第一种方法可以,但它只是给了我范围内第一个单元格的内容,这不是我的意图) .

我打算使用这个范围来检查它们是否包含任何值。如果他们这样做,用户将收到一个问题,是否覆盖或取消他/她正在执行的操作。

【问题讨论】:

  • 您的第一个是正确的,所以我认为您尝试使用实际上是问题的范围。
  • 嗨,你能澄清一下吗?我不明白你的评论。
  • 您说第一个有效“但它只给了我范围内第一个单元格的内容”。事实并非如此,所以我认为您正在检查问题的值。如果您检查tstRange.Cells.Count,结果是否正确 - 即 5?
  • 实际上它给了我6的结果,这是正确的。第二个给我 11,有点令人困惑。
  • 替代方案是Set tstRange = .Range("B1,H1:L1").Offset(iLastRow-1)

标签: excel vba range


【解决方案1】:

看看这个例子:

Option Explicit

Private Sub OlaJohnson()

    PrintAllRangeMembers RangeString:="A1,C1:E1"

End Sub

Private Sub PrintAllRangeMembers(RangeString As String)

    ' Purpose:
    ' Iterate through all members of a range and print them to the Immediate window

    Dim IncoRange As Range
    Set IncoRange = ThisWorkbook.Sheets("Sheet1").Range(RangeString)
    
    Dim Cell As Variant
    For Each Cell In IncoRange
        Debug.Print Cell
    Next Cell

End Sub

Sub PrintAllRangeMembersRange(是否一致)作为参数,通过For Each 循环遍历所有成员,并将值打印到立即窗口。

您可以在For Each 循环中执行您需要进行的任何检查。打印单元格的值只是为了证明预期的行为结果。

【讨论】:

    猜你喜欢
    • 2013-04-16
    • 2023-03-03
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多