【问题标题】:Can Matlab write a macro in an Excel file via ActiveX?Matlab 可以通过 ActiveX 在 Excel 文件中编写宏吗?
【发布时间】:2018-01-29 22:04:32
【问题描述】:

有几篇文章和说明如何通过 ActiveX 使用 Matlab 运行 Excel 宏。但是有没有可能用Matlab把这样的宏写到Excel文件中呢?

背景:我编写了一个将数据导出到 Excel 文件的 Matlab 工具。这些 Excel 文件应该包含一个特定的宏,该宏取决于包含的数据。

有一个丑陋的解决方法:我可以使用已经包含的特定宏创建 Excel 模板。然后复制相应的模板并用导出数据填充。但也许有更好更灵活的解决方案来解决这个问题……

【问题讨论】:

  • 你是如何写入文件的?你在使用 Excel 的对象模型吗?如果是这样,那么您可以访问WorkbookVBProject,它应该从那里一帆风顺。如果不是,您当前的解决方案似乎是合理的。
  • 也就是说这个问题太宽泛不适合这个网站。
  • 如果您有多个用户,您的“丑陋”解决方法通常是最可行的解决方案:更改 VBProject 的 VBA 访问权限需要“对 VBProject 的信任访问”设置,这通常不 i> 启用...
  • [trite comment] 更好、更灵活的解决方案是完全避免使用 Excel 并在 MATLAB 中进行所有数据处理[/trite comment]
  • @TimWilliams ...并且有很好的理由...

标签: vba matlab excel activex


【解决方案1】:

一旦您允许以编程方式访问 VBA 项目,我建议您将宏写入文本文件(*.txt 或 *.bas),然后运行将导入此文本文件的命令具有 VBA 代码模块.例如:

DataFileName = 'D:\Test\DataFile.xlsm';
CodeFileName = 'D:\Test\CodeFile.txt';

Excel = actxserver('Excel.Application');
Workbooks = Excel.Workbooks;
Workbook=Workbooks.Open(DataFileName);

% Make Excel visible (Optional)
Excel.visible = 1;

%% Import the code
Import(Workbook.VBProject.VBComponents,CodeFileName);

%% Save
Excel.Application.DisplayAlerts = 0; %Avoid overwrite warning
SaveAs(Workbook,DataFileName);
Excel.Application.DisplayAlerts = 1;

%% Close Excel
Quit(Excel);
delete(Excel);

在这种情况下,CodeFile.txt 可能如下所示:

Attribute VB_Name = "ModuleName"
Option Explicit

Sub SomeMacro()

    Msgbox "From MATLAB, with love..."

End Sub

在这里,Attribute VB_Name = ... 行是必不可少的,它将确定模块的名称。对于Option Explicit,不是强制的,而是good practice

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多