【问题标题】:Finding the volume of a tank in VBA given the radius, height, and depth在给定半径、高度和深度的情况下,在 VBA 中找到罐的体积
【发布时间】:2020-09-25 02:04:49
【问题描述】:

我无法为 Excel VBA 课程找到罐的体积;我要做一个VBA函数,我输入坦克的半径、高度和深度,并接收体积。这是一张图片,便于理解:

这是我目前拥有的代码,课程告诉我这是不正确的:

    Option Explicit

Function tank(R As Double, d As Double, H As Double) As Double

Dim pi As Double

pi = Application.WorksheetFunction.pi()

If d <= R Then

tank = pi * d ^ 2 / 3 * (3 * R - d)

ElseIf R < d And d <= H - R Then

tank = 2 / 3 * pi * R ^ 3 + pi * R ^ 2 * (d - R)

ElseIf H - R < d And d <= H Then

tank = 4 / 3 * pi * R ^ 3 + pi * R ^ 2 * (H - 2 * R) - pi * (H - d) ^ 2 / 3 * (3 * R - H + d)

End If

End Function

谁能帮我解决这个问题? (我使用的是课程讲师提供的宏,它不会告诉我哪里出了问题,而是告诉我是错还是正确。)

【问题讨论】:

  • 你的问题是什么?我会在你的 if 语句中切换 Vfor tank
  • 问题是在VBA中,H - R &lt; d &lt;= H这样的语句是无效的。您必须将其分成两个单独的比较:例如ElseIf H - R &lt; d And d &lt;= H Then。您应该能够将相同的更改应用于您的其他类似语句。
  • 我们需要一些 R/D/H 值和预期结果。 3条腿中哪条失败了?全部?
  • 这样做的方法是在 Excel 公式中实现 3 个计算(或拿一个计算器),给每个输入一些 rdh,看看是什么预期输出是,然后将函数的输出与相同的输入进行比较。
  • 你的函数的参数顺序是否错误?您的作业需要Tank(R, H, d),而您将其写为Tank(R, d, H)。参数的顺序会完全改变结果。

标签: excel vba function


【解决方案1】:

正如 dwirony 在 cmets 中回答的那样,我的任务是 tank(R,H,d),而我的功能是 tank(R,d,H),它改变了结果。感谢所有提供帮助的人,该功能现在可以使用。这是工作代码:

Option Explicit

Function tank(R As Double, H As Double, d As Double) As Double

Dim pi As Double

pi = Application.WorksheetFunction.pi()

If d <= R Then

tank = pi * d ^ 2 / 3 * (3 * R - d)

ElseIf R < d And d <= H - R Then

tank = 2 / 3 * pi * R ^ 3 + pi * R ^ 2 * (d - R)

ElseIf H - R < d And d <= H Then

tank = 4 / 3 * pi * R ^ 3 + pi * R ^ 2 * (H - 2 * R) - pi * (H - d) ^ 2 / 3 * (3 * R - H + d)

End If

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 1970-01-01
    • 2021-09-15
    • 2020-01-20
    • 2012-12-15
    • 2016-01-03
    • 1970-01-01
    相关资源
    最近更新 更多