整数相乘并赋值给 Long 时溢出

2024-02-04

如果我在立即窗口中输入以下内容,则会收到运行时错误“6”:溢出。

MsgBox 24 * 60 * 60

为什么是这样?

这也失败了:

Dim giveTime  As Long 
giveTime  = 24 * 60 * 60

为什么是这样?giveTime被声明为 Long 类型,因此 24 × 60 × 60 = 86400 应该很合适。


这是一个非常奇怪的 VBA 怪癖。我很惊讶我从来没有遇到过这个。

Dim x As Long
x = 24 * 60 * 60 ' Overflow
x = 32767 + 1 ' Overflow. 
x = 32768 + 1 ' Works fine!

所以看起来像* and +在前两个示例中,运算符返回一个 Integer。果然,在帮助文件中*运算符(类似于+操作员):

result = number1 * number2

[...]

数据类型为result通常与最精确的表达式相同。

默认情况下,您的文字 24、60 和 60 都是 Integer 类型,因此您的* (or +) 运算符返回一个 Integer,该整数会溢出,因为结果大于 32,767。

但是,上面第三个示例中的文字 32,768 默认为 Long 类型(因为它太大而无法成为 Integer),因此+返回一个长整型;没有溢出。

帮助文件还这么说:

如果 [...] 的数据类型result是一个整数variant超出其合法范围[...]然后result[...] 转换为 Long 变体。

Emphasis矿。现在,这条小规则听起来像是常识,任何人都会合理地假设它适用于您的情况。但你的数字是 Integer 类型,而不是 Variant/Integer,所以 VBA 不应用此规则!对我来说完全没有意义,但事实就是如此,文档也是这么说的。

解决方案:提出你的论点之一*运算符的类型比 Integer 更精确(例如 Long),问题就会消失。

x = CLng(24) * 60 * 60 ' Result is Long, works fine.

事实上,这可能就是为什么我从未遇到过这个怪癖的原因,我习惯将所有整数变量声明为 Long,除非特别担心使用 Long 而不是 Integers 会导致内存使用问题或执行时间(几乎从来没有这种情况)。当然,当您操作小于 32,768 的文字时,这不会有帮助,因为它们默认为整数类型。


你问在一条评论 https://stackoverflow.com/users/2523246/excel-cowboy-yeeha什么是变体/整数。变体基本上是任何其他数据类型的容器类型。在您使其包含整数的特定情况下:

Dim a As Variant ' a is now Empty
a = CInt(32767) ' a is now Variant/Integer
x = a + 1 ' works fine

但如上所述,普通的旧 Integer 会触发溢出错误:

Dim b As Integer
b = 32767
x = b + 1 ' overflow
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

