|
Программирование Excel из 1С | ☑ | ||
---|---|---|---|---|
0
mzelensky
20.12.13
✎
10:45
|
Доброго всем!
Цель - программно (из под 1С) создать экселевский фалик с обработчиками тыкания по ячейкам и открыания соответствующих форм. Часть программного кода (формы, модули в Экселе) можно сделать стандартным и зашить в шаблон файла, но некоторые функции необходимо формировать программно из 1С-ки. Вот пример функции, которую нужно создать в модуле листа Экселя: Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count > 1 Then Exit Sub If Not Intersect(Target, Range("A4:A500")) Is Nothing Then DateForm.Show End If If Not Intersect(Target, Range("B4:B500")) Is Nothing Then ClientForm.Show 0 End If End Sub Подскажите как это все намутить. Писать и запускать макросы умею, но тут немного другое. |
|||
1
mzelensky
20.12.13
✎
10:45
|
Вот нашел небольшой пример, но он очень маленький и без особых комментариев и разборов:
http://help1c.com/faq/view/367.html |
|||
2
mzelensky
20.12.13
✎
10:54
|
ап
|
|||
3
mzelensky
20.12.13
✎
11:06
|
Ну где же спецы по Экселю????
|
|||
4
r2d24
20.12.13
✎
11:11
|
(0) вчера тоже создал тему про Excel и не кто не смог помочь, наверное мало с ним работают?
|
|||
5
mzelensky
20.12.13
✎
11:12
|
(4) Да нифига не мало. Просто все в Пятнице сидят.
|
|||
6
mzelensky
20.12.13
✎
11:14
|
(4) Вот кстати ответ на твой вопрос:
//АВТОПОДГОН КОЛОНОК ПО ШИРИНЕ Эксель.Sheets(1).Range(Эксель.Sheets(1).Cells(2, 2),Эксель.Sheets(1).Cells(8, СчКолонка)).Select(); Эксель.Selection.Columns.AutoFit(); |
|||
7
mzelensky
20.12.13
✎
11:16
|
(6) + а вот так просто можно ширину задать (в данном случае для всей колонки "А"):
Эксель.Sheets(1).Range("A:A").ColumnWidth=50; |
|||
8
Серго62
20.12.13
✎
11:25
|
(0) А какова цель сего мероприятия, если не секрет?
|
|||
9
mzelensky
20.12.13
✎
11:32
|
(8) Тыкаешь по нужной ячейки экселя - открывается дополнительная формочка с данными (там можно поиск удобный делать) - выбираешь нужное тебе значение -> "ОК" и это значение переносится в нужную ячейку.
Косяк в том, что для разных колонок нужно обрабатывать разные предопределенные списки (разные столбцы). Т.е. динамически менять для каждого файла вот эти параметры: Intersect(Target, Range("B4:B500")) |
|||
10
mzelensky
20.12.13
✎
11:38
|
Ну что, опять ап
|
|||
11
mzelensky
20.12.13
✎
11:51
|
Если делаю вот так:
Excel.VBE.ActiveVBProject.VBComponents.Add (1); Excel.VBE.ActiveVBProject.VBComponents.Item(1).CodeModule.InsertLines (1,"Sub МояПроцедура() "+Символы.ПС+" End Sub"); То добавляется модуль "Эта книга" и туда пишется то .что мне надо. А мне надо записать в существующий модуль Листа (первого, напрмиер). Вот как туда попасть? |
|||
12
mzelensky
20.12.13
✎
12:02
|
В общем великим методом ТЫКА я таки нашел, как попасть в нужный мне модуль!
|
|||
13
Мыш
20.12.13
✎
12:18
|
(12) Потомкам оставь знание. Можно прям на этом форуме в этой ветке выложить )
|
|||
14
mzelensky
20.12.13
✎
12:55
|
(13) В общем дотыкался до того, что через вот это свойство
Excel.VBE.ActiveVBProject.VBComponents.Item(1) Можно получать объекты проекта (причем все вне зависимости от группировок). В итоге что мы имеем (на примере моего файла по порядку дерева объектов в VBА): ЭтаКнига - Item(1) Лист1 - Item(2) Лист2 - Item(3) Лист3 - Item(4) Форма1 - Item(5) Форма2 - Item(6) Модуль1 - Item(7) Модуль2 - Item(8) Класс1 - Item(9) Класс2 - Item(10) Т.к. состав заранее известе, мне этого достаточно (+ можно проверять по свойству NAME). А далее вносим данные как и было показано выше: Excel.VBE.ActiveVBProject.VBComponents.Item(1).CodeModule.InsertLines (1,"Sub МояПроцедура() "+Символы.ПС+" End Sub"); Таким образом можно программно набирать VBA код. |
|||
15
Мимохожий Однако
20.12.13
✎
12:59
|
(14)Молодец. Но стесняюсь спросить: Где сиё чудо будет использоваться?
|
|||
16
mzelensky
20.12.13
✎
13:15
|
(15) я в 9 писал.
А вообще это шаблоны экселевские, которые выгружаются из 1С и отправляются клиентам для заполнения. Дабы повысить юзабилити припиливаю всевозможные формочки\выпадающие списки\подсказки. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |