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

Excel VBA: What am I missing in this simple OFFSET?

代码找到 header 行和正确的列。我想在从同一列中 header 行下的一个单元格开始一直到同一列最后一行的范围内执行一些代码。我尝试使用 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

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

您必须对对象使用 Set。

设置 sRNG = .Range(fcell).Offset(1, 0)