Вызов макроса VBA из .NET - приложения

Автор Тема: Вызов макроса VBA из .NET - приложения  (Прочитано 15667 раз)

0 Пользователей и 4 Гостей просматривают эту тему.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Вызов макроса VBA из .NET - приложения
« Ответ #15 : 21-11-2019, 16:50:28 »
Велосипед - это что-то типа ScriptPro: https://github.com/Viruaithal/ScriptPro
О, это великолепная штука (без шуток)! Она меня сильно выручала в своё время - когда мне надо было решать проблемы с открытием чертежей, в которых было порядка 100 внешних ссылок. Я просто настраивал, чтобы при открытии чертежа выполнялся скрипт очистки чертежа (кстати, с использованием ExplodeProxy!), таймаут открытия что-то около 3-х минут и перезапуск AutoCAD после открытия 10 чертежей подряд. Затем "скармиливал" всю корневую папку с чертежами этой программе и шёл пить кофе. Минут через 20-40 приходил и смотрел отчёт, в котором выводилось какие чертежи не получилось открыть или обработать (обычно, это было 2-3 чертежа) и уже разбирался именно с ними.
По крайней мере, в версиях AutoCAD 2011-2014 она работала великолепно!

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #16 : 22-11-2019, 08:50:28 »
Хм, странно, но у меня не собирается ScriptPro. Ругается на xaml файл, на Ribbon. Хотя ссылку на System.Windows.Controls.Ribbon я добавил в зависимостях. Кто - то сталкивался ?
Ошибка : тег "RibbonWindow" не существует в пространстве имен XML "clr-namespace:System.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary".

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #17 : 22-11-2019, 11:58:36 »
Вот код XML :

Код - XML [Выбрать]
  1. <ribbon:RibbonWindow x: Class="BatchProcessApp.MainWindow"
  2.  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.  xmlns:mcl="clr-namespace:DrawingListUC;assembly=DrawingListUC"
  5.  xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
  6.  Title="ScriptPro 2.0"
  7.         x:Name="RibbonWindow"
  8.         Width="Auto"
  9.  Height="Auto"
  10.  Icon="/ScriptPro;component/Images/cog.png"
  11.  Loaded="RibbonWindow_Loaded"
  12.  Closing="RibbonWindow_Closing">
  13.   <Grid x:Name="LayoutRoot">
  14.     <Grid.RowDefinitions>
  15.       <RowDefinition Height="Auto"/>
  16.       <RowDefinition Height="*"/>
  17.     </Grid.RowDefinitions>
  18.         <ribbon:Ribbon
  19.        x:Name="Ribbon">
  20.       <ribbon:Ribbon.ApplicationMenu>
  21.         <ribbon:RibbonApplicationMenu Visibility="Hidden">
  22.           <ribbon:RibbonApplicationMenuItem
  23.            Header="Drawing"
  24.            x:Name="DrawingMenu1"/>
  25.         </ribbon:RibbonApplicationMenu>
  26.       </ribbon:Ribbon.ApplicationMenu>
  27.       <ribbon:RibbonTab x:Name="ManageTab" Header="ScriptPro">
  28.         <ribbon:RibbonGroup Header="List">
  29.           <ribbon:RibbonButton
  30.            x:Name="NewList"
  31.            Label="New"
  32.            LargeImageSource="/ScriptPro;component/Images/script-new.png"
  33.            Click="NewList_Click" />
  34.             <ribbon:RibbonButton
  35.            x:Name="WizardList"
  36.            Label="Wizard"
  37.            LargeImageSource="/ScriptPro;component/Images/magic_wand_2.png"
  38.            Click="WizardList_Click" />
  39.           <ribbon:RibbonButton
  40.            x:Name="LoadList"
  41.            Label="Load"
  42.            LargeImageSource="/ScriptPro;component/Images/script-add.png"
  43.            Click="LoadList_Click" />
  44.           <ribbon:RibbonButton
  45.            x:Name="SaveList"
  46.            Label="Save"
  47.            LargeImageSource="/ScriptPro;component/Images/script-save.png"
  48.            Click="SaveList_Click" />
  49.           <ribbon:RibbonButton
  50.            x:Name="SaveAsList"
  51.            Label="Save As"
  52.            LargeImageSource="/ScriptPro;component/Images/script-save.png"
  53.            Click="SaveAsList_Click" />
  54.           <ribbon:RibbonButton
  55.            x:Name="LoadSCP"
  56.            Label="Load SCP Project"
  57.            LargeImageSource="/ScriptPro;component/Images/table_add.png"
  58.            Click="LoadSCP_Click" />
  59.         </ribbon:RibbonGroup>
  60.         <ribbon:RibbonGroup x:Name="Group1" Header="Drawing files">
  61.           <ribbon:RibbonButton
  62.            x:Name="AddDWGFile"
  63.            LargeImageSource="Images\add.png"
  64.            Label="Add" Click="AddDWGFile_Click"/>
  65.           <ribbon:RibbonButton
  66.            x:Name="AddDWGFolder"
  67.            Label="Add From Folder"
  68.            LargeImageSource="/ScriptPro;component/Images/folder_add.png"
  69.            Click="AddDWGFolder_Click"/>
  70.           <ribbon:RibbonButton
  71.            x:Name="RemoveDWG"
  72.            Label="Remove"
  73.            LargeImageSource="/ScriptPro;component/Images/Delete.png"
  74.            Click="RemoveDWG_Click"/>
  75.           <ribbon:RibbonButton
  76.            x:Name="SkipDWG"
  77.            Label="Check/Uncheck"
  78.            LargeImageSource="/ScriptPro;component/Images/checked-unchecked.png"
  79.            Click="SkipDWG_Click" />
  80.         </ribbon:RibbonGroup>
  81.         <ribbon:RibbonGroup Header="Run">
  82.           <ribbon:RibbonButton
  83.            x:Name="RunChecked"
  84.            Label="Checked"
  85.            LargeImageSource="/ScriptPro;component/Images/script-go-checked.png"
  86.            Click="RunChecked_Click" />
  87.           <ribbon:RibbonButton
  88.            x:Name="RunSelected"
  89.            Label="Selected"
  90.            LargeImageSource="/ScriptPro;component/Images/script-go-selected.png"
  91.            Click="RunSelected_Click" />
  92.           <ribbon:RibbonButton
  93.            x:Name="RunFailed"
  94.            Label="Failed"
  95.            LargeImageSource="/ScriptPro;component/Images/script-go-failed.png"
  96.            Click="RunFailed_Click"/>
  97.         </ribbon:RibbonGroup>
  98.         <ribbon:RibbonGroup Header="Stop">
  99.           <ribbon:RibbonButton
  100.            x:Name="StopProcess"
  101.            Label="Stop"
  102.            LargeImageSource="/ScriptPro;component/Images/stop.png"
  103.            Click="StopProcess_Click" />
  104.         </ribbon:RibbonGroup>
  105.         <ribbon:RibbonGroup Header="Options">
  106.           <ribbon:RibbonButton
  107.            x:Name="ProcessOptions"
  108.            Label="Settings"
  109.            LargeImageSource="/ScriptPro;component/Images/wrench.png"
  110.            Click="ProcessOptions_Click" />
  111.         </ribbon:RibbonGroup>
  112.             <ribbon:RibbonGroup Header="Help">
  113.             <ribbon:RibbonButton
  114.            x:Name="ProcessHelp"
  115.            Label="Help"
  116.            LargeImageSource="/ScriptPro;component/Images/Help.png"
  117.            Click="ProcessHelp_Click"/>
  118.          </ribbon:RibbonGroup>
  119.      </ribbon:RibbonTab>
  120.     </ribbon:Ribbon>
  121.     <DockPanel
  122.      Grid.Row="1"
  123.      Height="Auto"
  124.      HorizontalAlignment="Stretch"
  125.      Margin="12,10,0,0"
  126.      Name="dockPanel1"
  127.      VerticalAlignment="Stretch"
  128.      Width="Auto">
  129.       <WindowsFormsHost
  130.        Name="FormUserControl"
  131.        DockPanel.Dock="Top">
  132.         <mcl:DrawingListControl
  133.          x:Name="DWGControl"
  134.          Name="DrawingListUserControl"/>
  135.       </WindowsFormsHost>
  136.     </DockPanel>
  137.   </Grid>
  138. </ribbon:RibbonWindow>
  139.  
  140.  
« Последнее редактирование: 22-11-2019, 12:01:28 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #18 : 22-11-2019, 12:00:56 »
Я немного подредактировал ScriptPro под последние версии (проект для VS 2017).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #19 : 22-11-2019, 12:03:01 »
sangvinik128,
Этот xaml-файл теперь выглядит так:
Код - XML [Выбрать]
  1. <ribbon:RibbonWindow x:Class="BatchProcessApp.MainWindow"
  2.  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3.  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4.  xmlns:mcl="clr-namespace:DrawingListUC;assembly=DrawingListUC"
  5.  xmlns:ribbon="clr-namespace:System.Windows.Controls.Ribbon;assembly=System.Windows.Controls.Ribbon"
  6.  Title="ScriptPro 2.0"
  7.         x:Name="RibbonWindow"
  8.         Width="Auto"
  9.  Height="Auto"
  10.  Icon="/ScriptPro;component/Images/cog.png"
  11.  Loaded="RibbonWindow_Loaded"
  12.  Closing="RibbonWindow_Closing">
  13.   <Grid x:Name="LayoutRoot">
  14.     <Grid.RowDefinitions>
  15.       <RowDefinition Height="Auto"/>
  16.       <RowDefinition Height="*"/>
  17.     </Grid.RowDefinitions>
  18.     <ribbon:Ribbon
  19.      x:Name="Ribbon">
  20.       <ribbon:Ribbon.ApplicationMenu>
  21.         <ribbon:RibbonApplicationMenu Visibility="Hidden">
  22.           <ribbon:RibbonApplicationMenuItem
  23.            Header="Drawing"
  24.            x:Name="DrawingMenu1"/>
  25.         </ribbon:RibbonApplicationMenu>
  26.       </ribbon:Ribbon.ApplicationMenu>
  27.       <ribbon:RibbonTab x:Name="ManageTab" Header="ScriptPro">
  28.         <ribbon:RibbonGroup Header="List">
  29.           <ribbon:RibbonButton
  30.            x:Name="NewList"
  31.            Label="New"
  32.            LargeImageSource="/ScriptPro;component/Images/script-new.png"
  33.            Click="NewList_Click" />
  34.             <ribbon:RibbonButton
  35.            x:Name="WizardList"
  36.            Label="Wizard"
  37.            LargeImageSource="/ScriptPro;component/Images/magic_wand_2.png"
  38.            Click="WizardList_Click" />
  39.           <ribbon:RibbonButton
  40.            x:Name="LoadList"
  41.            Label="Load"
  42.            LargeImageSource="/ScriptPro;component/Images/script-add.png"
  43.            Click="LoadList_Click" />
  44.           <ribbon:RibbonButton
  45.            x:Name="SaveList"
  46.            Label="Save"
  47.            LargeImageSource="/ScriptPro;component/Images/script-save.png"
  48.            Click="SaveList_Click" />
  49.           <ribbon:RibbonButton
  50.            x:Name="SaveAsList"
  51.            Label="Save As"
  52.            LargeImageSource="/ScriptPro;component/Images/script-save.png"
  53.            Click="SaveAsList_Click" />
  54.           <ribbon:RibbonButton
  55.            x:Name="LoadSCP"
  56.            Label="Load SCP Project"
  57.            LargeImageSource="/ScriptPro;component/Images/table_add.png"
  58.            Click="LoadSCP_Click" />
  59.         </ribbon:RibbonGroup>
  60.         <ribbon:RibbonGroup x:Name="Group1" Header="Drawing files">
  61.           <ribbon:RibbonButton
  62.            x:Name="AddDWGFile"
  63.            LargeImageSource="Images\add.png"
  64.            Label="Add" Click="AddDWGFile_Click"/>
  65.           <ribbon:RibbonButton
  66.            x:Name="AddDWGFolder"
  67.            Label="Add From Folder"
  68.            LargeImageSource="/ScriptPro;component/Images/folder_add.png"
  69.            Click="AddDWGFolder_Click"/>
  70.           <ribbon:RibbonButton
  71.            x:Name="RemoveDWG"
  72.            Label="Remove"
  73.            LargeImageSource="/ScriptPro;component/Images/Delete.png"
  74.            Click="RemoveDWG_Click"/>
  75.           <ribbon:RibbonButton
  76.            x:Name="SkipDWG"
  77.            Label="Check/Uncheck"
  78.            LargeImageSource="/ScriptPro;component/Images/checked-unchecked.png"
  79.            Click="SkipDWG_Click" />
  80.         </ribbon:RibbonGroup>
  81.         <ribbon:RibbonGroup Header="Run">
  82.           <ribbon:RibbonButton
  83.            x:Name="RunChecked"
  84.            Label="Checked"
  85.            LargeImageSource="/ScriptPro;component/Images/script-go-checked.png"
  86.            Click="RunChecked_Click" />
  87.           <ribbon:RibbonButton
  88.            x:Name="RunSelected"
  89.            Label="Selected"
  90.            LargeImageSource="/ScriptPro;component/Images/script-go-selected.png"
  91.            Click="RunSelected_Click" />
  92.           <ribbon:RibbonButton
  93.            x:Name="RunFailed"
  94.            Label="Failed"
  95.            LargeImageSource="/ScriptPro;component/Images/script-go-failed.png"
  96.            Click="RunFailed_Click"/>
  97.         </ribbon:RibbonGroup>
  98.         <ribbon:RibbonGroup Header="Stop">
  99.           <ribbon:RibbonButton
  100.            x:Name="StopProcess"
  101.            Label="Stop"
  102.            LargeImageSource="/ScriptPro;component/Images/stop.png"
  103.            Click="StopProcess_Click" />
  104.         </ribbon:RibbonGroup>
  105.         <ribbon:RibbonGroup Header="Options">
  106.           <ribbon:RibbonButton
  107.            x:Name="ProcessOptions"
  108.            Label="Settings"
  109.            LargeImageSource="/ScriptPro;component/Images/wrench.png"
  110.            Click="ProcessOptions_Click" />
  111.         </ribbon:RibbonGroup>
  112.             <ribbon:RibbonGroup Header="Help">
  113.             <ribbon:RibbonButton
  114.            x:Name="ProcessHelp"
  115.            Label="Help"
  116.            LargeImageSource="/ScriptPro;component/Images/Help.png"
  117.            Click="ProcessHelp_Click"/>
  118.          </ribbon:RibbonGroup>
  119.      </ribbon:RibbonTab>
  120.     </ribbon:Ribbon>
  121.     <DockPanel
  122.      Grid.Row="1"
  123.      Height="Auto"
  124.      HorizontalAlignment="Stretch"
  125.      Margin="12,10,0,0"
  126.      Name="dockPanel1"
  127.      VerticalAlignment="Stretch"
  128.      Width="Auto">
  129.       <WindowsFormsHost
  130.        Name="FormUserControl"
  131.        DockPanel.Dock="Top">
  132.         <mcl:DrawingListControl
  133.          x:Name="DWGControl"
  134.          Name="DrawingListUserControl"/>
  135.       </WindowsFormsHost>
  136.     </DockPanel>
  137.   </Grid>
  138. </ribbon:RibbonWindow>
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Вызов макроса VBA из .NET - приложения
« Ответ #20 : 22-11-2019, 12:10:22 »
Хм, странно, но у меня не собирается ScriptPro. Ругается на xaml файл, на Ribbon. Хотя ссылку на System.Windows.Controls.Ribbon я добавил в зависимостях. Кто - то сталкивался ?
Ошибка : тег "RibbonWindow" не существует в пространстве имен XML "clr-namespace:System.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary".
Здесь есть уже всё готовое (scriptpro_2.0.msi.zip): https://knowledge.autodesk.com/support/autocad/downloads/caas/downloads/content/autodesk-customization-conversion-tools.html

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #21 : 22-11-2019, 12:11:37 »
Хм, странно, но у меня не собирается ScriptPro. Ругается на xaml файл, на Ribbon. Хотя ссылку на System.Windows.Controls.Ribbon я добавил в зависимостях. Кто - то сталкивался ?
Ошибка : тег "RibbonWindow" не существует в пространстве имен XML "clr-namespace:System.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary".
Здесь есть уже всё готовое (scriptpro_2.0.msi.zip): https://knowledge.autodesk.com/support/autocad/downloads/caas/downloads/content/autodesk-customization-conversion-tools.html
Интереснее же пощупать на уровне исходников. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Вызов макроса VBA из .NET - приложения
« Ответ #22 : 22-11-2019, 12:12:58 »
Ну я на всякий случай - если надо работу сделать "уже вчера", а собрать никак не получается  :)

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #23 : 22-11-2019, 15:10:03 »
Спасибо, всё собралось, всё заработало  :) Полезная штука вообще

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #24 : 09-01-2020, 10:01:03 »
Здравствуйте ! Я пишу ленту на C# .NET, чтобы из кнопок ленты вызывать макросы VBA в AutoCAD. Но у меня не получается вызвать макрос VBA из .NET как в примере https://adn-cis.org/zagruzka-i-vyipolnenie-vba-makrosa-iz-.net-prilozheniya.html, т.к. у меня возникает ошибка "CS0656 : Отсутствует обязательный для компилятора член "Microsoft.CSarp.RuntimeBinder.CSharpArgumentInfo.Create". Ругается на эти строки :
Код - C# [Выбрать]
  1. dynamic acadApplication = Application.AcadApplication;
  2. acadApplication.LoadDVB("");
  3.  

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #25 : 09-01-2020, 10:02:51 »
Как я понимаю, причина кроется в типе dynamic

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #26 : 09-01-2020, 10:33:22 »
Добавь reference Microsoft.CSharp:



Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн sangvinik128Автор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #27 : 09-01-2020, 10:39:17 »
Добавь reference Microsoft.CSharp:


Добавил, всё отработало, спасибо Вам