Функция Instr, используемая в операторе if для поиска текста в строке - PullRequest
0 голосов
/ 08 апреля 2019

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

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

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

' 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», появляется окно с сообщением.

Screenshot

Ответы [ 3 ]

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

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

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
0 голосов
/ 08 апреля 2019

Если бы проверить это, используя что-то вроде:

If Not Range(Selection.Address).Find(What:="HOL", LookAt:=xlWhole) Is Nothing Then
    MsgBox ("You are entering a SKL date on a Federal Holiday")
Else
    'Your code
End If
0 голосов
/ 08 апреля 2019

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

If Not IsError(application.match("*HOL*", Selection, 0)) Then _
    MsgBox "You are entering a SKL date on a Federal Holiday"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...