Тема: передача параметра ...

как передать параметр в процедуру  AutoCad при запуске из Excel?

FileName = "C:\BAZA_MK\xxxxxx.dvb"

ACadDoc.LoadDVB FileName
ACadDoc.RunMacro "modulxx.Procedura_kotoruyu_zapuskaem"

В хелте у RunMacro параметр тольуо путь к макросу, а про передачу параметра в саму процедуру нет ничего?

Есть ли такая возможность?

Re: передача параметра ...

Записать параметр в файл, пользовательскую переменную или словарь чертежа.
Лучше всего будет воспользоваться пользовательской переменной в AutoCad.

(изменено: Alexandr, 11 июля 2009г. 17:59:57)

Re: передача параметра ...

Sari пишет:

Записать параметр в файл, пользовательскую переменную или словарь чертежа.
Лучше всего будет воспользоваться пользовательской переменной в AutoCad.

Использовал запись в файл, просто думал, может через параметр подскажут.
Спасибо за ответ, теперь подумаем в эту сторону.

...

подумал (поискал где б почитать)
но ничего про создание пользовательской переменной не нашел. или не то искал (если не правильно понял)

Sari, можете носом ткнуть где можно прочесть?

Re: передача параметра ...

> Alexandr
Параметры в процедуры и функции можно передать напрямую.Для этого вместо метода RunMacro нужно использовать метод Eval.
К сожалению формат форума не позволяет прикрепить файлы, поэтому придется тебе их создать самому.

1.Данный код помещаешь в модуль EXcel:

Option Explicit

Public Sub RunAcadMacro()
Dim AcadApp As Object
Dim AcadDoc As Object
Dim dvb_path As String

'Путь к файлу *.dvb, который необходимо загрузить
dvb_path = Application.ActiveWorkbook.Path + "\MyProject.dvb"

'Процедуры и функции которые нужно запустить:
'ЗАПУСК ПРОЦЕДУРЫ БЕЗ ПАРАМЕТРА
Const macro_string_1 = "MyLib.AnyFuns.EmptySub"
'ЗАПУСК ФУНКЦИИ БЕЗ ПАРАМЕТРА
Const macro_string_2 = "MyLib.AnyFuns.EmptyFun"
'ЗАПУСК ПРОЦЕДУРЫ С 2-МЯ ПАРАМЕТРАМИ
Const macro_string_3 = "MyLib.AnyFuns.MySub 3,4"
'Const macro_string_3 = "Call MyLib.AnyFuns.MySub(3,4)"'Можно и так запустить
'ЗАПУСК ФУНКЦИИ С 2-МЯ ПАРАМЕТРАМИ
Const macro_string_4 = "Call MyLib.AnyFuns.MyFunction(3.256,4.123)"

On Error Resume Next
    'Присоединяемся к AutoCAD
    Set AcadApp = GetObject(, "AutoCAD.Application")
    If AcadApp Is Nothing Then
        Set AcadApp = CreateObject("AutoCAD.Application")
    End If
    AcadApp.Visible = True
    'Загружаем *.dvb проект
    AcadApp.LoadDVB dvb_path
    'Запускаем требуемые функции
    AcadApp.Eval (macro_string_1)
    AcadApp.Eval (macro_string_2)
    AcadApp.Eval (macro_string_3)
    AcadApp.Eval (macro_string_4)
On Error GoTo 0
End Sub 

2.В той же папке, сохраняешь VBA проект (AutoCAD):
Файл проекта: MyProject.dvb
Имя проекта: MyLib
Модуль: AnyFuns
В модуле пишешь:

Option Explicit

Public Function MyFunction(ByVal A As Double, ByVal B As Double)
Dim C As Double
    C = (A * A + B * B) ^ (1 / 2)
    MsgBox CStr( C ), vbInformation, "TestRunMacro"
End Function

Public Sub MySub(ByVal A As Double, ByVal B As Double)
Dim C As Double
    C = (A * A * A + B * B * B) ^ (1 / 3)
    MsgBox CStr( C ), vbInformation, "TestRunMacro"
End Sub

Public Sub EmptySub()
    MsgBox "EmptySub", vbInformation, "TestRunMacro"
End Sub

Public Function EmptyFun()
    MsgBox "EmptyFun", vbInformation, "TestRunMacro"
End Function

3.При запуске из Excel процедуры RunAcadMacro загрузится AutoCAD (если был не загружен),загрузится проект MyLib и последовательно появятся 4 окна с результатами работы процедур и функций.

Re: передача параметра ...

Mikha, большое спасибо за предложенное решение. :)