我有一个带有一堆函数的 xla。基本上,这些函数中的每一个都在另一个工作表上执行垂直查找。以下是其中一个的基本示例:
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
这样,用户只需使用工作表上的项目编号调用该函数,它就会向他们提供地址,而无需自己编写垂直查找。
我现在想做的是让当前单元格的行自动调整其高度以适应其内容。问题是,这显然应该在单元格填满地址后完成,但由于函数在返回后结束,因此不会执行自动调整命令。
有没有办法在返回后在函数中执行 autofit 命令?
或者我可以使用完全不同的方法吗?
答案1
函数无法改变 Excel 中的任何东西,除了调用它的单元格。话虽如此,我很确定函数可以触发例程 -
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 和 msgbox "hi"
话虽如此,你不能做的是这样的 -
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
因此,据我所知,例程无法更改 application.caller。一直都是这样。
答案2
如果您不想自动调整整个工作表,请在工作表代码模块中使用它:
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