Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Visio + Delphi запуск макроса


Автор: MPavel 8.6.2013, 22:34
Доброго времени суток!

Столкнулся с проблемой, выполнения макроса в Visio из Delphi. Вообще по данной связке информации в интернете очень мало. Единственное что нашел, у Visio нет метода запуска макросов, в отличии от того же Word и Excel.

Наткнулся так же на пример кода запуска макроса, но написанного на C#

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Visio = Microsoft.Office.Interop.Visio;
using Excel = Microsoft.Office.Interop.Excel;
namespace RunMacroInViso
{
  class Program
  {
    static void Main(string[] args)
    {
      string fileDir = Environment.CurrentDirectory;
      if (fileDir.EndsWith("\\bin\\Debug"))
      {
        fileDir = fileDir.Replace("bin\\Debug", "");
      }
      //string fileName = "TestMacro.xlsm";
      //Excel.Application excelApp = new Excel.Application();
      //excelApp.Visible = true;
      // Excel.Workbook wb = excelApp.Workbooks.Open(fileDir + fileName);
      
      //RunMacro(excelApp, new object[] { "Test" });
      string fileName = "TestMacro.vsd";
      Visio.Application visioApp = new Visio.Application();
      visioApp.Visible = true;
      Visio.Document doc = visioApp.Documents.Open(fileDir + fileName);
 
      RunMacro(visioApp, new Object[] { "Test" });
    }

    private static void RunMacro(object oApp, object[] oRunArgs)
    {
      oApp.GetType().InvokeMember("Run",
        System.Reflection.BindingFlags.Default |
        System.Reflection.BindingFlags.InvokeMethod,
        null, oApp, oRunArgs);
    }

  }
} 


к сожалению перевести непосредственно процедуру RunMacro на Delphi что бы оно заработало, так и не смог. 

Может кто то сталкивался с подобной задачей и есть какие то решения?

Автор: gesper 17.6.2013, 20:21
Alt+F11 Открываем VBA. там либо экспериментируем с кодом, либо сразу смотрим окно испектора вызываемого через F2 и находим нужные функции. Команда практически 1 к 1 пишутся на делфе.

Автор: MPavel 20.6.2013, 21:45
Решение найдено, правда не совсем то что хотелось бы, но по крайней мере сейчас получается запустить макрос находящийся в файле Visio из Delphi.

Но вопрос остается открытым как вызвать макрос и передать какаие либо данные в макрос.

Код

var
  MsVisio: Variant;

...

procedure ...
begin
  MsVisio := CreateOleObject('Visio.Application');  
  MsVisio.Visible := True;
  MsVisio.Application.Documents.Open(Edit1.Text);
  MsVisio.ActiveDocument.ExecuteLine ('Macro1'); // собственно запуск макроса

...
end;


Возможно кому то будет полезно, 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)