Требуется ошибка объекта 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).

Это Me ты ищешь?

http://www.formulaoldies.com/uploads/2012/06/Lionel-Richie.jpg

MsgBox Me.Name

Это то, что вы хотите, если под "именем листа, где размещена функция" подразумевается модуль "Лист", в который помещается код функции. ( Документация).

Однако, если вы имеете в виду лист, содержащий ячейку, из которой вызывается пользовательская функция, вы можете использовать:

MsgBox Application.Caller.Parent.Name

Application.Caller возвращает Range объект, ссылающийся на ячейку; этот диапазон Parent тогда лист.

Другие вопросы по тегам