vba - SpecialCells(xlCellTypeLastCell) 不适用于 Excel 中的自定义函数

标签 vba excel

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

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 从范围引用工作表也不起作用。 在参数 rng 上尝试了 ByVal。也没有效果好转。 有什么建议吗?这里有什么问题?谢谢。

最佳答案

.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 的值,然后将您想要的值拉入 UDF(我的限制相信是 30)

关于vba - SpecialCells(xlCellTypeLastCell) 不适用于 Excel 中的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42904376/

相关文章:

excel - 如何将多个 Range 对象合并为一个,用作图表源

Excel公式翻译(多语言系统)

excel - 函数 vs 子(ByRef)

c# - Range[] 而不是 get_Range()

database - 在 Access 报告的文本框中组合字段,有些为空

excel - 运行时错误 1004 : Clearing cell next to dropdown list

c# - 通过 Microsoft HPC 上的 Com-interop C# API 打开 excel 文件

excel - 如何用VBA编写方程

SQL 比较 Access 中保存的日期与今天的日期不起作用

excel - 如何将日期作为变量放入 VBA 的公式中?