将范围定义为对象,但希望将其作为范围

时间:2018-03-15 11:46:42

标签: excel vba excel-vba

我对VBA的了解很少,所以它可能(我希望)是一个简单的问题。

我希望我的代码能够查看范围,然后根据范围内单元格的值来突出显示相邻单元格。在我发布的代码中问题减少了,因为我只查看3个单元格的范围。实际上,我看到的单元格数量大于500(所以简单地使用没有循环的If语句会很繁琐)。

为了做到这一点,我使用了一个循环并创建了一个字典,以便最终得到rangeArea(1),rangeArea(2)等... 我想虽然因为我的rangeArea(i)被定义为一个对象,我不能让它选择一个范围,因此与Set multipleRange = Union不兼容(我最终得到了所需的消息对象。但是如果我改变了rangeArea到一个范围,然后表示类型不匹配。

我想要它做的是,一旦找到包含我想要的值的所有单元格,它应该选择所有相邻单元格作为一个实体(这就是为什么我使用Set multipleRange = Union()

Sub Macro()

Dim i As Integer
Dim rangeArea As Object
Dim multipleRange As Range
Dim a As String
Set rangeArea = CreateObject("Scripting.Dictionary")

i = 1
Do Until i = 4
    If Cells(i, 1) = True Then
    Cells(i, 1).Select
    ActiveCell.Offset(0, 1).Range("A1:B1").Select
    Set rangeArea(i) = Selection
    Else
    End If
    i = i + 1
    Loop

    Set multipleRange = Union(rangeArea(1), rangeArea(2))

End Sub  

我想我几乎就在那里,所以任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

这对你有用吗?不要以为你需要一本词典,虽然我不清楚你想要实现什么。您可以使用union构建范围,并在必要时循环遍历这些区域。

Sub Macro()

Dim i As Long
Dim rangeArea As Range
Dim multipleRange As Range
Dim a As String

For i = 1 To 4
    If Cells(i, 1) = True Then
        If multipleRange Is Nothing Then
            Set multipleRange = Cells(i, 2).Resize(, 2)
        Else
            Set multipleRange = Union(multipleRange, Cells(i, 2).Resize(, 2))
        End If
    End If
Next i

multipleRange.Select

End Sub