Здесь исправление вашего кода с как можно меньшим количеством изменений, чтобы вы могли понять, что пошло не так. Я бы также предложил использовать пользовательскую форму в этом случае:
Option Explicit
Sub C4()
Dim Stud As String
Dim High As Long
Dim TallestStudent As String
Dim cat As String
Dim k As Long
Stud = InputBox("Name")
High = InputBox("Height[cm]")
cat = Stud & (" ") & Str(High) & Chr(10)
k = High
TallestStudent = Stud
Do While Stud <> ""
Stud = InputBox("Name")
If Stud = "" Then
Exit Do
End If
High = InputBox("Height[cm]")
If k < High Then
k = High
TallestStudent = Stud
End If
cat = cat & Stud & (" ") & Str(High) & Chr(10)
Loop
MsgBox cat & Chr(10) & "The Tallest Student was: " & TallestStudent
End Sub
Итак, чтобы заставить ваши три пункта работать:
ПЕРВЫЙ момент: здесь вы должны были убедиться, что выходите из цикла сразу после того, как имя не указано (с помощью Exit Do)
ВТОРОЙ момент: делается в конце. High
не было ясно в вашем коде. Теперь это рост каждого ученика, а новый Dim TallestStudent
дает имя самого высокого ученика.
Третий пункт: теперь сообщение возвращает имя, рост и самого высокого ученика, которого не было в вашем коде.