Tamaño automático de celda después del retorno de la función

Tamaño automático de celda después del retorno de la función

Tengo un xla con un montón de funciones. Básicamente, cada una de estas funciones realiza una búsqueda vertical en otra hoja de trabajo. Aquí hay un ejemplo básico de uno de ellos:

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

Esto permite a los usuarios simplemente llamar a la función con el número de proyecto en la hoja de trabajo y les proporciona la dirección, sin tener que escribir ellos mismos la búsqueda vertical.
Lo que quiero hacer ahora es que la fila de la celda actual ajuste automáticamente su altura a su contenido. El problema es que esto obviamente debe hacerse después de que la celda se haya llenado con la dirección, pero como la función finaliza después del retorno, el comando autofit no se ejecutará.

¿Hay alguna forma de ejecutar el comando de ajuste automático en una función después del retorno?
¿O hay un enfoque completamente diferente que podría utilizar?

Respuesta1

Las funciones no pueden cambiar nada en Excel excepto la celda a la que se llama. Dicho esto, estoy bastante seguro de que una función puede desencadenar una rutina.

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 y msgbox "hola"

Dicho esto, lo que ustedno poderhacer es algo como esto -

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

Entonces, hasta donde yo sé, la rutina no puede cambiar la aplicación.llamadora. Siempre ha sido así.

Respuesta2

Si no desea ajustar automáticamente toda la hoja, use esto en el módulo de código de la hoja de trabajo:

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

información relacionada