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

lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lr

     DynamicLR = Sheets("RA Inventory").Cells(Rows.Count, 1).End(xlUp).Row


    'If Application.WorksheetFunction.IsNumeric(Application.WorksheetFunction.Match(ActiveSheet.Range("D" & i), Sheets("RA Inventory").Range("D2:D" & DynamicLR), 0)) = False Then
    If Application.WorksheetFunction.IfError(Application.WorksheetFunction.IsNumber(Application.WorksheetFunction.Match(ActiveSheet.Range("D" & i), Sheets("RA Inventory").Range("D:D").Select, 0)), False) = False Then

         ActiveSheet.Range("A" & i).Select
         Selection.Copy
         Worksheets("RA Inventory").Activate
         ActiveSheet.Range("A" & DynamicLR).Select
         ActiveSheet.Paste

Спасибо

1 ответ1

1

Если вы говорите о нескомментированном if - вам не нужно выбирать, и вы можете использовать синтаксический сахар:

If [iferror(isnumber(match(A1,B:B,0)),false)] = True Then
     MsgBox ("True")
     Else: MsgBox ("False")
end if

Просто относитесь к диапазонам так же, как к функциям, например Sheet1!B:B

Вы также можете опустить функцию worksheetfunction которая допускает ошибки (если ваша формула возвращает ошибку)

With Application
   if .iferror(.isnumber(.match( ... 
end with

По сути, ваше «совпадение» неправильно ссылается на данные. Ошибка 2015 - см. Эту документацию


Большая проблема может быть, как вы собираетесь об этом. Вы должны использовать обработку ошибок для обработки ошибок. Это было бы лучше -

Sub test()
lr = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For i = 2 To lr

    x = Application.Match(ActiveSheet.Range("B" & i), Sheets("Sheet1").Range("B1:B" & lr), 0)
    If IsNumeric(x) Then
         MsgBox (x)
    End If
Next


End Sub

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .