|
Работа с Экселем | ☑ | ||
---|---|---|---|---|
0
margoigo
10.05.16
✎
18:48
|
Задача такая, надо вывести прайс на разные листы в эксель по группам. Это все норм, выводит. Теперь надо на каждом листе закрепить область. И вот тут не работает. Делаю так:
Вариант 1 ОбщаяКнига = ДокЭксель.WorkBooks.Open(путь); Для каждого СтрЛисты ИЗ ТЗИменаЛистов Цикл Лист= ДокЭксель.ActiveWorkbook.Sheets(СтрЛисты.НомерЛиста); Лист.Cells(8,11).Formula = ИтоговаяФормула; Лист.Range("A12").Select(); ДокЭксель.ActiveWindow.FreezePanes = True; КонецЦикла; вариант 2 КоличествоЛистов = ДокЭксель.Sheets.count; Для лист = 1 По КоличествоЛистов Цикл Листик = ДокЭксель.sheets(Лист); Листик.Cells(8,11).Formula = ИтоговаяФормула; Листик.Range("A12").Select(); ДокЭксель.ActiveWindow.FreezePanes = True; КонецЦикла; В обоих случаях ругается на Select(), ошибка времени выполнения. Ну вот и как быть?? |
|||
1
Мэс33
10.05.16
✎
18:57
|
Может просто Select ?
|
|||
2
Мэс33
10.05.16
✎
18:59
|
(1) тьфу... зря написал
|
|||
3
Pistol
10.05.16
✎
19:00
|
Включить запись макроса в ёкселе, прокликать руками, посмотреть, что записалось.
|
|||
4
Мэс33
10.05.16
✎
19:01
|
(3)
Sub Макрос1() With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.FreezePanes = True End Sub |
|||
5
margoigo
10.05.16
✎
19:04
|
(4) записывала макрос, смотрела что пишет, оттуда и взяла. Только он select без скобок пишет. На первом листе если, то прекрасно работает, если на втором, то уже все ругается. Пробую вашим методом.
|
|||
6
margoigo
10.05.16
✎
19:25
|
Попробовала так:
КоличествоЛистов = ДокЭксель.Sheets.count; Для лист = 1 По КоличествоЛистов Цикл Листик = ДокЭксель.sheets(Лист); Листик.Cells(8,11).Formula = ИтоговаяФормула; ДокЭксель.ActiveWindow.SplitRow = 12; ДокЭксель.ActiveWindow.FreezePanes = 1; КонецЦикла; Так только один лист закрепил. А надо на каждом. (4) Как оператор with в 1С записать? Не поняла. У меня макрос совсем другое выдает. |
|||
7
Мэс33
10.05.16
✎
19:41
|
(6) Так у вас что такое ДокЭксель.ActiveWindow?
Вам надо не просто лист перебирать, а делать его активным. |
|||
8
Мэс33
10.05.16
✎
19:45
|
(7) совсем "по-русский" разучился ))
В общем, надо вам листы перебрать, и каждый лист тогда уж делать активным. Может быть как-то и другим способом можно сделать, быстрый гуглинг ответа не нашел. |
|||
9
Мэс33
10.05.16
✎
19:46
|
http://am.rusimport.ru/msaccess/f2.aspx?id=66659
Тут понятно по полочкам во втором комментарии поясняется механизм. |
|||
10
margoigo
10.05.16
✎
19:49
|
В общем, еще раз внимательно на макрос посмотрела и все заработало )))))
ОбщаяКнига = ДокЭксель.WorkBooks.Open(путь); Для каждого СтрЛисты ИЗ ТЗИменаЛистов Цикл Лист = ДокЭксель.ActiveWorkbook.Sheets(СтрЛисты.Имя); Лист.Cells(8,11).Formula = ИтоговаяФормула; // устанавливаем закрепление области Лист.Select(); // ВОТ ЭТУ СТРОКУ НАДО БЫЛО ПРОПИСАТЬ Лист.Range("A12").Select(); ДокЭксель.ActiveWindow.FreezePanes = True; КонецЦикла; Всем СПАСИБИЩЕ!!!!!! |
|||
11
Мэс33
10.05.16
✎
19:51
|
(10) ну да, лист становится активным.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |