|
Как правильно из 1С запустить код в VBA Excel? | ☑ | ||
---|---|---|---|---|
0
VadimSh
01.07.05
✎
13:21
|
Как правильно из 1С запустить код в VBA Excel?
В VBA Excel это меняет палитру стандартного цвета номер 15 ActiveWorkbook.Colors(15) = RGB(234, 234, 234) Но как правильно это запустить из 1С v7.7? Вот такой код вызывает ошибку Excel = СоздатьОбъект("Excel.Application"); Excel.Workbooks.Add(); Excel.ActiveWorkbook.Colors(15) = Excel.RGB(234, 234, 234); Err: Excel.ActiveWorkbook.Colors(15) <<?>>= Excel.RGB(234, 234, 234); {Отчет.Прайс.Форма.Модуль(272)}: Неопознанный оператор При проверке модуля обнаружены синтаксические ошибки! |
|||
1
OFF
01.07.05
✎
13:27
|
Вот облегчение жизни по перекладке макроса экселя на 1с
http://www.snif.ru/pages/vba.htm |
|||
2
OFF
01.07.05
✎
13:29
|
в твоем разе должно быть
Excel.ActiveWorkbook.Colors(15) = RGB(234, 234, 234); |
|||
3
Asmody
01.07.05
✎
13:46
|
Run Method
Runs a macro or calls a function. This can be used to run a macro written in Visual Basic or the Microsoft Excel macro language, or to run a function in a DLL or XLL. expression.Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30) expression Required. An expression that returns an Application object. Macro Optional Variant. The macro to run. This can be either a string with the macro name, a Range object indicating where the function is, or a register ID for a registered DLL (XLL) function. If a string is used, the string will be evaluated in the context of the active sheet. Arg1-Arg30 Optional Variant. The arguments that should be passed to the function. |
|||
4
VadimSh
01.07.05
✎
13:48
|
не так тоже не заработает, а еще одну ошибку напишет
RGB(234, 234, 234) - это экселевская функция, 1с не знает что это, без ссылки на эксель 1с вдвойне ругаться будет. Но эта правая часть даже не важно она заменяется эквивалентным числом ( в данном случае 15395562), которое возвращает эта функция и нет вопросов. 1с ругается на скобки в конце .Colors(15) ,но это надо передать экселю номер цвета, чтобы он знал для которого палитру менять. Без скобок для 1с типа вроде без ошибок выглядит, но уже для экселя - это уже ошибка |
|||
5
VadimSh
01.07.05
✎
14:08
|
А через этот метод такую конструкцию 1с пропускает, но Эксель в таком вот варианте не собирается это число-аргумент присваивать свойству .Colors(15)
Excel.Run(Excel.ActiveWorkbook.Colors(15), 15790320); |
|||
6
Asmody
01.07.05
✎
14:13
|
собственно вызов макроса на Excel:
в 1С: Процедура Сформировать() excel=CreateObject("Excel.Application"); excel.Workbooks.Open("D:\My\testmacro.xls"); for i=1 to 10 do for j=1 to 10 do excel.ActiveWorkbook.sheets(1).cells(i,j).value=excel.run("testmacro.xls!F_Sum",i,j); enddo; enddo; excel.visible=-1; КонецПроцедуры в Excel: в файл testmacro.xls добавлен модуль и в нем Function F_Sum(a1, a2) F_Sum = a1 + a2 End Function все работает |
|||
7
Asmody
01.07.05
✎
14:21
|
a в воем случае вообще можно написать прямо в 1С:
Функция RGB(r,g,b) Экспорт Возврат g * 256 + r + b * 256 * 256; КонецФункции ... ActiveWorkbook.Colors(15) = RGB(234, 234, 234) эффект будет тот же |
|||
8
VadimSh
01.07.05
✎
14:33
|
Вот функция RGB(r,g,b) как раз прекрасно работает, про неё можно забыть,
ActiveWorkbook.Colors(15) = RGB(234, 234, 234) эквивалентно записи ActiveWorkbook.Colors(15) = 15395562 но 1с ругается на конструкцию Excel.ActiveWorkbook.Colors(15) <<?>> а если запускать через метод run, то у вас в testmacro.xls была функция F_Sum(a1, a2) принимающая аргументы при запуске и метод их успешно передавал. А присвоить свойству какое-то число т.е. .Colors(15) = 15395562 не работает как такая функция с двумя аргументами .Colors(15, 15395562) |
|||
9
Asmody
01.07.05
✎
14:46
|
в Excel напиши такой макрос:
Sub SetColors(WB, ColIndex, value) WB.Colors(ColIndex) = value End Sub вызывай из 1С так: excel.run("testmacro.xls!SetColors",ActiveWorkbook,15,15395562); |
|||
10
VadimSh
01.07.05
✎
15:16
|
Согласен, такой вариант должен работать, но тут файл экселевский создается с нуля через 1с. Как из 1с втолкнуть в него макрос, а затем перед записью удалить не представляю. Это если использовать файл шаблон, заранее загнать в него нужный код и 1с-кой работать уже с ним то да. Но не хотелось бы привязываться к отдельно заготовленному файлу.
|
|||
11
Asmody
01.07.05
✎
15:47
|
держи:
excel.Workbooks.Add(); wb=excel.ActiveWorkbook; vbc=excel.vbe.ActiveVBProject.VBComponents; last=vbc.Count(); vbc.Add(1); module=vbc.Item(last + 1).CodeModule; module.InsertLines(1, "Sub SetColors(WB,ColIndex,Value)"); module.InsertLines(2, "WB.Colors(ColIndex)=Value"); module.InsertLines(3, "End Sub"); Message(""+wb.Colors(15)); excel.run("SetColors",wb,15,15395562); Message(""+wb.Colors(15)); vbc.Remove(vbc.Item(last+1)); excel.visible=-1; |
|||
12
VadimSh
01.07.05
✎
17:22
|
Ничего себе, это круто
Все получилось, спасибо, вопрос ичерпан, тема закрыта И я думал, что я что-то знаю в VBA... |
|||
13
ШтушаКутуша
01.07.05
✎
20:21
|
то Asmody: примите мои поздравления! все дюже гарно!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |