Ms access VBA(Ms Access)2013溢出错误

Ms access VBA(Ms Access)2013溢出错误,ms-access,vba,Ms Access,Vba,我正在构建一组VBA函数来操作MS Access数据库中的IP地址字符串,每当IP地址值超过整数变量的大小时,我就会遇到溢出错误问题。我试图确保我只使用长类型,但仍然会出现这些错误。这里有一个非常简单的演示,它失败了,出现了溢出,我不知道为什么 Public Function BigNumber() As Long Dim N256 As Long N256 = 256 BigNumber = N256 * N256 * N256 * N256 End Function 我读过另一篇文章,其中

我正在构建一组VBA函数来操作MS Access数据库中的IP地址字符串,每当IP地址值超过整数变量的大小时,我就会遇到溢出错误问题。我试图确保我只使用长类型,但仍然会出现这些错误。这里有一个非常简单的演示,它失败了,出现了溢出,我不知道为什么

Public Function BigNumber() As Long
Dim N256 As Long
N256 = 256
BigNumber = N256 * N256 * N256 * N256
End Function

我读过另一篇文章,其中解释了如果表达式中的任何项对于产品来说太小,VBA可能会产生溢出错误,但我看不出这在本例中是如何应用的。有人能解释吗?

在VBA中,长变量可以存储-2147483648到2147483647之间的值。计算结果大于最大值,因此溢出:

256*256*256*256=4294967296


你算过了吗?您是否查看了文档以了解VBA中长时间的有效值(下限值和上限值)是多少?我想你会发现溢出是正确的。(提示:IP地址介于0和255之间是有原因的。)@RacilHilan:这可能是个好主意。我现在就把我的清理干净。对不起,让你失望了。也许下次吧。:-)如果您运行的是64位访问,并且不需要与32位访问兼容,则可以使用
LongLong
变量类型。它与更大的数字兼容。是的,我做了RTFM。整数变量可以介于-2147483648和2147483647之间,长变量可以介于-9223372036854775808到9223372036854775807之间。所以那不是我的眼睛,我做了RTFM。整数变量可以介于-2147483648和2147483647之间,长变量可以介于-9223372036854775808到9223372036854775807之间。所以这不是问题所在。你在哪里读到过VBA中的Long可以这么大?据我所知,没有一种编程语言能够为长类型提供如此大的存储空间。这是完全错误的。这里有一个例子,你不知道很多编程语言。看见但这确实让我找到了答案。VBA数据类型似乎与Visual Basic数据类型不同,VBA Long数据类型与Visual Basic Integer数据类型一样为4字节,而VBA Integer数据类型仅为2字节。我使用双数据类型解决了我的问题。是的,当然,我不知道有多少,这取决于许多的定义。我知道大约20个,其中有VB(经典和.Net)和VBA:-)。我上一次的评论有一个拼写错误,缺少了“old”一词,因此“没有旧的编程语言”,因为VBA是一种旧语言,没有太大变化,仍然在MS Office中使用。评论中的链接是针对VB.Net的,而不是针对VBA的。是的,它们是完全不同的语言(它们有相似的语法)。这是一个巨大的差异,不仅仅是数据类型。我给你的链接是针对VBA数据类型的。使用
Double
可以,但要小心使用。它是一种浮点类型,这意味着它是近似值,因此如果在某些操作中使用它,将得到错误的结果。您可以尝试改用
Decima
。它是一个固定点,与
Long
一样精确。