Уважаемые форумчане! Нашел на просторах форума пользовательскую функцию, которая возвращает массив имен листов. Возможно ли в самой функции заложить условие, чтобы в массив собирались только те имена листов, которые содержат скажем символ "@"?
Код
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
Посмотрите допустимые символы в имени сообщение об ошибке, если: Имя более 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
вот это совсем дичь, конечно, достаточно просто w.Sheets.Count
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
не совсем. Т.к. это формула листа, вводимая как формула массива, то вполне возможен вариант, когда выделено ячеек меньше, чем листов в книге. И размер массива задается именно через кол-во выделенных заранее ячеек:
Код
ReDim a$(1 To Application.Caller.Rows.Count)
И если не сделать как в коде, то получим ошибку обращения к элементу массива. Либо массив всегда формировать по кол-ву листов(где тоже будут свои нюансы), либо делать все же как сделано(что по мне чуть правильнее).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