Ответ 1
Не очень хорошо с excel, но я нашел их здесь
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)
и A1
может быть любой ячейкой без ошибок в листе.
Для полного пути и имени листа используйте
=CELL("filename",A1)
Я искал документацию по функции excel и общий поиск MSDN, но не смог найти способ вернуть имя листа без VBA.
Есть ли способ получить имя листа в формуле excel без необходимости прибегать к VBA?
Не очень хорошо с excel, но я нашел их здесь
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)
и A1
может быть любой ячейкой без ошибок в листе.
Для полного пути и имени листа используйте
=CELL("filename",A1)
Для последних версий Excel синтаксис формулы:
=MID(CELL("filename";A1);FIND("]";CELL("filename";A1))+1;255)
Ниже будет указано имя листа:
=RIGHT(CELL("filename"),LEN(CELL("filename"))-FIND("]",CELL("filename")))
У меня был уже открытый модуль, поэтому я создал пользовательскую функцию:
Public Function Sheetname (ByRef acell as Range) as string
Sheetname = acell.Parent.Name
End Function
Ни одна из формул, приведенных в других ответах, не поддерживает случай, если в filepath есть символ].
Формула ниже является более сложной, но она может правильно обрабатывать такие случаи:
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1),FIND("?",SUBSTITUTE(CELL("filename",A1),"\","?",LEN(CELL("filename",A1))-LEN(SUBSTITUTE(CELL("filename",A1),"\","")))))+1,LEN(CELL("filename",A1)))
В имени файла была квадратная скобка ']', поэтому необходимо было изменить приведенную выше формулу в соответствии со следующим, чтобы найти последнее вхождение квадратной скобки. Проверено, что это работает для 0,1 или более квадратных скобок в имени файла/пути.
=RIGHT(CELL("filename"),LEN(CELL("filename")) - FIND("]]]",SUBSTITUTE(CELL("filename"),"]","]]]",LEN(CELL("filename"))-LEN(SUBSTITUTE(CELL("filename"),"]","")))))
Предыдущий комментарий выше о сохранении рабочей книги также является ключевым, поскольку в противном случае вы получите #Value! результат.
Вот довольно короткий, который имеет пару дополнительных преимуществ:
REPT
.A1
кажется плохим выбором, поскольку вероятность errors
значительно выше, чем... $FZZ$999999
.?
является преднамеренным, поскольку это не должно быть в пути к файлу. =SUBSTITUTE(RIGHT(SUBSTITUTE(CELL("Filename",$FZZ$999999), "]",REPT("?", 999)), 999),"?","")
Я почти уверен, что вы могли бы это сделать. Я только что сделал, и вот самое первое, что пришло мне в голову.
In Excel it is possible to use the CELL function/formula and the MID and FIND to return the name of an Excel Worksheet in a Workbook. The formula below shows us how;
=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,256)
Where A1 is any non error cell on the Worksheet. If you want the full path of the Excel Workbook, simply use;
=CELL("filename",A1)
Единственный улов в том, что вам нужно сохранить файл для этого!