
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.01.2006, 01:30:34
|
|||
|---|---|---|---|
|
|||
Передача параметра при вызове макроса Excel из Delphi |
|||
|
#18+
С Рождеством, уважаемые господа! Вот пример вызова из Delphi6 макроса VBA Excel : //****************** Wksheet: TExcelWorksheet; Wkbook: TExcelWorkbook; XlApp: TExcelApplication; ....... Var SomeStr : String; procedure MyProc; Var NewValue : String; begin SomeStr := 'Hello!'; XlApp.Run('VBA_Sub',SomeStr); NewValue := SomeStr; end; //*********************** Имеется макрос VBA_Sub, откуда надо вернуть в MyProc значение SomeStr = 'By!' '************************** Sub VBA_Sub(ByRef Vba_Param) NewStr = Vba_Param ' ............. Здесь NewStr = "Hello!" (!!!) Vba_Param = "By!" End Sub '*************************** Параметр передается по ссылке, но только в одну сторону. Почему SomeStr возвращается равным 'Hello!' вместо ожидаемого 'By!'?! Вызываю тот же VBA_Sub из макроса Makros1: '*********************** Sub Makros1() Dim ActualParam as String ActualParam = "Hello!" Call VBA_Sub(ActualParam) NewStr = ActualParam ' ........NewStr действительно равна "By!". End Sub ************************ Что здесь неправильно? Как вернуть новое значение параметра? Спасибо за внимание. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.01.2006, 08:41:06
|
|||
|---|---|---|---|
|
|||
Передача параметра при вызове макроса Excel из Delphi |
|||
|
#18+
Вы, батенька, немного покривили душой, надо бы написать в Excel так и тогда получается аналогичный результат Код: plaintext 1. 2. 3. 4. 5. 6. 7. Может такой вариант подойдет в Delphi Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.01.2006, 16:14:33
|
|||
|---|---|---|---|
|
|||
Передача параметра при вызове макроса Excel из Delphi |
|||
|
#18+
sergeyvqВы, батенька, немного покривили душой, надо бы написать в Excel так и тогда получается аналогичный результат Function VBA_Sub(ByRef Vba_Param) As String NewStr = Vba_Param ' ............. Здесь NewStr = "Hello!" (!!!) VBA_Sub = "By!" End Function Как говаривал Ги де Мопассан - "Да здравствует маленькая разница!" В Вашем варианте, уважаемый Sergeyvq, новое значение возвращает функция , но мне хотелось изменить и вернуть "By!" вместо "Hello!" для формального параметра VBA_Param . Или я неверно понял описание ByRef?! VBA Help Sub Statement .............. ByRef ---- Optional. Indicates that the argument is passed by reference . ByRef is the default in Visual Basic. .............. by reference A way of passing the address of an argument to a procedure instead of passing the value. This allows the procedure to access the actual variable. As a result, the variable's actual value can be changed by the procedure (выделение цветом - мое) to which it is passed. Unless otherwise specified, arguments are passed by reference. Разумеется, можно построить и так, чтобы после анализа формального параметра внутри функции VBA в Delphi сама функция вернула нужное значение. Но я не о том спрашивал, согласитесь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.01.2006, 16:29:25
|
|||
|---|---|---|---|
|
|||
Передача параметра при вызове макроса Excel из Delphi |
|||
|
#18+
sergeyvq Может такой вариант подойдет в Delphi NewValue := XlApp.Run('VBA_Sub',SomeStr); Прошу простить, уважаемый sergeyvq, мою невнимательность. В самом деле, именно так и работает, через вызов функции с присвоением. Что сказать? Я был не прав. Вопрос снят. Благодарю Вас за помощь. Всего Вам самого светлого! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.01.2006, 18:28:47
|
|||
|---|---|---|---|
Передача параметра при вызове макроса Excel из Delphi |
|||
|
#18+
Robertino, возвращать значение можно конечно и через функцию и это даже более удобно. Но и через параметры можно без проблем :) Замени в исходном Дельфийском примере SomeStr: String; на SomeStr: TOleVariant; и все должно заработать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&tablet=1&tid=2185394]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 318ms |

| 0 / 0 |
