对于下一个循环问题

时间:2017-07-06 09:28:43

标签: vba loops for-loop next

君子,

我为一个小问题而奋斗,因为他们而变得狡猾。我非常感谢你的建议。

我在工作簿中有一个名为“najemcy”的工作表。在此工作表中: A2 = 3,A7 = 2,A12 = 1 。合并以下单元格: A2:A6,A7:A11,A12:A16 。在G列中有以下值: G2 = 550,G3 = 55,G7 = 650,G8 = 11 G12 = 550

宏应该在G列中找到最后一个值:范围A2:A6,A7:A11,A12:A16 。这意味着我希望获得3次带有地址的msgbox: $ G $ 4,$ G $ 8,$ G $ 12,但不是$ G $ 12我得到$ G $ 1048576

Public Sub helpMe()

Dim najemcy As Worksheet
Dim pokoj As Range
Dim pokNr As Integer
Dim obecnyLok As Range

    For pokNr = 3 To 1 Step -1
        Set najemcy = Sheets("Najemcy")

        Set pokoj = najemcy.Range("A1:A100").Find(What:=pokNr, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)
'            MsgBox pokoj.Address

        Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address).End(xlDown)
        MsgBox obecnyLok.Address

    Next
End Sub

1 个答案:

答案 0 :(得分:0)

当你使用.end(xlDown)时,它会一直向下,直到它碰到一个空白行,但如果当前一行下面的第一行是空白,它将继续运行。

解决这个问题的一种方法是在使用.end(xlDown)之前检查下一行是否为空白

Public Sub helpMe()

Dim najemcy As Worksheet
Dim pokoj As Range
Dim pokNr As Integer
Dim obecnyLok As Range

For pokNr = 3 To 1 Step -1
    Set najemcy = Sheets("Najemcy")

    Set pokoj = najemcy.Range("A1:A100").Find(What:=pokNr, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
        'MsgBox pokoj.Address

    If najemcy.Range("G" & pokoj.Row + 1).Value = "" Then
        Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address)
    Else
        Set obecnyLok = najemcy.Range(pokoj.Offset(0, 6).Address).End(xlDown)
    End If
    MsgBox obecnyLok.Address

Next
End Sub