Ошибки несоответствия типа столбцов («U2: U») и ячеек (,) .адрес - PullRequest
0 голосов
/ 21 февраля 2020

В настоящее время я пытаюсь создать программу, которая находит заголовок «Ошибка надежности» и проверяет, являются ли данные под этим заголовком> 0. Если значение больше 0, оно сместится (0,3) вправо и поместит полученное мной значение с помощью левой функции. Поскольку я все еще не очень знаком с синтаксисом VBA, я столкнулся с ошибкой несоответствия типа, как показано ниже. Кто-нибудь знает, как ее решить?

 Dim arr As Variant
    With Application
    Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets(1)
    Dim z As Long
    Dim lastrow2 As Long
    Dim result As Long
    lastrow2 = ws1.Columns("U2:U").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row '--->**mistmatch error here**
    arr = .Transpose(ws1.Range("T1:W1").Value)
    For p = 2 To lastrow2
    If .Count(.Match(Array("Reliability Fail"), arr, 0)) = 1 And ws1.Cells(p, "U") > 1 Then
    result = ws1.Cells(p, "U").Address(False, False) '---->**mismatch error here**
    ws1.Cells(Range("result").Row, Range("result").Column).Offset(0, 3) = Left(output, Len(output) - 1)
    End If
    Next

End With

Обновлены изменения:

Dim arr As Variant
With Application
Dim ws1 As Worksheet: Set ws1 = ThisWorkbook.Sheets(1)
Dim z As Long
Dim lastrow2 As Long
Dim resultRng As Range
Set resultRng = ws1.Cells(p, "U")
lastrow2 = ws1.Columns("U2:U & ws1.Rows.Count").Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row
arr = .Transpose(ws1.Range("T1:W1").Value)
For p = 2 To lastrow2
If ws1.Range("U1") = "Reliability Fail"And resultRng > 1 Then
ws1.Cells(p, "U").Offset(0,3).Value = Left(output, Len(output) - 1)
End If
Next
End With

1 Ответ

2 голосов
/ 21 февраля 2020
  1. "U2:U" не является допустимым диапазоном (или столбцом). Вам нужен номер строки. И используйте Range вместо Columns: ws1.Range("U2:U" & ws1.Rows.Count). Хотя я действительно думаю, что вам просто нужно ws1.Columns("U:U") здесь.
  2. Range.Address возвращает String, например $A$1, а не Long.
  3. Упрощение, просто изменить

    result = resultRng.Address(False, False)
    resultRng.Offset(0,3) = Left(output, Len(output) - 1)
    

    на

    ws1.Cells(p, "U").Offset(0,3).Value = Left(output, Len(output) - 1)
    

Спасибо @Scott Craner за включение этих изменений в следующий пересмотренный код:

Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.Sheets(1)

If ws1.Range("U1") = "Reliability Fail" Then
    Dim lastrow2 As Long
    lastrow2 = ws1.Range("U2:U" & ws1.Rows.Count).Find(What:="*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows).Row

    For p = 2 To lastrow2
        If ws1.Cells(p, "U").Value > 1 Then
            ws1.Cells(p, "U").Offset(0, 3).Value = Left(output, Len(output) - 1)
        End If
    Next
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...