Как завершить цикл, если переменная пуста

Sub max()

Sheets(1).Select
Sheets(1).Name = "Sheet1"

Dim rng As Range
Dim celladdress As String
Dim celling As Variant

Do Until IsEmpty(celling)

    If celling > "G4" Then
    
    Set rng = Range("G3:G1000").Find(what:="Description")
    rng.Find what:="Description"
    
    celladdress = rng.Address(-1)
    celling = celladdress
    Else: Call Source

    End If
Loop

MsgBox "done"

End Sub

Привет, я пытаюсь найти описание слова в моем диапазоне, если описание найдено, он должен запустить макрос, а затем цикл. но если переменная пуста и описание переменной не найдено, я хочу, чтобы цикл завершился и отобразился msgbox. Я попытался завершить цикл, используя цикл, пока ячейка не станет пустой, но, похоже, это не работает. Переменная ячейка цитируется как пустая, поэтому я не знаю, почему это не работает. Любая помощь будет очень принята, спасибо Макс

2 ответа

Решение

Макс, это стоит опубликовать как новый ответ, чтобы подчеркнуть неинтуитивное поведение FindNext. Это работает - лучший кандидат на принятый ответ, чем приведенный выше. Может быть, немного педантично, так как в более элегантном решении возможно:

Sub max()

Sheets(1).Select
Sheets(1).Name = "Sheet1"

Dim rng As Range
Set rng = Range("G3:G1000")

Dim celladdress As String
Dim celladdressPrevious As String
Dim celling As Range
 
Set celling = rng.Find(what:="Description")
If celling Is Nothing Then
    MsgBox "Not found, exiting"
    Exit Sub
End If

Do
    'Set celling = range.FindNext    'Keeps returning first range found! Maybe "With" block on rng will work.
    If celling.Row > 4 Then
        'celling.Activate
        celladdress = celling.Offset(-1, 0).Address
        If celladdress = celladdressPrevious Then GoTo WereDone
        celladdressPrevious = celladdress
        MsgBox celladdress
    'Else: Call Source   'What is Source? Not this sub, is it?
    
    End If
    If celling.Row = 1000 Then Exit Sub
    Set rng = Range("G" & celling.Row & ":G1000")
    Set celling = rng.Find(what:="Description")
Loop Until celling Is Nothing

WereDone:
MsgBox "done"

End Sub

- Макс, догадываюсь немного о твоих намерениях - там тебе может понадобиться твоя помощь. Это приближает вас? Я не думаю, что смогу добиться большего в системе GNU/Linux.

Sub max()

Sheets(1).Select
Sheets(1).Name = "Sheet1"

Dim rng As Range
Set rng = Range("G3:G1000")

Dim celladdress As String
Dim celling As Range
 
Set celling = rng.Find(what:="Description")
If celling Is Nothing Then
    MsgBox "Not found, exiting"
    Exit Sub
End If

Do 
    'Set celling = range.FindNext    'Keeps returning first range found! Maybe "With" block on rng will work.
    If celling.Row > 4 Then
        'celling.Activate
        celladdress = celling.Offset(-1, 0).Address
        MsgBox celladdress
    'Else: Call Source   'What is Source? Not this sub, is it?
    
    End If
    Set celling = range.FindNext 
Loop Until celling Is Nothing

MsgBox "done"

End Sub
Другие вопросы по тегам