Eu tenho um xla com várias funções. Basicamente, cada uma dessas funções realiza 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 ela forneça o endereço, sem ter que escrever eles próprios a pesquisa vertical.
O que eu quero fazer agora é que a linha da célula atual ajuste automaticamente sua altura ao seu conteúdo. O problema é que isso obviamente deve ser feito após o preenchimento da célula 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 existe uma abordagem completamente diferente que eu poderia usar?
Responder1
As funções não podem mudar nada no Excel, exceto a célula em que são chamadas. Dito isto, 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 "oi"
Dito isto, o que vocênão podefazer é 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
Portanto, a rotina não pode alterar o application.caller, até onde eu sei. Sempre foi assim.
Responder2
Se você não quiser ajustar automaticamente a planilha inteira, use isto no módulo de código da 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