VBA - оператор If, который ссылается на определенный текст в ячейке другого листа - PullRequest
1 голос
/ 07 апреля 2019

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

        Dim Rng_1 As Range
        Dim x_sheet As Worksheet
        Dim Value_X

        Value_X = "<>Could not generate report for*"
        Set x_sheet = ActiveWorkbook.Worksheets("worksheet_name")
        Set Rng_1 = x_sheet.Range("B8")
            If Rng_1.value = Value_X Then
           'run code
        End If
       'It should continue from here if the referenced cell did contain the string.

Выполнение вышеупомянутого всегда пропускает код между независимо от того, как я редактирую, не содержит значения или даже если я добавляю «else if». На данный момент я даже не уверен, что я на правильном пути.

Ссылочный лист
enter image description here

Ответы [ 2 ]

2 голосов
/ 07 апреля 2019

Оператор сравнения Like необходимо использовать при работе с подстановочными знаками.«Нет совпадения» для этого Not this Like that.Вы не добавляете оператор <> для создания «не совпадает».

Вам нужно Else, если вы хотите план A и план B.

    Value_X = "Could not generate report for*"  'removed <>
    Set x_sheet = ActiveWorkbook.Worksheets("worksheet_name")
    Set Rng_1 = x_sheet.Range("B8")
    If Not Rng_1.value Like Value_X Then
       Debug.Print "msg not found"
       'run code
    Else
       Debug.Print "msg found"
       'It should continue from here if the referenced cell did contain the string.
    End If

fwiw, изваши данные образца, похоже, вы также можете проверить на IsNumeric(Rng_1.value).

0 голосов
/ 08 апреля 2019

Исходя из представленных вами данных, вы можете провести обратный инжиниринг вашей проблемы, вместо этого проверить, имеют ли данные правильный формат (только цифры)

Private Sub loop_though()

  Dim ws as Worksheet: set ws = Sheets("worksheet_name")
  Dim cell as Range
  Dim looprange as Range: Set looprange = ws.Range("B2:B10")

  For each cell in looprange
       If Not IsNumeric(cell) Then 'cell does not contain only numbers
          ' further code here
       End If
  Next cell

End Sub

В качестве альтернативы, если вы настаиваете на проверке «value_x» внутри ячеек, то это будет решением.

Private Sub loop_though()

  Dim ws as Worksheet: set ws = Sheets("worksheet_name")
  Dim cell as Range
  Dim looprange as Range: Set looprange = ws.Range("B2:B10")
  Dim value_x as String: value_x = "Could not generate report for"

  For each cell in looprange
       If InStr(1, cell, value_x) <> 0 Then
          ' further code here
       End If
  Next cell

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