Excel VBA调用MATLAB有后期绑定和前期绑定的用法。本节前面各小节使用的都是后期绑定的用法。后期绑定在Excel VBA中使用CreateObject函数或GetObject函数创建或获取MATLAB进程。[大谦MATLAB,dqmatlab点com]
下面的例子用Excel VBA调用MATLAB生成指定阶次的魔方矩阵。首先在VBA环境中设计窗体,如图2-7所示。在窗体上添加两个文本框和一个命令按钮。上面的小文本框输入魔方矩阵的阶次,单击命令按钮后在大文本框中输出指定阶次的模仿矩阵。控件使用默认名称。
图2-7 设计对话框
双击命令按钮,在代码编辑器中输入代码:
Private Sub CommandButton1_Click()
Dim strFun As text-blue-400">String
Dim objMATLAB As Object
Set objMATLAB = text-blue-400">CreateObject("matlab.text-blue-400">application")
strFun = "magic(" & TextBox1.Text & ")"
objMATLAB.Visible = True
TextBox2.Text = text-blue-400">CStr(objMATLAB.Execute(strFun))
End Sub
运行代码,在弹出的窗体中,在小文本框中输入数字5,单击命令按钮,在大文本框中输出5次魔方矩阵,如图2-8所示。
图2-8 生成5次魔方矩阵
使用后期绑定时,CreateObject函数返回的是Object类型的对象,因为不确定对象是什么类型的对象,所以引用该对象的属性或方法时没有智能提示。
使用前期绑定时,需要引用MATLAB提供的类库。新建Excel文件并如后期绑定时创建VBA工程,创建窗体。在“工具”菜单中单击“引用…”选项,打开“引用”对话框,如图2-9所示。
图2-9 引用MATLAB类库
在“可使用的引用”列表框中勾选“Matlab Automation Server Type Library”选项,单击“确定”按钮,引用MATLAB类库。
在窗体上双击命令按钮,在代码编辑器中输入代码:
Private Sub CommandButton1_Click()
Dim strFun As text-blue-400">String
Dim objMATLAB As MLApp.MLApp
Set objMATLAB = New MLApp.MLApp
strFun = "magic(" & TextBox1.Text & ")"
objMATLAB.Visible = True
TextBox2.Text = text-blue-400">CStr(objMATLAB.Execute(strFun))
End Sub
运行代码,在弹出的窗体中,在小文本框中输入数字5,单击命令按钮,在大文本框中输出5次魔方矩阵,如图2-8所示。
使用前期绑定时,因为知道对象具体是哪种类型的对象,用点引用对象的成员时会有智能提示,如图2-10所示。
图2-10 使用前期绑定时有智能提示
另外,使用前期绑定时程序的工作效率比用后期绑定时的高很多。所以,综合起来讲,更提倡使用前期绑定。