Automatische Größenanpassung der Zelle nach Rückgabe der Funktion

Automatische Größenanpassung der Zelle nach Rückgabe der Funktion

Ich habe ein XLA mit einer Reihe von Funktionen. Im Grunde führt jede dieser Funktionen eine vertikale Suche in einem anderen Arbeitsblatt durch. Hier ist ein einfaches Beispiel für eine davon:

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

Dadurch können Benutzer die Funktion einfach mit der Projektnummer auf dem Arbeitsblatt aufrufen und erhalten die Adresse, ohne die vertikale Suche selbst schreiben zu müssen.
Was ich jetzt tun möchte, ist, die Höhe der Zeile der aktuellen Zelle automatisch an ihren Inhalt anzupassen. Das Problem ist, dass dies offensichtlich erfolgen sollte, nachdem die Zelle mit der Adresse gefüllt wurde, aber da die Funktion nach der Rückgabe endet, wird der Autofit-Befehl nicht ausgeführt.

Gibt es eine Möglichkeit, den Autofit-Befehl nach der Rückgabe in einer Funktion auszuführen?
Oder gibt es einen völlig anderen Ansatz, den ich verwenden könnte?

Antwort1

Funktionen können in Excel nichts ändern, außer die Zelle, in der sie aufgerufen werden. Davon abgesehen bin ich ziemlich sicher, dass eine Funktion eine Routine auslösen kann -

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 und msgbox "hi"

Das heißt, was Siekippentun, ist so etwas wie dies -

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

Die Routine kann also den application.caller nicht ändern, soweit ich weiß. Das war schon immer so.

Antwort2

Wenn Sie nicht das gesamte Blatt automatisch anpassen möchten, verwenden Sie Folgendes im Arbeitsblatt-Codemodul:

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

verwandte Informationen