Автоматическое изменение размера ячейки после возврата функции

Автоматическое изменение размера ячейки после возврата функции

У меня есть xla с кучей функций. По сути, каждая из этих функций выполняет вертикальный поиск на другом рабочем листе. Вот простой пример одной из них:

Function ax2Project_Address(projectnumber)
If (projectnumber = "?") Then
    ax2Project_Address = "Unknown address"
Else
    ax2Project_Address = Application.VLookup(projectnumber, Sheets("AX Data").Range("A:K"), 11, False)
End Function

Это позволяет пользователям просто вызывать функцию с номером проекта на рабочем листе, и она выдает им адрес, без необходимости самостоятельно писать вертикальный поиск.
Сейчас я хочу, чтобы строка текущей ячейки автоматически подгоняла высоту под свое содержимое. Проблема в том, что это, очевидно, должно быть сделано после того, как ячейка будет заполнена адресом, но поскольку функция завершается после возврата, команда автоматического подбора не будет выполнена.

Есть ли способ выполнить команду autofit в функции после return?
Или есть совершенно другой подход, который я мог бы использовать?

решение1

Функции не могут ничего изменить в Excel, кроме ячейки, в которой они вызваны. При этом я почти уверен, что функция может запустить процедуру -

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
MsgBox ("hi")
End Sub

eieio(12) = 6 и msgbox "привет"

При этом, что выне мочьсделать что-то вроде этого -

Option Explicit

Public Function eieio(numb As Long) As Long
    eieio = Int(numb / 2)
    Test
End Function


Sub Test()
Dim str As String
str = Application.Caller.Address
Dim rng As Range
Set rng = Range(str)
MsgBox (rng.Address)
rng.EntireRow.AutoFit
End Sub

Так что рутина не может изменить application.caller, насколько я знаю. Так было всегда.

решение2

Если вы не хотите автоматически подгонять весь лист, используйте это в модуле кода рабочего листа:

Private Sub Worksheet_Calculate()
    Dim a As Range
    For Each a In Me.UsedRange
        If a.Formula Like "=ax2Project_Address(*" Then a.EntireRow.AutoFit
    Next a

End Sub

Связанный контент