【问题标题】:VBA - Sub that calls functions that call other fucntionsVBA - 调用调用其他函数的函数的子
【发布时间】:2017-09-09 15:39:57
【问题描述】:

我学习一点 VBA 已经有几年了,我肯定生疏了。

我试图在一个 Sub 中定义变量,然后从那个 Sub 调用各种函数,其中一些函数会调用其他函数等等。

目前代码如下:

'AREAS

Public Sub Areas()

Dim h, btf, bbf, tw, ttf, tbf As Double

h = 300
btf = 150
bbf = 150
tw = 7.1
tbf = 10.7
ttf = 10.7

Call TotalArea(h, btf, bbf, tw, ttf, tbf)
Call Sum_of_Areas(h, btf, bbf, tw, ttf, tbf)

End Sub


Function TotalArea(h, btf, bbf, tw, ttf, tbf As Double) As Double

TotalArea = btf * ttf + bbf * tbf + (h - ttf - tbf) * tw

End Function

Function Area_tf(btf, ttf As Double) As Double

Area_tf = btf * ttf

End Function

Function Area_bf(bbf, tbf As Double) As Double

Area_bf = bbf * tbf

End Function

Function Area_w(h, ttf, tbf, tw As Double) As Double

Area_w = (h - ttf - tbf) * tw

End Function

Function Sum_of_Areas(h, btf, bbf, tw, ttf, tbf As Double) As Double

Sum_of_Areas = Area_tf + Area_bf + Area_w

End Function

第一位运行良好,即 TotalArea 函数,但另一个(Sum_of_Areas)只是给了我错误。我试图找出合适的方法是什么,我需要声明哪些变量以及在哪里声明。以及我需要将哪些变量传递给函数。

谢谢!

【问题讨论】:

  • 您必须将每个参数传递给非可选的函数(或子函数)。所以Area_tf + Area_bf + Area_w 中的Sum_of_Areas 缺少他们的参数!请记住,Dim h, btf, bbf, tw, ttf, tbf As Doubleonly 声明 tbfas Double,其他类型为 Variant。没有错误消息?

标签: vba excel


【解决方案1】:

您必须使用 sub 和 function 的相同类型变量。 并且不要调用函数。

Public Sub Areas()

Dim h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double
Dim Total As Double, mySum As Double
h = 300
btf = 150
bbf = 150
tw = 7.1
tbf = 10.7
ttf = 10.7

Total = TotalArea(h, btf, bbf, tw, ttf, tbf)
mySum = Sum_of_Areas(h, btf, bbf, tw, ttf, tbf)
Range("a1") = Total
Range("a2") = mySum
End Sub


Function TotalArea(h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double) As Double

TotalArea = btf * ttf + bbf * tbf + (h - ttf - tbf) * tw

End Function

Function Area_tf(btf As Double, ttf As Double) As Double

Area_tf = btf * ttf

End Function

Function Area_bf(bbf As Double, tbf As Double) As Double

Area_bf = bbf * tbf

End Function

Function Area_w(h, ttf, tbf, tw As Double) As Double

Area_w = (h - ttf - tbf) * tw

End Function

Function Sum_of_Areas(h As Double, btf As Double, bbf As Double, tw As Double, ttf As Double, tbf As Double) As Double

'Sum_of_Areas = Area_tf + Area_bf + Area_w
Sum_of_Areas = Area_tf(btf, ttf) + Area_bf(bbf, tbf) + Area_w(h, ttf, tbf, tw)

End Function

【讨论】:

  • 谢谢你们!我将尝试尽可能多地组织,在 sub 中只声明一次所有变量,然后从那里调用我需要的函数。这是进行此操作的正确方法吗?购买,一旦我开始添加更多东西,它可能会变得有点令人生畏。有什么方法可以让 pyhton 变得更容易吗?就像在 python 中进行所有处理,只需将变量从 vba 发送到 python,然后返回其他变量(结果)?
  • @Miguel,这取决于您的数据结构。
  • 我的想法是有一个用户表单,用户可以在其中输入一些数字。然后对这些数字进行一堆处理(基本上是根据土木工程规范检查),最后在所有处理后给用户一些更多的数字。 python会有用吗?如果是这样,用户是否必须在其机器上安装 python?
  • 我的观点是,是的,使用 Excel 作为简单的前端并在 Python 中进行所有计算是完全可能的,但为什么呢?必须有一个非常充分的理由为什么我会这样做,而且我在你对项目的解释中看不到任何这样的理由。你正在做的计算类型是 excel 的面包和黄油东西,它是它的设计目的,并且会非常简单有效地完成。通过正确地构造代码,在其上放置正确的缩进和大量的 cmets,您可以使其非常简单。这只是我的观点,但希望它有所帮助。 .
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-15
  • 2013-10-10
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多