Excel VBA从另一个具有多个输入,不同大小的输出的子调用子
Posted
技术标签:
【中文标题】Excel VBA从另一个具有多个输入,不同大小的输出的子调用子【英文标题】:Excel VBA calling sub from another sub with multiple inputs, outputs of different sizes 【发布时间】:2013-05-26 19:49:16 【问题描述】:我想从同一个模块中的另一个子中调用一个子。第一个子程序是我的主要代码,我会在那里调用第二个子程序。第二个子程序接收多个输入,如整数、双精度、双精度数组和双精度矩阵。数组和矩阵的大小是已知的并存储在一个整数变量中。 sub 还返回几个输出。所以,我想做这样的事情。
sub Main()
Nc As integer
Dim kij(1 To Nc, 1 To Nc), xi(1 to Nc), a1 As Double
'I assign values to my variables from the excelsheet e.g. Nc=Cells(1,1) etc.
CalculateA(Nc,kij, xi, a1, a)
Cells(5,5)=a
end sub
sub CalculateA(Nc as integer,kij as matrix double, xi as array double, a as Double)
a=0
For i=1 To Nc
For j=1 To Nc
a = a + kij(i,j)*x(i)*x(j)
Next j
Next i
a = a*a1
end sub
它如何知道哪个子是它开始运行的主子。我可以把二级子放在上面,代码从底部子程序开始吗?
【问题讨论】:
Calling a Sub in VBA 的可能重复项 部分复制了Calling a Sub in VBA。 “仅”在 VBA 中调用 Sub 回答了有关如何调用另一个 sub 的问题,并为该问题提供了更好的解释。 【参考方案1】:要在另一个 sub 中调用一个 sub,你只需要这样做:
Call Subname()
所以你有CalculateA(Nc,kij, xi, a1, a)
你需要有call CalculateA(Nc,kij, xi, a1, a)
作为第一个运行的问题由您决定,当您要运行子程序时,您可以转到宏列表中选择要运行的程序并运行它,您也可以给它一个快捷键,因此您只需按这些键即可运行它。虽然,在二级潜艇上,我通常使用Private sub CalculateA(...)
这样做,因为这样它不会出现在宏列表中并且更容易工作
希望对你有帮助, 布鲁诺
PS:如果您有任何其他问题,请直接问,但这不是您要求代码的社区,您会带着一个问题或未运行的代码来这里寻求帮助,而不是像您所做的那样“如果你能写成 Excel VBA 格式就好了。”
【讨论】:
【参考方案2】:这确实是两个问题。
第一个在这里回答:Calling a Sub in VBA
到第二个,提示:VBA 中没有主子程序。忘记程序化的通用语言。 VBA 子程序是“宏”——您可以通过按 Alt+F8 或在工作表中添加一个按钮并从自动生成的“ButtonX_Click”子程序中调用您想要的子程序来运行它们。
【讨论】:
【参考方案3】:VBA subs 不是宏。 VBA sub 可以是宏,但不是必须的。
术语“宏”仅用于记录的用户操作。从这些动作中生成代码并将其存储在子程序中。这段代码很简单,不提供强大的结构,如循环,例如 Do .. until、for .. next、while.. do 等。
更优雅的方式是,在不使用宏功能的情况下设计和编写自己的 VBA 代码!
VBA 是一种基于对象和面向事件的语言。子程序,或者最好称之为“子程序”,由专用事件启动。该事件可以是按下按钮或打开工作簿以及许多其他非常具体的事件。
如果您专注于 VB6 而不是 VBA,那么您可以声明,总有一个主窗口或主窗体。如果您启动编译的可执行文件“xxxx.exe”,则会启动此表单。
在 VBA 中你没有这样的东西,但是你有一个由 Excel 启动的 XLSM 文件。您可以将一些代码附加到 Workbook_Open 事件。如果您打开称为工作簿的所需 excel 文件,则会生成此事件。在工作簿中有工作表。
熟悉所谓的excel对象模型是很有用的。工作簿有几个事件和方法。工作表还有几个事件和方法。
在基于对象的模型中,您拥有具有事件和方法的对象。方法是您可以对对象执行的操作。事件是可能发生在对象上的事情。一个对象可以包含另一个对象,依此类推。您可以创建新对象,例如工作表或图表。
【讨论】:
如何在 VBA 中创建子程序,然后从开发人员选项卡的宏功能中调用它?如果 Excel 不提供此功能,则存在严重缺陷。以上是关于Excel VBA从另一个具有多个输入,不同大小的输出的子调用子的主要内容,如果未能解决你的问题,请参考以下文章
使用 VBA 插入图片,Excel 2010 和 Excel 2016 之间的大小不同
具有多个标准排名的 Excel VBA 动态数据验证下拉列表