chumpa написал:
Да, ещё вспомнил по теме -- массивы не передаются, никак (те, которые в VARIANT могут быть).
Есть такая занятная штука - MSScriptControl (я о ней уже упоминал здесь:
viewtopic.php?p=438438#p438438 ). Считаю ее для себя своим открытием года, несмотря на то, что штука известна уже более 10 лет. Как-то всё руки не доходили, а в этом году, к счастью, дошли.
В этот компонент внутри ABAP-программы можно загрузить в виде текста отлаженный код на VBScript и исполнить его. Всякие вкусности Бейсика вроде массивов VARIANT или пропуска необязательных параметров в середине(!) списка - доступны. Нет, напрямую массив в ABAP по-прежнему не передать, НО(!) можно получить вариантный массив (например, значения диапазона ячеек Excel - одной операцией присваивания: varArray = Range("A1:H100")), Бейсиком же развернуть массив в огромную строку, разделив значения в строках символами табуляции, а строки - символами перевода строки. Далее передать строку в стринг ABAP-а, который SPLIT-ами разрезать и поместить во внутреннюю таблицу, завершив, таким образом, преобразование "VARIANT-массив VB => внутренняя таблица ABAP". Законченный пример по передаче массива при случае покажу.
Сейчас же покажу пример с пропуском параметров, уже упомянутый выше в этом обсуждении. В рабочую книгу Excel, открытую из ABAP-а, Бейсиком будет добавлен лист с типом "Диаграмма" (с параметром After), после чего в ABAP-е новый лист будет переименован (конечно же, на самом деле всё "происходит" в ABAP-е и разделение этапов на "абаповский" и "бейсиковский" используется чисто для наглядности):
Code:
REPORT zzzzzzz.
TYPE-POOLS: ole2.
DATA:
excel TYPE ole2_object,
workbooks TYPE ole2_object,
sc TYPE ole2_object,
new_sheet TYPE ole2_object,
vbcode TYPE string.
START-OF-SELECTION.
"открыли Excel в ABAP-е
CREATE OBJECT excel 'Excel.Application'.
SET PROPERTY OF excel 'Visible' = 1.
CALL METHOD OF excel 'Workbooks' = workbooks.
CALL METHOD OF workbooks 'Add'.
"переходим в VB (в смысле, в ActiveX)
CREATE OBJECT sc 'MSScriptControl.ScriptControl'.
SET PROPERTY OF sc 'Language' = 'vbscript'.
"устанавливаем соответствие между объектами VB и ABAP
CALL METHOD OF sc 'AddObject' EXPORTING #1 = 'xlApp' #2 = excel.
"загружаем код VB (vbscript) для выполнения поставленной задачи
CONCATENATE
'Function addNewSheet'
' Set addNewSheet = xlApp.Sheets.Add( , xlApp.Worksheets(2), , -4109)' "-4109 = xlChart
'End Function'
INTO vbcode SEPARATED BY cl_abap_char_utilities=>cr_lf.
CALL METHOD OF sc 'AddCode' EXPORTING #1 = vbcode.
"проигрываем" код VB, возвращая созданный лист ABAP-у
CALL METHOD OF sc 'Run' = new_sheet EXPORTING #1 = 'addNewSheet'.
"снова в ABAP-е - изменяем имя листу, созданному в VB
SET PROPERTY OF new_sheet 'Name' = 'Диаграммище'.
CALL METHOD cl_gui_cfw=>flush.
FREE OBJECT: sc, new_sheet, workbooks, excel.