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

时间:2017-03-20 13:05:04

标签: excel vba excel-vba

以下自定义函数在单元格中输入并引用另一个单元格不起作用。我不懂为什么。有人知道答案吗?

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

在调试窗口中返回:

$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

在调试窗口中返回:

$1:$1048576
$J$21

使用Parent从范围到工作表的引用也不起作用。 在参数ByVal上尝试rng。也没有效果更好。 有什么建议在这里有什么问题吗?谢谢。

1 个答案:

答案 0 :(得分:1)

.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)