无法使用usedrange属性

时间:2018-05-26 14:57:47

标签: vba excel-vba for-loop excel

我正在使用的工作表中填充了两个单元格,一个填充Total,另一个填充value。它们彼此相邻。我的目标是抓住Total并打印value。因为我不想知道他们的特定单元格地址所以我创建了一个循环并完成了这项工作。我是使用.SpecialCells(xlCellTypeLastCell)完成的。现在,我想使用.UsedRange

做同样的事情

我的问题是:我怎样才能使用.UsedRange执行相同的操作(创建循环)。

这是我尝试过(工作过):

Sub FindTotalValue()
    Dim rng As Range, cel As Range

    'Set rng = ActiveSheet.UsedRange
    'For Each cel In rng.Row

    For Each cel In Range("A1", Range("A1").SpecialCells(xlCellTypeLastCell))
        If InStr(cel.Value, "Total") > 0 Then MsgBox cel.Offset(0, 1).Value
    Next cel
End Sub

由于我对使用.usedrange方法创建循环一无所知,所以我只是在脚本中对它们进行了评论。

1 个答案:

答案 0 :(得分:2)

尝试一下:

Sub FindTotalValue()
    Dim rng As Range, cel As Range

    For Each cel In ActiveSheet.UsedRange.Cells.SpecialCells(2)
        If InStr(cel.Value, "Total") > 0 Then MsgBox cel.Offset(0, 1).Value
    Next cel
End Sub

它假设包含" Total"是一个常数,而不是一个公式:

enter image description here

您还应该调查使用 Find()而不是循环。

修改#1:

根据香蕉的建议:

Sub FindTotalValue()
    Dim rng As Range, cel As Range

    For Each cel In ActiveSheet.UsedRange.Cells.SpecialCells(2)
        If InStr(cel.Value, "Total") > 0 Then
            MsgBox cel.Offset(0, 1).Value
            Exit For
        End If
    Next cel
End Sub

修改#2:

使用 Find()

Sub FindTotalValueQuickly()
    MsgBox Cells.Find(what:="Total", lookat:=xlPart).Offset(0, 1).Value
End Sub