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”

结果:溢出

知道为什么其中一些工作正常吗?有些不是?

【问题讨论】:

您返回的是Longretval 需要适合 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 变体溢出的主要内容,如果未能解决你的问题,请参考以下文章

excel用vba时出现运行错误6-溢出,请帮忙看下我的程序是否有问题

在 VBA 中睡觉(整数溢出!!)

访问 VBA。检测记录集条目是不是会溢出

VBA 中涉及两个整数和一个长整数的溢出错误

Access VBA中的DMin函数溢出错误

使用 WshShell 从 VBA 运行 .NET 应用程序时出现溢出错误