我在 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 2016 VBA - 从 Excel 2013 升级的问题
在所有工作表中自动打开Excel文件到单元格A1(使用VBA)