Nov 152014
 
This entry is part 12 of 13 in the series Matlab基础班附加材料

需要完成的目标:以Matlab作为控制器,打开一个Excel文件,然后运行其中保存的某个宏的过程(SUB)。原理就是通过COM接口,调用Excel,然后加载宏,进而运行相关的SUB(当然Function也可以)

首先温习Excel COM的模型结构,如下图。这个图的来源是: http://www.cnblogs.com/yangecnu/p/excel-object-model.html

Excel-Object-Model-Hierarchy然后开始写代码。

ExclWrapper=actxserver('.application');  %启动一个Excel COM Server,它对应上图中的 Application 对象。

WrapperBook=ExclWrapper.WorkBooks;   %对应的是上图的Workbooks 对象

WrapperBook.Open('D:\mymacro.xlam');  %要加载宏文件,下面需要运行的 SUB 或者 函数就在这个宏文件里面

因为只是为了简单测试,所以宏文件里面很简单,代码如下:

Sub vbatest()
Debug.Print "测试成功"
End Sub

运行它,只有一个效果,就是会弹出一个提示框。要运行这个过程,只要在Matlab中输入:

ExclWrapper.Run('vbatest')

返回的是NaN,因为这个是Sub,不是函数,没有返回值。当然,运行时的效果就是弹出一个提示对话框。

如果要调用函数,又如何呢?也很简单,假设宏文件里面有这个简单的函数:

Function vbafun(h As Double) As Double
vbafun = h * h
End Function

作用就是计算平方。在Excel的任何一个单元格里面,填入: =vbafun(4) 即可计算出16来。下面,我们要在Matlab里面计算出来,如下面的代码:

>> ExclWrapper.Run('vbafun',4.23)
ans =
17.8929

第一个参数里面写函数名称,后面跟着输入值,然后直接返回计算结果。

更复杂一点又如何呢?四个字:以此类推。 具体见下面的例子:

在宏文件中的函数是:

Function vbafun2(h As Double, k As Double, l As Double) As Double
vbafun2 = h * k / l
End Function

然后在Matlab中的调用过程是:

>> ExclWrapper.Run('vbafun2',4,5,6)
ans =
3.3333

 

No related posts.

Series Navigation<< Matlab-R连接的最新版及问题Matlab变量数值的“变与不变” >>
Bookmark/FavoritesSina WeiboGoogle+FacebookQQTwitterYahoo BookmarksBaiduDiggEmailGoogle GmailOutlook.comEvernotePrintAIMLinkedInBlogger PostKindle ItShare

Related Posts:

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>