【问题标题】:Getting "Invalid procedure call or statement" when using VBA Round function in excel在 Excel 中使用 VBA Round 函数时出现“无效的过程调用或语句”
【发布时间】:2020-04-08 23:05:33
【问题描述】:

我正在为我的销售团队设置定价工具,我的老板希望在我将值从美元转换为另一种货币后,将值四舍五入到最接近的千位(即 1000)。我使用下面的第一行代码将单元格的格式设置为 GBP(英镑),然后使用第二行代码将该单元格中的当前金额(即 .value)与我的货币换算相乘在单元格 4,11 中。

当前有效的代码,但给出了非四舍五入的结果(4,235 英镑):

Cells(arr(rowcnt), ChkCol5).NumberFormat = "[$£-en-GB]#,##0"

Cells(arr(rowcnt), ChkCol5).Value = Cells(arr(rowcnt), ChkCol5).Value * Cells(4, 11)

当我将“round”函数添加到第 2 行时,我得到一个

“运行时错误 5:无效的过程调用或语句。”

Cells(arr(rowcnt), ChkCol5).Value = **Round**(Cells(arr(rowcnt), ChkCol5).Value * Cells(4, 11)**, -3)**

当我使用 3 而不是 -3 时,它不会出错,但似乎也没有做任何事情。当然,我的价值观都是整数,所以这可能就是原因。但奇怪的是,我在使用 3 时没有得到错误舍入,但使用 -3 时会出现错误。

有什么想法吗??

谢谢!

【问题讨论】:

  • 与工作表函数 ROUND 不同,VBA Round 函数不接受负数作为第二个参数。因此,您的错误。
  • 非常感谢。这解决了我的问题!你太棒了!

标签: excel vba


【解决方案1】:

你需要在这里使用WorksheetFunction.Round

Round 函数文档中关于原因的注释:

numdecimalplaces:表示小数点右侧的位数包含在四舍五入中。如果省略,则 Round 函数返回整数。

所以负数不是有效的第二个参数。

同样值得注意:

此 VBA 函数返回通常称为银行四舍五入的内容。所以在使用这个功能之前要小心。要获得更可预测的结果,请使用 Excel VBA 中的 Worksheet Round 函数。

【讨论】:

  • 非常感谢。这解决了我的问题!你太棒了!
【解决方案2】:

我更新了我的代码行以使用 worksheet.round 函数,它现在可以工作了。感谢 BigBen 和 Ron Rosenfeld 的帮助。

Cells(arr(rowcnt), ChkCol5).Value = WorksheetFunction.Round(Cells(arr(rowcnt), ChkCol5).Value * Cells(4, 11), -3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多