Страницы: 1
RSS
Массив имён листов, которые в названии содержат символ
 
Уважаемые форумчане!
Нашел на просторах форума пользовательскую функцию, которая возвращает массив имен листов.
Возможно ли в самой функции заложить условие, чтобы в массив собирались только те имена листов, которые содержат скажем символ "@"?
Код
Function ShNames()
Dim i&, w As Object
Application.Volatile
Set w = Application.Caller.Parent.Parent
ReDim a$(1 To Application.Caller.Rows.Count, 0 To 0)
For i = 1 To Application.Min(w.Sheets.Count, UBound(a))
   a(i, 0) = w.Sheets(i).Name
Next
ShNames = a
End Function
Изменено: vikttur - 30.08.2021 12:48:02
 
Посмотрите допустимые символы в имени
сообщение об ошибке, если:
Имя более 31 символа
Имя содержит любой из следующих символов:/\ *? []
@# $% &() + ~ `" ':;., |  не рекомендуется
 
В данном случае принципиален сам кусок текста в имени. Пусть это будет "_"
 
Код
Function ShNames()
Dim i&, w As Object
Application.Volatile
Set w = Application.Caller.Parent.Parent
ReDim a$(1 To Application.Caller.Rows.Count)
For i = 1 To Application.Min(w.Sheets.Count, UBound(a))
   a(i) = w.Sheets(i).Name
Next
ShNames = WorksheetFunction.Transpose(Filter(a, "@"))
End Function
 
Огромное спасибо!!
 
Цитата
yarik1983: Application.Min(w.Sheets.Count, UBound(a))
вот это совсем дичь, конечно, достаточно просто w.Sheets.Count
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Jack Famous написал:
вот это совсем дичь,
не совсем. Т.к. это формула листа, вводимая как формула массива, то вполне возможен вариант, когда выделено ячеек меньше, чем листов в книге. И размер массива задается именно через кол-во выделенных заранее ячеек:
Код
ReDim a$(1 To Application.Caller.Rows.Count)
И если не сделать как в коде, то получим ошибку обращения к элементу массива. Либо массив всегда формировать по кол-ву листов(где тоже будут свои нюансы), либо делать все же как сделано(что по мне чуть правильнее).  
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков: не совсем. Т.к. это формула листа, вводимая как формула массива
не учёл .т.к. не использую
Спасибо  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх