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