【问题标题】:Excecute Excel vba code through Delphi [closed]通过Delphi执行Excel vba代码[关闭]
【发布时间】:2012-03-20 04:08:30
【问题描述】:

您好,我的问题是如何通过 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 错误 800A03EC”。进程停止。使用 Step 或 Run 继续。

第 34 行

【问题讨论】:

  • 您链接到的文章包含一个合理的答案,带有代码。你有什么问题?
  • 问题是我不知道如何让它工作以及它是否工作,因为代码不是很清楚。
  • 你试过什么? lespaul 的帖子似乎很容易尝试。
  • 代码非常清晰。我建议您尝试根据此示例编写自己的代码,如果遇到困难,请在此处发布您的尝试并包含任何错误消息的全文。
  • 如果我在自己的本地 excel 应用程序中定义了一个带有一些操作的宏,并且我想通过 delphi 程序运行这个宏,我该怎么做。这家伙 lespaul 只是提供了一些代码来说明如何填充一些单元格以及如何运行我不知道它是否是宏的 Process_Report。那么如何通过 Delphi 程序在 Excel 中运行我自己的定义宏呢?

标签: excel delphi vba


【解决方案1】:

就这么简单:

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

确保您不要忘记调用 CoInitializeEx 来初始化 COM。

【讨论】:

  • 好的,但它不起作用:) --------------- 调试器异常通知 --- ------------------------ Project Project1.exe 引发异常类 EOleException,并带有消息“OLE 错误 800A03EC”。进程停止。使用 Step 或 Run 继续。
  • 它不起作用?更多细节怎么样。
  • @JordanBorisov,我不明白你的逻辑。大卫努力为您提供答案;它不会立即对您有用,当被问及您遇到的错误的详细信息时,您会以一票否决的方式打倒他......这个网站是为了互相帮助,这是真的,但它不适用于"giving you teh codez" .你应该跟进细节,你甚至没有说给你错误的行号!了解 David,如果他在发布之前真的 测试 代码,我不会感到惊讶。如果他没有,我相信当你说它不起作用时他确实做到了。问题肯定在你身边。
  • 此答案中的代码有效。
  • 确认大卫的回答。我刚刚复制了它并且它有效。但是,如果您使用的是 Office 2010(或者可能是 2007),您可能需要使用 .xlsm 文件扩展名,并且您可能必须检查安全设置以允许在工作簿中运行宏。但是,是的,它有效。您确实有一个名为“MyMacro”的宏和一个名为“myworkbook”的工作簿,不是吗。 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-21
相关资源
最近更新 更多