Célula Autosize após o retorno da função

0

Eu tenho um xla com várias funções. Basicamente, cada uma dessas funções executa uma pesquisa vertical em outra planilha. Aqui está um exemplo básico de um deles:

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

Isso permite que os usuários simplesmente chamem a função com o número do projeto na planilha e forneçam o endereço, sem ter que escrever a pesquisa vertical em si.
O que eu quero fazer agora é ter a linha da célula atual para autofit sua altura para o seu conteúdo. O problema é que isso obviamente deve ser feito depois que a célula foi preenchida com o endereço, mas como a função termina após o retorno, o comando autofit não será executado.

Existe uma maneira de executar o comando autofit em uma função após o retorno?
Ou há uma abordagem completamente diferente que eu poderia usar?

    
por Nils Tiebos 27.01.2016 / 11:20

2 respostas

0

As funções não podem alterar nada no excel, exceto na célula em que ele é chamado. Dito isso, tenho certeza de que uma função pode acionar uma rotina -

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

Dito isto, o que você não pode fazer é algo assim -

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

Assim, a rotina não pode alterar o application.caller, tanto quanto eu sei. Sempre foi assim.

    
por 27.01.2016 / 18:43
0

Se você não quiser autofit a planilha inteira, use isso no módulo de código de planilha:

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
    
por 27.01.2016 / 19:57