Как завершить цикл, если переменная пуста
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