SpecialCell(xlCellTypeLastCell)在Excel中的自定义函数中不起作用

下面的自定义函数与另一个单元格的引用单元格中input不起作用。 我不懂为什么。 有人知道答案吗?

Public Function SpecialCellBroken(rng As Range) Debug.Print rng.Worksheet.Cells.Address Debug.Print rng.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Address SpecialCellBroken = rng.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Address End Function 

在debugging窗口中返回:

 $1:$1048576 $1:$1048576 

但是,下面的Sub工作正常,并返回最后一个单元格的地址:

 Sub SpecialCellWorksFine() Debug.Print Selection.Worksheet.Cells.Address Debug.Print Selection.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Address Selection.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Select End Sub 

在debugging窗口中返回:

 $1:$1048576 $J$21 

同时从Parent范围引用到工作表不起作用。 尝试ByVal参数rng 。 也没有效果更好。 任何build议这里有什么问题? 谢谢。

.SpecialCells(xlCellTypeLastCell)不能在UDF中工作,因为UDF不能与Excel(或当时使用的程序)交互。 你可以做的是:

 Sub SpecialCellWorksFine() x = Selection.Worksheet.Cells.SpecialCells(xlCellTypeLastCell).Address(False, False) n = y(x) End Sub Public Function y(x As String) 'Code goes here End Function 

这已经被简化了,但是主体是一样的,你你调用它之前给你的UDF分配什么值,然后把你想要的UDF(我相信这个限制是30)