通过Delphi超越Excel vba代码

Jor*_*sov -5 delphi excel vba excel-vba

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

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

    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.
Run Code Online (Sandbox Code Playgroud)

此代码抛出运行时异常:


调试器异常通知

项目Project1.exe引发了异常类EOleException,并显示消息"OLE错误800A03EC".流程停止了.使用"步骤"或"运行"继续.

在第34行

Dav*_*nan 9

这很简单:

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

确保您不要忘记打电话CoInitializeEx以便COM投资.

  • @JordanBorisov,我不明白你的逻辑.大卫努力为你提供答案; 它不会立即为你工作,当被问及你得到的错误的详细信息时,你用一个向下的投票打他...这个网站是为了互相帮助,这是真的,但它不是为了"给予你teh codez"`.你应该跟进细节,你甚至没有说出给你错误的行号!知道大卫如果他在发布之前实际*测试了代码,我不会感到惊讶.如果他不这样做,我肯定当你说它不起作用时他会这样做.问题肯定在你身边. (2认同)