【问题标题】:VBA (Ms-Access) 2013 Overflow errorsVBA (Ms-Access) 2013 溢出错误
【发布时间】:2017-07-06 00:35:17
【问题描述】:

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

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

我已经阅读了其他线程,它解释了如果表达式中的任何术语对于产品来说太小,VBA 可能会给出溢出错误,但我看不出这在这个示例中是如何应用的。谁能解释一下?

【问题讨论】:

  • 你算过吗?您是否检查过文档以查看 VBA 中的有效值(下限和上限)是什么?我想你会发现溢出是正确的。 (提示:IP 地址介于 0 到 255 之间是有原因的。)
  • @RacilHilan:这可能是个好主意。我现在清理我的。很抱歉让你失望了。下次吧。 :-)
  • 如果您在 64 位 Access 上运行并且不需要与 32 位 Access 兼容,则可以使用 LongLong 变量类型。它与更大的数字兼容。
  • 是的,我做过 RTFM。 Integer 变量可以介于 -2,147,483,648 和 2,147,483,647 之间,Long 变量可以是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。所以这不是问题

标签: ms-access vba


【解决方案1】:

在 VBA 中,Long 变量可以存储介于 -2,147,483,648 和 2,147,483,647 之间的值。你的计算结果大于最大值,所以溢出了:

256 * 256 * 256 * 256 = 4,294,967,296

【讨论】:

  • 是的,我做过 RTFM。 Integer 变量可以介于 -2,147,483,648 和 2,147,483,647 之间,Long 变量可以是 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。所以这不是问题。
  • 您从哪里读到 VBA 中的 Long 可以这么大?据我所知,没有一种编程语言可以为 Long 类型提供如此大的存储空间。这是完全不正确的。这是official Microsoft page for data types in Access
  • 您不了解许多编程语言。见docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/…。但这确实为我指明了答案。看起来VBA数据类型与Visual Basic数据类型不同,VBA Long数据类型和Visual Basic Integer数据类型一样是4个字节,而VBA Integer数据类型只有2个字节。我通过使用 Double 数据类型解决了我的问题。
  • 是的,当然,我不知道很多,这取决于很多的定义。我知道大约 20 个,其中包括 VB(经典和 .Net)和 VBA :-)。我的上一条评论有一个错字,缺少“旧”一词,因此“没有旧的编程语言”,因为 VBA 是一种旧语言,变化不大,仍在 MS Office 中使用。您评论中的链接适用于 VB.Net,而不是 VBA。是的,它们是完全不同的语言(它们具有相似的语法)。有很大的不同,不仅是数据类型。我给你的链接是针对 VBA 数据类型的。
  • 使用Double 可以,但要小心使用它的方式。它是一个浮点类型,这意味着它是近似的,所以如果你将它与一些操作一起使用,你会得到错误的结果。您可以尝试改用Decima。像Long一样是一个定点和准确的。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多