Требуется ошибка объекта Application.Caller
Как получить имя текущего листа (не активного листа) из функции? Под "текущим листом" я подразумеваю имя листа, где размещена и вызвана функция.
Я пытаюсь получить так
Function MySheet()
MySheet = Application.Caller.Worksheet.Name
MsgBox MySheet
End Function
но я получаю объект ошибки требуется.
2 ответа
Вам нужно быть осторожным при вызове этой функции. Вы предоставили очень мало деталей о том, что вы хотите с ним сделать.
Function MySheet()
Select Case TypeName(Application.Caller)
Case "Range"
MySheet = Application.Caller.Parent.Name
Case "String"
MySheet = Application.Caller
Case "Error"
MySheet = "Error"
Case Else
MySheet = "unknown"
End Select
End Function
Выше по крайней мере пытается сделать какое-то определение того, что Application.Caller
перед его использованием, чтобы определить имя связанного объекта листа.
Вы можете прочитать больше в Application.Caller Property (Excel).
http://www.formulaoldies.com/uploads/2012/06/Lionel-Richie.jpg
MsgBox Me.Name
Это то, что вы хотите, если под "именем листа, где размещена функция" подразумевается модуль "Лист", в который помещается код функции. ( Документация).
Однако, если вы имеете в виду лист, содержащий ячейку, из которой вызывается пользовательская функция, вы можете использовать:
MsgBox Application.Caller.Parent.Name
Application.Caller
возвращает Range
объект, ссылающийся на ячейку; этот диапазон Parent
тогда лист.