Второй вариант - выйти из For, когда вы найдете первое пустое текстовое поле, примерно так:
For i = 1 To 10
If Trim(RecForm.Controls("TB" & i).Value) = "" And Trim(ecForm.Controls("SNTB" & i).Value) = "" Then
GoTo MyNextCode
End If
Dim lastrow As Long ' should put a data type with dim statements
lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
lastrow = lastrow + 1
Cells(lastrow, 1) = RecForm.Controls("RMATB").Value
Cells(lastrow, 2) = RecForm.Controls("CustCB").Value
Cells(lastrow, 3) = RecForm.Controls("TB" & i).Value
Cells(lastrow, 4) = RecForm.Controls("SNTB" & i).Value
Cells(lastrow, 5) = RecForm.Controls("ReceiveTB").Value
Next i
MyNextCode:
...
Это не будет большой разницей для такого количества элементов управления, но если вы Если бы было больше элементов управления, этот метод завершился бы после первого пустого, тем самым предотвращая необходимость go кода через все (в данном случае) элементы управления .... Еще одним преимуществом этого решения является то, что вы предотвращаете, например, PN1, PN2, а затем внезапно PN5 (не знаю, уместно ли это здесь, конечно ...). По опыту я знаю, что если у вас есть много данных до go, вы будете более счастливы, используя этот второй вариант, вариант 1 отлично подходит для того объема данных, который у вас есть, и будет отлично работать для большого количества данных или элементов управления. так же хоть и медленнее ...