Здравствуйте, уважаемые эксперты!
Я – начинающий пользователь VBA, очень часто пользуюсь данным форумом, но вот столкнулся с проблемой, на которую не могу найти ответ, в частности потому что не знаю, что именно искать.
У меня стоит задача – сделать, чтобы в ячейке с текстом, каждое условие, найденное в фиксированном диапазоне, начиналось с новой строки.
Я написал код, который делает то, что мне нужно. Но когда я пробую сделать его пользовательской функцией, то результат ограничивается переносом на новую строку первого найденного совпадения.
Подскажите, пожалуйста, где ошибка в синтаксисе и чем отличаются диапазоны, заданные в процедуре (Set a = Worksheets("Sheet2").Range("C2")) от диапазона в аргументах фунцкии (Function new_line(a As Range)) и где можно почитать больше на эту тему.
Пользовательская функция была бы удобна, потому что ячеек с текстом много и я думал просто протягивать данную функцию для всей таблицы. Но в принципе подойдет и одноразовое выполнение макроса для таблицы, только я еще не разобрался, как данную процедуру применить к каждой ячейке из столбца таблицы.
Заранее благодарен за помощь!
Мой код
Скрытый текст |
---|
Код |
---|
Sub next_line()
'определение переменных
Dim conditions_list, rCell, a As Range
Set a = Worksheets("Sheet2").Range("C2")
Set conditions_list = Worksheets("Sheet2").Range("A1:A6")
'для каждого найденного условия из conditions_list
' меняем значение "а" на "часть 'а' до совпаденя" + разрыв строки + "часть 'а' после совпаденя"
For Each rCell In conditions_list
If InStr(a, rCell) > 0 Then a = Mid(a, 1, InStr(a, rCell) - 1) & Chr(10) & Mid(a, InStr(a, rCell), 9999)
Next rCell
'если разрыв строки попался в начале текста, заменяем
If Left(a, 1) = Chr(10) Then a = Mid(a, 2, 9999)
End Sub |
|
Моя функция, которая не работает (фактически тот же код, только нет обозначения аргумента "а")
Скрытый текст |
---|
Код |
---|
Function new_line(a As range)
Dim conditions_list, rCell As range
Set conditions_list = Worksheets("Sheet2").range("A1:A6")
For Each rCell In conditions_list
If InStr(a, rCell) > 0 Then new_line = Mid(a, 1, InStr(a, rCell) - 1) & Chr(10) & Mid(a, InStr(a, rCell), 9999)
Next rCell
If Left(new_line, 1) = Chr(10) Then new_line = Mid(new_line, 2, 9999)
End Function |
|