Имя: Пароль:
1C
1С v8
Проблема с OLEObjects при работе из 1с
0 Andy MilkyWay
 
17.03.14
14:46
Необходимо добавить кнопки на листы книги Excel, которая формируется из 1с с помощью ComОбъекта. Делаю средствами Excel - все прекрасно получается. Теперь попытался перенести тот же функционал в 1с, ругается на операторе, которым добавляется кнопка в контейнер листа:

cmd = ws.OLEObjects.Add("Forms.CommandButton.1", nButtonLeft, nButtonTop, nButtonWidth, nButtonHeight);

, где ws - ссылка на определенный лист Excel. Говорит, что нет объекта OLEObjects. Проверил в отладке - действительно нет. Но как-то же это работает в Excel'е?
1 Torquader
 
17.03.14
14:49
А тип листа какой ?
2 Andy MilkyWay
 
17.03.14
14:52
(1) Worksheet
3 Torquader
 
17.03.14
14:54
Так у Worksheets есть функция
Function OLEObjects([Index]) As Object
которая возвращает объект по номеру - ФУНКЦИЯ!!!
4 Andy MilkyWay
 
17.03.14
14:56
(3) Согласен, так мы получаем конкретный экземляр объекта, но сам контейнер OLEObjects должен же быть виден в отладчике?
5 Torquader
 
17.03.14
14:57
(4) Я так понимаю, что это не контейнер, а функция, то есть должна вызываться со скобочками.
Просто в VBA скобочки - это не обязательный атрибут.
Попробуй OleObjects()
6 Andy MilkyWay
 
17.03.14
15:02
Хорошо, например, попробую

obj = ws.OleObjects()

. А дальше как написать, что я хочу туда добавить новый объект?

cmd = obj.Add(....)

Так?
7 Torquader
 
17.03.14
15:03
(6) Да - если получил коллекцию, то в неё уже можно что-то добавлять.
8 Andy MilkyWay
 
17.03.14
15:04
(7) сейчас запустил формирование, пробую...
9 Andy MilkyWay
 
17.03.14
15:06
(7) Сделал, теперь пишет "Невозможно получить свойство Add класса OLEObjects"
10 Torquader
 
17.03.14
15:08
(9) Свойство ? Там должен быть метод.
11 Torquader
 
17.03.14
15:09
Function Add([ClassType], [Filename], [Link], [DisplayAsIcon], [IconFileName], [IconIndex], [IconLabel], [Left], [Top], [Width], [Height]) As OLEObject
12 Andy MilkyWay
 
17.03.14
15:10
(10)                     

oleObj = ws.OLEObjects();
cmd = oleObj.Add("Forms.CommandButton.1", nButtonLeft, nButtonTop, nButtonWidth, nButtonHeight);
13 Torquader
 
17.03.14
15:13
(12) Задай все параметры явно - в VBA они идут именованными и могут идти не по порядку, 1С умеет передавать параметры только по порядку - получается, что nButtonLeft - это имя файла.
14 Andy MilkyWay
 
17.03.14
16:00
Спасибо, все получилось, когда сделал так:

cmd = oleObj.Add("Forms.CommandButton.1",,,,,,, nButtonLeft, nButtonTop, nButtonWidth, nButtonHeight);
15 Torquader
 
17.03.14
16:03
(14) В следующий раз читайте инструкцию к VBA самостоятельно.
16 Andy MilkyWay
 
17.03.14
17:11
(15) по поводу количества параметров - каюсь, не подумал. А по поводу первого оператора вряд ли бы додумался. Спасибо
17 Torquader
 
17.03.14
17:20
(16) И то и другое я посмотрел во встроенном в Excel просмотрщике объектов, а также в файле справки.
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.