VBA LongVar = диапазон.найти тест, если переменная пуста

#vba #find #range #long-integer #is-empty

#vba #Найти #диапазон #длинное целое число #является-пустым

Вопрос:

У меня есть следующий код:

 Dim wb As Workbook
Dim ws As Worksheet
Dim Test As String
Dim TestRow As Long
Dim LastRow As Long

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)

Test = "Test"
LastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row 
TestRow = ws.Range("B1:B" amp; LastRow).Find(What:=Test).Row
'This was entered after the first error
    If TestRow Is Empty Then
        ws.Range("B" amp; LastRow   1) = Test
    End If
 

Без инструкции If и Test не существует в моих данных, я получаю следующую ошибку: «переменная объекта runtime 91 или с переменной блока не установлена».

Затем я хотел бы проверить, является ли TestRow пустым / нулевым. Я получаю несоответствие типов в TestRow. Я пробовал ничего и различные другие варианты, но я не могу заставить его работать.

Какие-нибудь советы?

Ответ №1:

Попробуйте вместо этого:

 Dim wb As Workbook
Dim ws As Worksheet
Dim Test As String
Dim TestRow As Range
Dim LastRow As Long

Set wb = ThisWorkbook
Set ws = wb.Sheets(1)

Test = "Test"
LastRow = ws.Cells(Rows.Count, "B").End(xlUp).Row
Set TestRow = ws.Range("B1:B" amp; LastRow).Find(What:=Test)

If TestRow Is Nothing Then
    ws.Range("B" amp; LastRow   1) = Test
Else
    'Put code here if found Test (TestRow.Row is your row that it found it on)
End If
 

Find любит возвращать a Range , поэтому вам нужно Dim указать диапазон, а затем Set диапазон.

Затем мы проверяем, нашел ли он что-нибудь с помощью TestRow Is Nothing или Not TestRow Is Nothing .

Поскольку вам нужна строка, которую вы затем использовали TestRow.Row бы для ее номера строки.

Комментарии:

1. Спасибо! Это сделало свое дело. Не знал Find , что использовался для поиска a Range , а не как таковой .row. , моя версия, похоже, работала нормально, если: TestRow = ws.Range("B1:B" amp; LastRow).Find(What:=Test).Row Смог что-то найти.

2. Если вы устанавливаете его в переменную, насколько я знаю, вам нужно установить его как диапазон, но вы могли бы просто сделать это прямо в операторе if, и я думаю, что это работает. В любом случае, если я решил вашу проблему, и на этом все, было бы здорово, если бы вы могли пометить ответ как правильный, чтобы этот вопрос по существу отображался как решенный. Ваше здоровье.