InStr для извлечения всего текста перед "[", если некоторые ячейки содержат "[", а некоторые нет - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть следующий фрагмент кода, который возвращает

Ошибка времени выполнения '5'

, как только он сталкивается с ячейкой, которая не содержит [

Cells(i + 2, 11) = Left(Cells(i * 2 + 1, 12), InStr(1, Cells(i * 2 + 1, 12), "[") - 1)

В этом примере:
Cheese[1] в порядке и возвращает Cheese.
Marmite(2)[13] в порядке и возвращает Marmite(2).
Spreadable butter(13) не работает.

Что за исправление, пожалуйста


Спасибо, поэтому следуйте приведенной ниже справке, как мне включить и применить два IF заявления в следующее?

For i = 1 To 4
   If Cells(i * 2 + 2, 14) <> "" Then
      Cells(i + 2, 3) = Left(Right(GetURL(Cells(i * 2 + 2, 17)), 12), 7)
      Cells(i + 2, 11) = Left(Cells(i * 2 + 1, 12), InStr(1, Cells(i * 2 + 1, 12), "[") - 1)
      Cells(i + 2, 12) = Left(Cells(i * 2 + 1, 13), InStr(1, Cells(i * 2 + 1, 13), "[") - 1)
   End If
Next i

Я только начинающий в VBA.

1 Ответ

0 голосов
/ 28 апреля 2020

Вы можете просто проверить, содержит ли она [ first ...

Функция Instr() возвращает 0, если искомая строка не может быть найдена, поэтому без оператора If для проверки этого вначале вы получаете 0, и ваш код вычитает 1 из нуля, чтобы получить -1, и это не является допустимым аргументом для функции Left, поэтому вы получаете ошибка.

If InStr(1, Cells(i * 2 + 1, 12), "[") > -1 Then
  Cells(i + 2, 11) = Left(Cells(i * 2 + 1, 12), InStr(1, Cells(i * 2 + 1, 12), "[") - 1)
End If

Предполагается, что ячейка никогда не будет начинаться с [

Чтобы избежать ошибки, если это первый символ:

If InStr(1, Cells(i * 2 + 1, 12), "[") > 0 Then
  Cells(i + 2, 11) = Left(Cells(i * 2 + 1, 12), InStr(1, Cells(i * 2 + 1, 12), "[") - 1)
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...