VBA 变体溢出
Posted
技术标签:
【中文标题】VBA 变体溢出【英文标题】:VBA Variant Overflow 【发布时间】:2017-12-18 22:08:43 【问题描述】:我正在运行我在网上找到的以下功能
Function ConvertStringToNumber(str As Variant) As Long
Dim retval As Variant
Dim i As Integer
retval = ""
For i = 1 To Len(str)
If Mid(str, i, 1) >= "0" And Mid(str, i, 1) <= "9" Then
retval = retval + Mid(str, i, 1)
End If
Next
ConvertStringToNumber = retval '''''''''ERROR HERE
End Function
我收到了错误Run-time error '6': Over Flow
,根据我在网上找到的信息,这与我的系统资源有关
这些是我尝试过的输入:
“3aaab 23as454s24h23423ad”
结果:溢出
“3aaab 23as454s24hhhhhhhhhhhhhhhhhhhhd”
结果:32345424
"^&asdasd^&sdasd^&^6776**^*&^asdasd"
结果:6776
“5asdasd 7 h4gregw56u 5 45j2dfg dfgdj46 n5k42n2”
结果:溢出
知道为什么其中一些工作正常吗?有些不是?
【问题讨论】:
您返回的是Long
。 retval
需要适合 Long
。它被声明为As Variant
是无用的,无论它的值如何,它都需要适合Long
。整数值不能大于2^31-1
。
【参考方案1】:
您正在为Long
变量分配一个数字。根据the documentation 一个Long
可以接受最多2,147,483,647
的任何数字。
因此,如果您尝试分配数字3,234,542,423,423
(即从"3aaab 23as454s24h23423ad"
中取出非数字字符后的数字)或574,565,452,465,422
(即取出非数字后的数字),则会出现溢出"5asdasd 7 h4gregw56u 5 45j2dfg dfgdj46 n5k42n2"
) 中的字符。
【讨论】:
同意。如果您当前没有编辑添加这个:),请您提及产生长数字的skip-alpha吗?我认为这也是答案的重要组成部分。以上是关于VBA 变体溢出的主要内容,如果未能解决你的问题,请参考以下文章