Функция Instr, используемая в операторе if для поиска текста в строке

#excel #vba

#excel #vba

Вопрос:

В этом коде я пытаюсь заставить пользователя выбрать диапазон в строке. Если строка содержит «HOL», в окне сообщения будет показано сообщение.

То, как код работает сейчас, когда пользователь выбирает одну ячейку, содержащую «HOL», появляется сообщение, когда пользователь выбирает несколько ячеек в строке, появляется ошибка Runtime error 13. Это оператор if, с которым у меня возникают проблемы

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

 ' Highlight_SKL Macro
' This macro will highlight leave dates for entry

Dim rng As Range

Set rng = Range(Selection.Address)

If MsgBox("Are you sure you want to submit day of SKL", vbYesNo) = vbNo  Then Exit Sub

If InStr(Range(Selection.Address), "HOL") Then MsgBox ("You are entering a SKL date on a Federal Holiday")

With Selection.Interior
    rng = "=1"
      .Pattern = xlSolid
      .PatternColorIndex = xlAutomatic
      .Color = 250
    .TintAndShade = 0
    .PatternTintAndShade = 0
End With
End Sub
  

Когда пользователь выбирает строку, содержащую «HOL», появляется окно сообщения, сообщающее им об этом.

Скриншот

Ответ №1:

Используйте подстановочный знак для выбора одной или нескольких ячеек.

 If Not IsError(application.match("*HOL*", Selection, 0)) Then _
    MsgBox "You are entering a SKL date on a Federal Holiday"
  

Ответ №2:

Приведенный ниже код используется для каждого цикла для перебора каждой ячейки выделения, чтобы избежать ошибок.

 Option Explicit

Sub test()

    Dim rng As Range, cell As Range

    Set rng = ThisWorkbook.Worksheets("Sheet1").Range(Selection.Address) '<- Change sheet name if need

    If MsgBox("Are you sure you want to submit day of SKL", vbYesNo) = vbNo Then Exit Sub

    For Each cell In rng

        If InStr(cell, "HOL") Then MsgBox ("You are entering a SKL date on a Federal Holiday")

        With cell

            With .Interior
                .Pattern = xlSolid
                .PatternColorIndex = xlAutomatic
                .Color = 250
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With

            .Value = 1

        End With

    Next cell

End Sub
  

Комментарии:

1. Большое спасибо за эти предложения, я попробую и сообщу