условный оператор внутри цикла for - PullRequest
0 голосов
/ 12 марта 2020

Следующий код предназначен для раскрывающегося списка в E7, который зависит от значения в указанной ячейке c (Pos_Cat). Идея состоит в том, чтобы l oop через столбец E другого листа найти значения, соответствующие Pos_Cat, и добавить значение столбца H в этой строке в строку, которая является моей формулой для раскрывающегося списка.

Код работал нормально, когда я добавлял все значения в диапазон, но когда был добавлен условный оператор, он начал выдавать ошибку для «AStr = Right (AStr, Len (AStr) - 1)».

Спасибо за помощь!

If Not Intersect(Target, Range("E7")) Is Nothing Then

Dim PTMsht As Worksheet
    Set PTMsht = Sheets("PTM")
Dim TRNsht As Worksheet
    Set TRNsht = Sheets("TL")
Dim Pos_Cat As String
    Pos_Cat = TRNsht.Range("E6").Value
Dim Lrow As Single
    Lrow = PTMsht.Range("E" & Rows.Count).End(xlUp).Row
Dim AStr As String

Dim i As Long

For Each cell In PTMsht.Range("H15:H100")
    If cell.Offset(0, -3).Value = Pos_Cat Then
        AStr = AStr & "," & cell
    End If
Next
           AStr = Right(AStr, Len(AStr) - 1)

With TRNsht.Range("E7").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=AStr
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
End If

1 Ответ

0 голосов
/ 12 марта 2020

Когда AStr пусто, это приведет к ошибке (см. Объяснение ниже) . Если AStr никогда не должно быть пустой строкой, вам нужно проверить логику восходящего потока c. Если вы иногда ожидаете, что AStr вернет пустое значение, вам нужно учесть это следующим образом:

If Len(AStr) > 0 Then
    AStr = Right(AStr, Len(AStr) - 1)
Else
    MsgBox "AStr is blank string"
    'Do something here when you get blank string
End If

Ошибка

Когда ваша строка пуста, это как ваше выражение оценивает

AStr = Right(AStr, 0 -1) = Right(AStr, -1)

Функция Right принимает только положительные значения, которые являются источником вашей ошибки. Вы просите функцию вернуть отрицательный первый символ , который не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...