Файл имеет имя 01_21_5-1_топ.xls. Не хитрыми способами извлекаем имя в переменную NameFile1 (получаем: 01_21_5-1_топ). Вопрос, каким образом задать условия чтобы если в переменной встречается топ выполнялось условие 1, в противном случае условие2.
Представленный ниже макрос ищет не просто 'топ', а '_топ.'. Это связано с тем, что буквосочетание 'топ' может быть частью другого более длинного слова, например 'потоп'.
Данный макрос ищет с учётом регистра (больших/маленьких букв). Чтобы искать без учёта регистра, есть два варианта:
1) в самом верху модуля напишите: Option Compare Text
2) добавьте параметр в функцию 'InStr': InStr(1, text, "_топ.", vbTextCompare)
В этом случае нужно ещё указать начало поиска (в данном случае 1 - то есть поиск с первого символа);
3) приведение сравниваемых фрагментов к одному регистру с помощью LCase: InStr(LCase(text), "_топ."). LCase переводит текст в маленькие буквы, второй фрагмент у нас маленькими буквами, поэтому нет необходимости заключать второй фрагмент внутрь LCase.
Макрос
Sub Макрос()
Dim text As String
' Запись в переменную 'text' анализируемого текста.
text = " 01_21_5-1_топ.xls"
' Если есть текст '_топ.'.
If InStr(text, "_топ.") <> 0 Then
' Если нет текста '_топ.'.
Else
End If
End Sub
Если нужно искать 'топ' в конце строки.
В этом макросе поиск с учётом регистра (больших/маленьких букв). Чтобы искать без учёта регистра, есть такие варианты:
1) в самом верху модуля напишите: Option Compare Text;
2) приведите сравниваемые фрагменты к одному регистру с помощью LCase: LCase(text) Like "*_топ". LCase переводит текст в маленькие буквы, второй фрагмент у нас маленькими буквами, поэтому нет необходимости заключать второй фрагмент внутрь LCase.
Макрос
Sub Макрос()
Dim text As String
' Запись в переменную 'text' анализируемого текста.
text = " 01_21_5-1_топ"
' Если есть текст '_топ'.
If text Like "*_топ" Then
' Если нет текста '_топ'.
Else
End If
End Sub
Поиск по целому слову с помощью 'Split'.
В этом макросе поиск с учётом регистра (больших/маленьких букв). Чтобы искать без учёта регистра, есть такие варианты:
1) в самом верху модуля напишите: Option Compare Text;
2) приведите сравниваемые фрагменты к одному регистру с помощью LCase: LCase(text(i)) = "топ". LCase переводит текст в маленькие буквы, второй фрагмент у нас маленькими буквами, поэтому нет необходимости заключать второй фрагмент внутрь LCase.
Макрос
Sub Макрос()
' У переменной 'text' делаем тип данных 'Variant'. Если не указывать тип данных, то переменной
' будет назначен тип данных 'Variant'.
Dim text, found As Boolean, i As Long
' Запись в переменную 'text' анализируемого текста.
text = " 01_21_5-1_топ"
' Разбивка текста на слова по символу '_'.
text = Split(text, "_")
' Просмотр всех слов. Функция 'Split' создаёт массив, у которого порядковый номер
' первого элемента 0.
' Ищем от последнего слова к первому, т.к. предполагается, что искомый текст
' находится в конце слова. Чтобы ускорить макрос.
For i = UBound(text) To 0 Step -1
If text(i) = "топ" Then
' Делаем пометку, что есть искомый текст.
found = True
' Остальные слова не просматриваем, т.к. искомый текст найден.
Exit For
End If
Next i
' Если есть текст 'топ'.
If found = True Then
' Если нет текста 'топ'.
Else
End If
End Sub
Спасибо, все работает. Выбрал 3-й способ LCase.