我在 Excel VBA 中使用“InBetween”UDF,它适用于 43 行,然后停止工作

Posted

技术标签:

【中文标题】我在 Excel VBA 中使用“InBetween”UDF,它适用于 43 行,然后停止工作【英文标题】:I'm using an "InBetween" UDF in Excel VBA and it works for 43 rows, then stops working 【发布时间】:2019-11-01 21:34:32 【问题描述】:

使用这个VBA User Defined Function 会产生一个介于给定参数编号集之间的数字列表。它一直有效,直到第 43 行中的参数编号大于 29,999。 这是 UDF 代码:

Function InBetween(MyFirst As Integer, MyLast As Integer)
Dim foo As String
Dim i As Long
foo = MyFirst + 1
For i = MyFirst + 2 To MyLast - 1
    foo = foo & "," & i
Next i
InBetween = foo
End Function

我使用创建的 =InBetween 公式返回参数编号之间的所有数字。我还使用连接函数将参数编号包含在列表中。所有 A 列和 B 列的格式都相同。

【问题讨论】:

整数数据类型最多只能容纳 32767。将您的 MyFirst/MyLast 更改为 Long 此外,使用Integer 代替Long 没有任何优势 - Excel 为Long 分配所有内存,但如果您将其声明为Integer 【参考方案1】:

正如 cmets 中所述,使用 Integer 变量没有任何意义。它们很容易溢出,因为它们不能容纳那么大的数字。而是使用Long 数据类型。

最重要的是,您可能希望按照以下方式重写您的Function

Function InBetween(MyFirst As Long, MyLast As Long) As String
    InBetween = Join(Application.Evaluate("TRANSPOSE(Row(" & MyFirst & ":" & MyLast & "))"), ",")
End Function

最高可达 1048576(至少在 Excel 2019 中)

【讨论】:

以上是关于我在 Excel VBA 中使用“InBetween”UDF,它适用于 43 行,然后停止工作的主要内容,如果未能解决你的问题,请参考以下文章

使用 Excel VBA 自动合并邮件

Excel 2016 VBA - 从 Excel 2013 升级的问题

在所有工作表中自动打开Excel文件到单元格A1(使用VBA)

下标超出范围 - 使用Excel VBA查找下一个

无法在 Excel 2007 VBA 中使用 Option Strict Off 进行后期绑定

防止 Word VBA 中的 Excel 提示