通过Delphi执行Excel vba代码

时间:2012-03-01 16:28:22

标签: excel excel-vba delphi vba

您好我的问题是如何通过Delphi 7程序执行Excel vba代码? 我在互联网上发现了一些文章,没有明确说明。 其中一个是使用OLE: Article

如果您能给我答案的示例代码,我将不胜感激。 主要的问题是我无法理解代码,我需要一些帮助。 变量没有声明,我不会不会工作。 提前致谢

    unit Macro;

    interface

    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ActnList, StdCtrls, Buttons, MSObjCtrls, ComObj, ActiveX;

    type
      TForm1 = class(TForm)
        ActionList1 : TActionList;
        btnMacro : TMSBitBtn;
        acMacro : TAction;
        procedure acMacroExecute(Sender : TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;

    var
      Form1             : TForm1;

    implementation

    {$R *.dfm}

    procedure TForm1.acMacroExecute(Sender : TObject);
    var
      Excel             : OleVariant;
    begin
      Excel := CreateOleObject('Excel.Application');
      Excel.Workbooks.Open('C:\Documents and Settings\iordan.borisov\Desktop\data.xls');
      Excel.Run('PERSONAL.XLSB!MyMacro'); // <<--- Error here.
      Excel.Quit;

    end;
    initialization
      CoInitialize(nil);
    finalization
      CoUninitialize;

    end.

此代码抛出运行时异常:


调试器异常通知

Project Project1.exe引发了异常类EOleException,并显示消息“OLE error 800A03EC”。流程停止了。使用步骤或运行继续。

第34行

1 个答案:

答案 0 :(得分:9)

它非常简单:

uses
  ComObj;
....
var
  Excel: OleVariant;
....
Excel := CreateOleObject('Excel.Application');
Excel.Workbooks.Open('myworkbook.xls');
Excel.Run('MyMacro');
Excel.Quit;

请确保您不要忘记致电CoInitializeEx以便推荐COM。