Excel VBA调用来自另一个具有多个input,不同大小输出的子部分
我想在同一个模块里面调用另一个sub的sub。 第一个子将是我的主代码,在那里我会打电话给第二个子程序。 第二个子程序接收多个input为整数,双精度,双精度数组和双精度matrix。 数组和matrix的大小是已知的,并存储在一个整型variables中。 该子也返回几个输出。 所以,我想要做这样的事情。
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 eg 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
它是如何知道哪个子开始运行的主要子。 我可以把次要的子顶部和代码以某种方式从底部子程序开始?
要调用另一个子内部的子,你只需要做:
Call Subname()
所以,如果你有CalculateA(Nc,kij, xi, a1, a)
你需要call CalculateA(Nc,kij, xi, a1, a)
由于哪个运行第一个问题是由你来决定的,当你想运行一个子程序时,你可以到macros列表中select一个你想运行的程序,运行它,你也可以给它一个捷径,只需要按这些键,在次要的Private sub CalculateA(...)
我通常这样做Private sub CalculateA(...)
导致这种方式它不出现在macros列表中,它更容易工作
希望它有帮助,布鲁诺
PS:如果你有任何其他问题只是问,但这不是一个你要求代码的社区,你来到这里是一个没有运行的问题或代码,而是寻求帮助,而不是像你那样“如果你可以用Excel VBA格式编写,那就太好了。“
VBA潜艇没有macros。 一个VBA子可以是一个macros,但它不是必须的。
术语“macros”仅用于logging的用户动作。 从这些动作中产生一个代码并存储在一个子文件中。 这个代码很简单,不提供像循环这样强大的结构,例如Do .. until,for .. next,while .. do,等等。
更优雅的方法是,devise和编写自己的VBA代码,而不使用macrosfunction!
VBA是基于对象和事件的语言。 Subs或bette称之为“子例程”,是由专门的事件启动的。 事件可以是按下button或打开工作簿以及许多其他非常特定的事件。
如果你专注于VB6而不是VBA,那么你可以说,总是有一个主窗口或主窗体。 如果您启动编译的可执行文件“xxxx.exe”,此表单将启动。
在VBA中你没有这样的东西,但是你有一个由Excel启动的XLSM文件。 您可以将一些代码附加到Workbook_Open事件。 如果您打开所需的称为工作簿的Excel文件,则会生成此事件。 在工作簿中有工作表。
更熟悉excel的所谓对象模型是有用的。 该工作簿有几个事件和方法。 工作表还有几个事件和方法。
在基于对象的模型中,你有对象,有事件和方法。 方法是你可以用一个对象做的动作。 事件是可能发生在对象上的事情。 一个对象可以包含另一个对象,依此类推。 您可以创build新的对象,如工作表或图表。
这真是两个问题。
第一个在这里回答: 在VBA中调用一个Sub
第二个,protip:在VBA中没有主要的子程序。 忘记程序性的通用语言。 VBA subs是“macros” – 您可以通过按Alt + F8或在工作表中添加一个button来运行它们,然后从自动生成的“ButtonX_Click”子项调用所需的子对象。