Excel VBA:在这个简单的OFFSET中我缺少什么?

时间:2017-02-16 21:18:07

标签: excel vba excel-vba offset

代码查找标题行和正确的列。我想在同一列中标题行下面的一个单元格的下一个单元格中执行一些代码,然后下一行到同一列中的最后一行。我尝试使用offset来创建范围,但offset每次都失败。可以offset不能这样使用吗?

Sub Del_Y_Rows()
Dim Rng, fcell, LastRow, SrchRng, sRNG, eRNG As Range
Dim Findstring As String
Findstring = "Header"

With Sheets("thisSheet")
   Set SrchRng = .Range("a1:l15")
   Set fcell = SrchRng.Find(What:=Findstring, _
            LookAt:=xlWhole, _
            LookIn:=xlValues, _
            SearchOrder:=xlByRows, _
            MatchCase:=False)
    LastRow = .Cells(Rows.Count, fcell.Column - 2).End(xlUp).Row
    Debug.Print "fcell " & fcell.Address

    sRNG = .Range(fcell).Offset(1, 0)   'this fails  'sRng = start of the range
    Debug.Print "srng " & sRNG
    eRng = .cells(LastRow, fcell.Column)  'eRng = end of the range
    Rng = .Range(sRNG, eRng)
    Debug.Print "rng is " & Rng.Address
End With
End Sub

2 个答案:

答案 0 :(得分:0)

fcell是一个范围,不需要RAnge()

sRNG = fcell.Offset(1, 0)

还有一件事,你会想要使用支票来确保fcell实际上是一个范围而不是什么。

Sub Del_Y_Rows()
Dim Rng As Range, fcell As Range, LastRow as Long , SrchRng As Range, sRNG As Range, eRNG As Range
Dim Findstring As String
Findstring = "Header"

With Sheets("thisSheet")
   Set SrchRng = .Range("a1:l15")
   Set fcell = SrchRng.Find(What:=Findstring, _
            LookAt:=xlWhole, _
            LookIn:=xlValues, _
            SearchOrder:=xlByRows, _
            MatchCase:=False)
    LastRow = .Cells(Rows.Count, fcell.Column - 2).End(xlUp).Row
    If not fcell is nothing then

        Debug.Print "fcell " & fcell.Address

        set sRNG = fcell.Offset(1, 0)   'this fails  'sRng = start of the range
        Debug.Print "srng " & sRNG
        set eRng = .cells(LastRow, fcell.Column)  'eRng = end of the range
        set Rng = .Range(sRNG, eRng)
        Debug.Print "rng is " & Rng.Address
   End If
End With
End Sub

答案 1 :(得分:0)

您必须使用Set for objects。

设置sRNG = .Range(fcell)。偏移(1,0)