整数相乘并赋值给 Long 时溢出 的相关文章

  • 如何刷新幻灯片放映中的活动幻灯片?

    基于我的最后一个问题 https stackoverflow com questions 14503054 change the image of an image shape我得到了正确的代码来更改形状的图像 不幸的是 这不会更新活动演示
  • Python:使用 python 运行 Excel 宏

    我需要通过 python 运行 Excel 宏 但总是收到以下错误 result self oleobj InvokeTypes dispid LCID wFlags retType argTypes args pywintypes com
  • Excel Q - 带有二维数组的 SUMIFS

    我有一个二维数组 水平轴上的日期和垂直轴上的标识号 我想要以特定日期和 ID 为条件的总和 并且我想知道如何使用 SUMIFS 来执行此操作 由于某种原因 我似乎不能 因为数组是二维的 而标准范围是一维的 谁能给我关于我可以使用的其他公式的
  • 当行数 = 0 时删除 Excel 列中的单元格

    我试图删除电子表格中某一列中的所有单元格 0 并 召唤 不在该列顶部的值 我目前正在使用 Dim row index As Integer Dim col index As Integer row index 7 col index 16
  • 更改索引设置访问 VBA

    我正在尝试自动化 Access 中的流程 我希望自动化的步骤之一是更改表中某些字段的索引设置 我需要这样做来提高后续查询的速度 使用索引查询速度大约快 100 倍 无论如何 假设我的表名为 Cars 如下所示 ID Name Charact
  • 如何粘贴到Excel B列的最后一行?

    我需要将单元格从 H2 L2 一直向下剪切并将其粘贴到 B 列的最后一行 数据每次都会不同 所以我无法对任何范围进行硬编码 VBA 代码会很好 从 H2 L2 向下剪切并粘贴 插入到 B 列的最后一行 到目前为止我得到了 Range H2
  • 报告文字颠倒?

    由于特定原因 我需要能够在报告的下半部分颠倒 倒置 显示一些值 这份报告的目的是打印并从中间折叠起来 所以我希望它遵循这种特定的格式 我找不到任何可以轻松做到这一点的东西 我考虑过但不知道如何实施的一些想法 导入 颠倒字体并将控件的字体设置
  • 如何在 MS Word 中的每个标题末尾应用宏?

    我有一个包含各种标题的文档 因此不一定是标题 1 或标题 2 而是所有类型的标题 我想做的是编写一个宏 例如 删除每个标题末尾的 2 个空格 例如 我们有 这是一个标题 在标题的最后 我会这样做 Selection Delete Unit
  • 复制列中的所有单元格[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一张表 有 200 行 行间有一
  • schema.ini 文件不适用于 MS Access

    我有一堆 csv 文件 我通过 VBA 将它们导入到 Access 中的表中 我在与导入的 csv 文件相同的目录中还有一个 schema ini 文件 尽管在 ini 文件中字段被指定为双精度类型 但它们在 Access 中会转换为文本类
  • 将所有工作簿工作表复制到新工作簿 VBA

    我正在使用此代码将工作簿中的每张工作表复制到新工作簿中 它工作正常 但它颠倒了工作表的顺序 是否有办法阻止它这样做 Sub copy copies all the sheets of the open workbook to a new o
  • IE.navigate2 因保护模式关闭而失败

    我正在从 Excel VBA 自动化 IE8 Excel 2010 Windows 7 Set IE CreateObject InternetExplorer Application IE Navigate2 URL 如果 URL 是处于
  • 在 VBA 中使用 getElementsByClassName

    我正在使用此代码从页面获取产品名称 页面代码是 div class product shop col sm 7 div class product name h1 Claro Glass 1 5 L Rectangular Air Tigh
  • 由于直接引用范围而不是通过中间变量而导致 Excel VBA 运行时错误 450

    当我尝试直接引用某个范围内的值时 出现运行时错误 450 但如果我使用中间变量 它就会起作用 我不明白为什么 所以我担心在将来的某个时候我会再次遇到错误而不知道为什么 我尝试过使用 With End With 块 但当我直接引用范围时它仍然
  • MS Access 中的舍入

    VBA Access 中舍入的最佳方法是什么 我目前的方法是利用Excel方法 Excel WorksheetFunction Round 但我正在寻找一种不依赖Excel的方法 请注意 VBA Round 函数使用 Banker 舍入 将
  • OpenArgs 为空问题

    我正在使用OpenArgs使用时发送值的参数DoCmd OpenForm DoCmd OpenForm frmSetOther acNormal acFormAdd acDialog value 然后我用Me OpenArgs在打开的表格内
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • MS Access - 粘贴确认事件后

    当用户将记录直接粘贴到数据表子报表中时 是否可以在显示粘贴确认消息后捕获事件 我需要它能够在审计表中创建新记录时进行记录 通过捕获更新前 更新后和插入事件 我可以轻松创建已添加的记录集合 准备将详细信息插入审核日志 但是在所有这些事件触发后
  • 无法摆脱脚本中的硬编码延迟

    我用 vba 结合 selenium 编写了一个脚本来解析网页中可用的所有公司名称 该网页启用了延迟加载方法 因此每个滚动中只有 20 个链接可见 如果我滚动 2 次 则可见链接数为 40 个 依此类推 该网页中有 1000 个可用链接 我
  • 当使用公式生成超链接时,VBA 打开 Excel 超链接不起作用

    使用公式生成的 Excel 超链接似乎存在错误 我使用的是 Excel 2010 我有一个电子表格 其中的单元格包含 URL 我的目标是执行以下两件事 将这些单元格变成超链接 创建一个键盘快捷键来打开这些超链接 这样我就不必使用鼠标了 为了

随机推荐

  • 如何禁用 freedrawfabricjs 选择

    在 FabricJs 中使用 FreeDrawing 绘制某些内容后 您可以选择绘制的内容并移动它 有没有办法禁用此选择 如果您不需要在画布上进行任何交互 您可以使用静态画布 var canvas this canvas new fabri
  • Froala WYSIWYG 编辑器未显示 React 中的所有工具栏按钮

    工具栏按钮未显示在由 facebook create react app 创建的 React 应用程序中 我尝试在 src index tsx 中或在使用组件之前导入 JS 和 CSS 文件 我还尝试导入单独的插件 他们都没有工作 Froa
  • 在php中识别服务器端的浏览器

    我有一个网站 当用户单击特定页面 例如identify php 时 我想找到客户端正在使用的浏览器类型 浏览器可以是 mozilla IE opera chrome 或任何其他移动设备 例如 SonyEricssonK610i SAMSUN
  • 如何解决 AspNet Core 缺少依赖项的问题?

    因此 我对 project json 进行了更改 这导致了重新恢复 从而产生了一堆无法解析的依赖项 你怎么知道这里发生了什么 这绝对有效 因为我针对这个 project json 文件编写了大量代码 dependencies EntityF
  • urllib3 支持 HTTP/2 请求吗?会吗?

    我对各种 python HTTP 库了解如下 Requests https docs python requests org en latest does 不支持HTTP 2请求 https stackoverflow com q 4493
  • javaquartz调度程序立即启动一个新作业

    是否可以创建一个立即触发的作业 当我希望现在触发该作业时 我使用当前日期和时间构建了一个 cron 表达式字符串 我认为它太复杂了 是否有另一种方法可以立即触发该作业 提前致谢 是的 使用下面的Trigger立即解雇你的工作 而不是等待 C
  • “int* ptr = int()”值初始化如何不非法?

    以下代码 取自从这里 https stackoverflow com questions 8067568 how do i value initialize a type pointer using type like syntax 806
  • Spring Batch - “job”作用域 bean 不能注入到“job”或“step”作用域 bean

    我正在使用 Spring Batch 版本 3 0 2 RELEASE 和 Spring Framework 版本 3 2 12 RELEASE 我正在尝试将一个工作范围的 bean 注入到另一个工作范围的 bean 中 我的配置看起来像这
  • 如何使用 x-www-form-urlencoded 正文发送 post 请求

    在java中 我可以如何发送请求x www form urlencoded header 我不明白如何发送带有键值的正文 如上面的屏幕截图所示 我试过这段代码 String urlParameters cafedra name data t
  • 比较属性集以找到最佳匹配

    似乎有类似的问题 但又不完全是 我尝试走这条路 比较数据集并返回最佳匹配 https stackoverflow com questions 1370565 compare data sets and return best match 但
  • Mongoose:findOneAndUpdate 不返回更新的文档

    下面是我的代码 var mongoose require mongoose mongoose connect mongodb localhost test var Cat mongoose model Cat name String age
  • JavaScript 全局变量的生命周期

    我在 w3schools 上阅读了以下内容 但我不明白第二部分的含义 全局变量 对于加载到同一窗口中的新页面仍然可用 任何人都可以启发我吗 在 Web 浏览器中 当您关闭浏览器窗口 或选项卡 时 全局变量将被删除 但对于加载到同一窗口中的新
  • 如何插入多行 - 需要循环吗?

    我有以下声明 insert into forecast entry user role xref user master id role id created date created by values 276 user master i
  • 获取 Mailgun 中打开或单击的电子邮件的主题

    我已设置 Mailgun 域来跟踪我发送的电子邮件的打开和点击情况Laravel https laravel com docs 5 7 mail introduction app 现在我想设置webhooks https documenta
  • 使 Pydantic BaseModel 字段可选,包括 PATCH 的子模型

    正如已经问过的similar有疑问 我要支持PATCHFastApi 应用程序的操作 调用者可以根据需要指定 Pydantic 的任意数量的字段BaseModel 有子模型 这样高效PATCH可以执行操作 而调用者不必仅仅为了更新两个或三个
  • 注销后销毁握手。套接字.io

    您好 我正在尝试将聊天构建到应用程序中 我想知道的是 当用户注销网站时 我如何销毁与该会话关联的 socket io 握手 以便用户在注销时无法从另一个选项卡发送消息 我正在使用expressjs 如果有帮助的话 好吧 万一有人发现这个并想
  • 查找父节点所选文本的范围

    我想找到所选文本相对于父元素的范围 所以在这个 p 元素 即anchorOffset focusOffset 狐狸 是 16 19 p p The quick brown fox jumps over the lazy dog p 但如果我
  • 在保护模式下重新启动

    在 x86 实模式下重启非常简单 您可以使用 BIOS 或 jmp 0xFFFF 0000 但是在保护模式下应该如何重新启动呢 有关端口 0xCF9 的信息 为了写入它 需要访问内核模式 即来自内核驱动程序 0xCF9端口可以获得三种复位类
  • 使用 about:config 覆盖 Firefox 不安全警告

    我正在尝试编写一个简单的批处理脚本来截取内部网页的一些屏幕截图 并发现 Firefox 具有将窗口渲染到画布的能力 var canvas document createElement canvas var ctx canvas getCon
  • 整数相乘并赋值给 Long 时溢出

    如果我在立即窗口中输入以下内容 则会收到运行时错误 6 溢出 MsgBox 24 60 60 为什么是这样 这也失败了 Dim giveTime As Long giveTime 24 60 60 为什么是这样 giveTime被声明为 L