#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
, что использовался для поиска aRange
, а не как таковой.row.
, моя версия, похоже, работала нормально, если:TestRow = ws.Range("B1:B" amp; LastRow).Find(What:=Test).Row
Смог что-то найти.2. Если вы устанавливаете его в переменную, насколько я знаю, вам нужно установить его как диапазон, но вы могли бы просто сделать это прямо в операторе if, и я думаю, что это работает. В любом случае, если я решил вашу проблему, и на этом все, было бы здорово, если бы вы могли пометить ответ как правильный, чтобы этот вопрос по существу отображался как решенный. Ваше здоровье.