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

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

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Здравствуйте ! Есть макрос, написанный на VBA, который перебирает все DWG - файлы в выбранной пользователем директории и меняет в них значения некоторых атрибутов. Мне нужно написать обработчик ошибок "на открытие" таким образом, чтобы, если при открытии DWG - файла возникает фатальная ошибка, то от такого "битого" файла избавляться и продолжать  работу макроса. Я пытаюсь вшить макрос VBA в код C# .NET  как представлено в примере https://adn-cis.org/zagruzka-i-vyipolnenie-vba-makrosa-iz-.net-prilozheniya.html, но мне выдаёт ошибку "CS0656". Взываю о помощи к опытным программистам в AutoCAD, т.к. не имею опыта в программировании в AutoCAD, до этого писал просто десктопные приложения. Возможно ли это сделать, или стоит всё переписать в .NET' e ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #1 : 20-11-2019, 15:13:54 »
Приветствую на форуме!
Так как тема про C#, то перенёс её в правильный раздел.
но мне выдаёт ошибку "CS0656"
Это код ошибки. А само сообщение об ошибке? И где сам код, чтобы можно было понять на какую строку кода ругается?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #2 : 20-11-2019, 15:15:35 »
Мне нужно написать обработчик ошибок "на открытие" таким образом, чтобы, если при открытии DWG - файла возникает фатальная ошибка, то от такого "битого" файла избавляться и продолжать  работу макроса.
У тебя с большой вероятностью таким образом ничего не получится. При открытии сбойного файла, если возникнет Fatal Error в AutoCAD, ты никаким обработчиком его не перехватишь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #3 : 20-11-2019, 15:18:15 »
Возможно ли это сделать, или стоит всё переписать в .NET' e ?
В любом случае лучше всё переписать на .NET - все возможности, которые были в VBA у тебя останутся, но появится множество новых.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #4 : 20-11-2019, 15:28:09 »
Я понял Вас. Спасибо. А если предварительно фиксить ошибку посредством работы с реестром на С++ ? Просто я даже не знаю происхождения этой ошибки, пока что. Т.к. этот код ошибки нигде в гугле не обсуждался ( по крайней мере я не нашёл ). Вообще, я подозреваю, что проблему вызывает СПДС, т.к. в чистом автокаде фатальная ошибка с этими же файлами DWG не возникает

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #5 : 20-11-2019, 15:35:31 »
А если предварительно фиксить ошибку посредством работы с реестром на С++ ?
Это уже я не понял. Причем здесь реестр?
Правильный алгоритм должен быть таким:
В цикле запускается AutoCAD (а лучше для скорости AcCoreConsole), который обрабатывает dwg-файлы и записывает информацию об обработанных в какой-то файл. Если происходит аварийное завершение (или зависание), AutoCAD перезапускается и начинает обрабатывать со следующего файла.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #6 : 20-11-2019, 15:44:46 »
А как же мне перехватить аварийное завершение AutoCAD ?

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #7 : 20-11-2019, 15:54:01 »
А как же мне перехватить аварийное завершение AutoCAD ?
Я же написал.  Нужно написать своё C# внешнее (exe) приложение, которое запускает AutoCAD/AcCoreConsole и проверять запущен он или нет. Задача не столь тривиальная, так как он может еще и "подвиснуть" (hangup).
Изнути AutoCAD аварийное завершение ты перехватить не сможешь.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: Вызов макроса VBA из .NET - приложения
« Ответ #8 : 20-11-2019, 15:55:24 »
А как же мне перехватить аварийное завершение AutoCAD ?
От вылета AutoCAD тебя мало что спасет. Можешь попробовать какие-то другие варианты перед обработкой файлов, например:

Открывать все файлы через восстановление. Шансы на успех повысятся.

Прогнать всю папку через DWG TrueView, там есть галочка - исправлять ошибки. А потом уже работать с папкой

Программно открывать из папки чертежи, закрывать и записывать имя в лог файл.
Если автокад в конце не вылетел и лог файл соответствует перечню файлов в папке, тогда запускать твою утилиту.

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #9 : 20-11-2019, 16:06:43 »
Понял. Спасибо большое за ответы ! Пока пойду по пути C# .NET

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #10 : 21-11-2019, 10:45:18 »
А вы не подскажете какую - нибудь литературу, в которой можно почитать каким образом работать с DWG - файлом из .NET ? Не через командную строку AutoCAD, а  из exe - файла.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #11 : 21-11-2019, 11:20:44 »
А вы не подскажете какую - нибудь литературу, в которой можно почитать каким образом работать с DWG - файлом из .NET ? Не через командную строку AutoCAD, а  из exe - файла.
Напрямую с DWG-файлом из внешнего exe-файла бесплатно работать нельзя. Все библиотеки для работы с dwg-файлами стоят очень приличных денег.  Это RealDWG от Autodesk:
https://www.autodesk.com/developer-network/platform-technologies/realdwg

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

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #12 : 21-11-2019, 11:26:34 »
Короче всё таки придётся "изобретать велосипед" для решения моей задачи, как я понял. Спасибо. А так надеялся упростить себе жизнь... )

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вызов макроса VBA из .NET - приложения
« Ответ #13 : 21-11-2019, 11:48:07 »
sangvinik128,
Велосипед - это что-то типа ScriptPro: https://github.com/Viruaithal/ScriptPro
Его очень давно не обновляли. Так что возможно, что с последними версиями AutoCAD работать не будет, или будет работать плохо.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вызов макроса VBA из .NET - приложения
« Ответ #14 : 21-11-2019, 13:07:21 »
Хорошо. Спасибо Вам за советы !

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

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • Карма: 735
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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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
  • Карма: 735
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
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь 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:


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